c# - 去 i-1 时如何处理循环

标签 c# list loops polygon triangulation

我有一个关于在 C# 中循环的一般性问题,尤其是在使用列表时。

我想实现一个简单的多边形切耳算法。 这是算法:

enter image description here (来源: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 = 9n = 1 那:

mod((9 + 1), 10) = 0

特别是,索引 9 处节点的下一个邻居位于索引 0 处。

对于 i = 0n = -1:

mod((0 - 1), 10) = 9

这意味着,索引 0 处的节点的前一个节点位于索引位置 9

关于c# - 去 i-1 时如何处理循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30012187/

相关文章:

javascript - 为什么使用 "for...in"进行数组迭代是个坏主意?

c# - 如何以编程方式更新 DisplayAttribute 上的 Order 属性?

c# - 在 C# 中将 MSG 电子邮件转换为 PDF 文件

python - 返回树中的值列表

F#根据相邻元素的比较将列表拆分为子列表

c++ - 使用数组 C++ 进行组合

c# - 将 PictureBox 中的图像调整到尽可能大,同时保持纵横比?

c# - RestSharp 请求 momentapp 的 restful api

python - 对字典值的操作没有输出

javascript - 如何创建一个由订单号 : array within array, 宾果卡和循环陷阱组成的正方形......