gpt4 book ai didi

c++ - 替代 IF 语句和 switch case

转载 作者:行者123 更新时间:2023-11-30 03:41:48 25 4
gpt4 key购买 nike

在我的程序中,我得到了一个 vector 矩阵。该 vector 包含点的 x、y 和 z 坐标。为了简化程序,z 坐标不变。现在我得到了一个名为 infill 的变量。这个想法是点的坐标形成一个轮廓。变量填充定义了模型的轮廓和较小轮廓之间的间隙。为了说明这张图片:enter image description here

如您所见,我得到了模型的轮廓和更小的轮廓。对于矩形,它工作正常。但这只是一个特例。如果我在圆圈上使用它,它就不再起作用了。

所以我的想法是检查 if 语句。因为我至少有 for 条件,所以我必须检查 16 个 if 语句。

case 1  x<0 y<0 x<infill y<infill
case 2 x<0 y<0 x<infill y>infill
case 3 x<0 y<0 x>infill y<infill
case 4 x<0 y<0 x>infill y>infill
case 5 x<0 y>0 x<infill y<infill
case 6 x<0 y>0 x<infill y>infill
case 7 x<0 y>0 x>infill y<infill
case 8 x<0 y>0 x>infill y>infill

case 9 x>0 y<0 x<infill y<infill
case 10 x>0 y<0 x<infill y>infill
case 11 x>0 y<0 x>infill y<infill
case 12 x>0 y<0 x>infill y>infill
case 13 x>0 y>0 x<infill y<infill
case 14 x>0 y>0 x<infill y>infill
case 15 x>0 y>0 x>infill y<infill
case 16 x>0 y>0 x>infill y>infill

如果我还检查 x 或 y 是否等于 0 或填充,我将有大约 87 个案例。现在我的问题是,如果我使用 if/else if/else 语句,即使我对所有内容发表评论,我的阅读起来也会很痛苦。因为我必须对 vector 中的每个元素执行此操作,所以我使用了 for 循环。

我向社区提出的问题是:是否有一种智能方式来处理所有这些情况。 if 语句是最好的吗?还是使用 switch/case 更好?我的问题是我不知道如何将 switch 与 double vector 和整数变量一起使用。

编辑:关于这里的评论是一个案例的代码

int size=matrix.size();
for(size_t i=0; i<size; i++) {
if(matrix[i][0] < 0) {
if(matrix[i][1] < 0){
if(matrix[i][0] < (infill*(-1))) {
if(matrix[i][1] < (infill*(-1))) {
matrix.push_back(std::vector<double>(3, 0));
r = matrix.size()-1;
matrix[r][0]=matrix[i][0]+infill;
matrix[r][1]=matrix[i][1]+infill;
matrix[r][2]=matrix[i][2];
}
else if(matrix[i][1] > (infill*(-1))) {
matrix.push_back(std::vector<double>(3, 0));
r = matrix.size()-1;
matrix[r][0]=matrix[i][0]+infill;
matrix[r][1]=(matrix[i][1]+infill)*(-1);
matrix[r][2]=matrix[i][2];
}
}
}
}
}

所以我正在检查女巫大小写属于 x 和 y 值,然后计算内部结构的坐标。此外,我不能确定所有的点总是围绕着原点。

最佳答案

如果我错了请纠正我,但本质上你想从 vector 矩阵和一个较小的矩阵创建轮廓 - 使用名为 infill 的偏移调整大小,这是点 Pn 和 Pn' 之间的距离(Pn' 是调整大小后的 Pn)。我在查看上图的左右角时做出了这个假设。此外,我假设矩阵中的所有点都是有序的——这意味着点 Point_n 和 Point_n+1 之间有一条实际线,而不是随机点之间。了解所有这些后,您不想创建更复杂的 if 语句,而是创建一个按阈值调整多边形大小的算法。

我能想到的最简单的方法是:

  • 找到存储在 vector 矩阵中的多边形中的所有闭合多边形
  • 对于每个你想找到的多边形,它都在里面
  • 对于每个多边形,对于每个角,你想找到平分线
  • 对于您找到的角平分线中的每个点 Pn,您希望将其沿多边形内部方向“infil”(创建 Pn' 点)移动

请记住,在 switch case 中你只能使用编译常量变量,这意味着你不能在这里使用 switch case。

如果我没听错的话,这个问题涉及: Scaling an arbitrary polygon这意味着您应该查看他传递的链接中的 Angus Johnson 和解决方案: An algorithm for inflating/deflating (offsetting, buffering) polygons其中对该主题有很多阐述。

关于c++ - 替代 IF 语句和 switch case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37161507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com