- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的程序中,我得到了一个 vector 矩阵。该 vector 包含点的 x、y 和 z 坐标。为了简化程序,z 坐标不变。现在我得到了一个名为 infill 的变量。这个想法是点的坐标形成一个轮廓。变量填充定义了模型的轮廓和较小轮廓之间的间隙。为了说明这张图片:
如您所见,我得到了模型的轮廓和更小的轮廓。对于矩形,它工作正常。但这只是一个特例。如果我在圆圈上使用它,它就不再起作用了。
所以我的想法是检查 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 语句,而是创建一个按阈值调整多边形大小的算法。
我能想到的最简单的方法是:
请记住,在 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/
我是一名优秀的程序员,十分优秀!