【发布时间】:2016-05-11 11:38:32
【问题描述】:
在我的程序中,我得到了一个向量矩阵。该向量包含点的 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 语句,我可能会很难阅读,即使我对所有内容都发表评论。因为我必须对向量中的每个元素都执行此操作,所以我使用了 for 循环。
我对社区的疑问是:是否有一种智能的方法来处理所有这些情况。 if 语句是最好的吗?还是使用开关/外壳更好?这里我的问题是我不知道如何将 switch 与双精度向量和整数变量一起使用。
编辑:关于 cmets,这里是一个案例的代码
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];
}
}
}
}
}
所以我正在检查 wwitch case 是否属于 x 和 y 值,然后计算内部轮廓的坐标。此外,我不能确定所有点总是围绕原点分组。
【问题讨论】:
-
形状是否总是能够像这样以 (0,0) 原点为中心?例如,您似乎可以将所有坐标的大小减少 50%,并具有缩小的形状。也许我不太清楚转换的含义是什么——非矩形示例可能会有所帮助。同时列出你在 16 个案例中的实际操作也会有所帮助。
标签: c++ if-statement switch-statement