ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-11-20 11:07:00  阅读:399  来源: 互联网

标签:triangulation list loops polygon c


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有