其他分享
首页 > 其他分享> > 我去i-1时如何处理循环

我去i-1时如何处理循环

作者:互联网

我有一个关于在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.

标签:triangulation,list,loops,polygon,c
来源: https://codeday.me/bug/20191120/2043564.html