我获得了一个行beginendLines
列表(使用每个点的索引)
line0 = (0,1)
line1 = (1,2)
line2 = (2,3)
line3 = (3,0)
line4 = (4,5)
line5 = (5,6)
line6 = (6,7)
line7 = (7,4)
line8 = (0,4)
line9 = (1,5)
line10 = (2,6)
line11 = (3,7)
line12 = (0,5)
line13 = (0,8)
line14 = (1,8)
line15 = (5,8)
line16 = (1,9)
line17 = (2,9)
line18 = (6,9)
line19 = (5,9)
line20 = (4,10)
line21 = (5,11)
line22 = (6,12)
line23 = (7,13)
line24 = (10,11)
line25 = (11,12)
line26 = (12,13)
line27 = (13,10)
现在我需要找到一种方法来弄清楚如何用这些创建面孔。到目前为止我尝试了什么:
int progress = 0;
for (int i = 0; i< beginendLines.size(); i+=2){
if (progress == 0){
Face addface;
addface.point_indexes.push_back(beginendLines[i]);
}
else{
addface.point_indexes.push_back(beginendLines[i+1]);
progress = 0;
}
if (i != beginendLines.size - 2){
if (beginendLines[i+2] != beginendLines[i+1]){
progress = 1;
figuur.faces.push_back(addface);
}
}
}
这种方法的问题在于,对于每个for循环,将生成一个新面。另外由于if循环,还有很多东西超出了范围。谁可以帮助我采用不同的方法或重构我的代码?
Face是一个类,包含一个向量,该向量具有可以创建面的点的索引。 e.g. 0,1,2,3
class Face{
public:
vector<int> point_indexes;
};
我想要完成的事情更清楚一点:
figuur.faces.push_back(addface)
应该将一张脸推到figuur.faces
。面应该是最小2点(开始和1行的终点),并且只要下一行的开始等于最后一行的结尾,下一行的结束索引就应该添加到面。
答案 0 :(得分:1)
for (int i = 0; i< beginendLines.size(); i+=2)
这个问题是i == bigenendLines.size() - 1
和。{
当您尝试使用bigenendLines.size() % 2 == 0
i+1
处的某个项目时,您beginendLines[i+1]
会出界
这是一个可能的解决办法:
for (int i = 0; i< beginendLines.size()-1; i+=2)
或使用迭代器循环:
for(lineIterator = beginendLines.begin();
lineIterator != beginendLines.end();
lineIterator++)
如果您可以访问C ++ 11,那么您应该能够进行基于范围的循环(我不确定它对于这种情况是个好主意):
for (const Line& line : beginendLines)
您的下一个问题是您的addface
没有适当的范围。您在if语句中定义它,然后在else语句中使用它(以及之后的if语句)。
if (progress == 0){
Face addface;
addface.point_indexes.push_back(beginendLines[i]);
}
else{
addface.point_indexes.push_back(beginendLines[i+1]); // HOW?
progress = 0;
}
您应该在if语句之前的for循环中定义addface
,例如
for (int i = 0; i< beginendLines.size()-1; i+=2)
{
Face addface;
Other stuff;
}
我对您在for循环中使用的逻辑提出疑问。主要是您要实现的目标,是否需要process
以及是否需要if (i != beginendLines.size - 2)
。
如果你有一个面向量并期望在每次循环迭代时将一个面推到向量上,那么你每次循环迭代都必须创建一个面是很自然的。如果你没有将addface
推向向量,那么我很确定它超出范围并被破坏,所以你不必担心所有这些面孔都会填满你的堆每次循环迭代。