我有一个关于在 C# 中循环的一般性问题,尤其是在使用列表时。
我想实现一个简单的多边形切耳算法。 这是算法:
(来源:http://www.diva-portal.org/smash/get/diva2:330344/FULLTEXT02 , 第 6 页)
我已经实现了寻找耳塞。但问题是我必须访问列表的 i-1 或有时甚至是 i-2 元素。我的解决方法是在列表顶部添加最后一个元素,在列表末尾添加第一个元素。
但是当它进入下一步时,当我必须从多边形中删除一些点以通过算法走得更远时,这种方法一点也不好。所以问题是当我在开始工作时尝试访问多边形末端的元素时 =) 我希望这是有道理的。
这里有一个片段,让你知道我在说什么:
// suppose that i = 0 at the first step and polygonPoints is List<Vector>
Vector pi = new Vector(polygonPoints[i - 1]);
Vector pj = new Vector(polygonPoints[i]);
Vector pk = new Vector(polygonPoints[i + 1]);
// create line between i-1 and i+1
Line diagonal = new Line(pi,pk);
如有任何建议,我将不胜感激。 提前致谢。
最佳答案
希望我理解正确:你的问题是计算节点列表末尾的邻居索引,对吗?
如果是这样,您为什么不使用简单的模函数来计算索引:
int mod(int k, int x)
{
return ((k % x) + x) % x;
}
//...
polygonPoints[mod(i + n, polygonPoints.length)]
n
是您的偏移量。
这意味着例如对于包含 10 个元素的多边形点列表,i = 9
和 n = 1
那:
mod((9 + 1), 10) = 0
特别是,索引 9
处节点的下一个邻居位于索引 0
处。
对于 i = 0
和 n = -1
:
mod((0 - 1), 10) = 9
这意味着,索引 0
处的节点的前一个节点位于索引位置 9
。
关于c# - 去 i-1 时如何处理循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30012187/