【发布时间】:2020-05-10 16:54:17
【问题描述】:
我正在遍历定义圆(闭合形状)的点列表。对于每个点,我都会检查这一点和下一点之间的距离,如果距离大于 4,则决定细分。
for (vector<Node>::reverse_iterator i = nodes.rbegin(); i != nodes.rend(); ++i) // going through list in reverse
{
ofVec3f v1 = i->position;
i += 1;
ofVec3f v2 = i->position;
i -= 1;
float distance = v1.distance(v2);
if (distance > 4) {
interpolate(v1, v2);
}
}
但问题是,我希望最后一次迭代的 i + 1 元素是列表的第一个元素(因为它是一个封闭的形状)。我曾经在 c# 中有一个非常方便的函数,但由于迭代器的工作方式,我无法使用它。
int DiffLine::idxFix(int i) {
int c = nodes.size();
if (i < 0) { return c - 1; }
else { return i % c; }
}
如何在我的 C++ 场景中实现类似的功能?
【问题讨论】:
-
aww 废话我错过了一个 i- 在那个循环的末尾,让我编辑它。我正在有效地尝试测试 p5 p4、p4 p3、p3 p2 ...