【发布时间】:2018-07-22 22:55:13
【问题描述】:
我遇到了另一个问题。我有一个算法,它实现了绕组数算法来检测一个点是否位于多边形内。该算法要求多边形的边缘以逆时针方向定向。我目前正在通过检查多边形的中心是否在边缘的左侧来做到这一点。如果不是,则按顺时针方向制作线条,并更改缠绕数算法结果的符号。
在大多数情况下,这种方法效果很好。但是,我遇到了中心在多边形之外的情况。在这一点上,我的算法中断了,因为一些边被记录为逆时针,而实际上它们是顺时针的。
我一直在寻找一些资源以获得一些灵感:
How to determine if a list of polygon points are in clockwise order?
Ordering CONCAVE polygon vertices in (counter)clockwise?
https://math.stackexchange.com/questions/340830/clockwise-or-anticlockwise-edges-in-a-polygon
http://jeffe.cs.illinois.edu/teaching/373/notes/x05-convexhull.pdf
但是,这些资源主要处理凸多边形。我需要开发一种可以同时处理凸多边形和凹多边形的通用算法。虽然,如果这不存在(或无法完成),那么我将解决创建两个单独的算法并检测多边形是否是凹/凸的。
理想的算法将简单地检测特定边的方向是顺时针还是逆时针。但我对算法持开放态度,这些算法将在多边形的逆时针流中使用边缘和顶点。
我一直在考虑一种不需要使用多边形中心点的算法,因为结果将取决于中心是在多边形内部还是外部。
如果您有任何问题,请随时在 cmets 中,我会尽快回答。谢谢!
编辑:
我应该注意线条的方向是随机的。有些会是逆时针的。其他顺时针方向
【问题讨论】:
-
如果您知道边是顺时针或逆时针顺序,并且您的多边形很简单(即边不交叉)并且您想要的绕组数就是检测一个点是否是是否在多边形中,那么既然如果绕组数为零,那么一个点在外面,你为什么要关心顺序?
-
行的顺序并不是什么大问题。我想如果它能让问题更容易思考的话。要点是线条的方向是逆时针方向。 IE,开始和结束节点的顺序是多边形的“流”方向顺时针/逆时针