我想按顺时针顺序对点矢量进行排序以形成多边形但我需要适当的中心才能这样做。我已经尝试过averages方法,但有些要点根本没有正确排序。找到顺时针分拣点时工作中心的正确方法是什么?
凹陷部分失败
由于
这是一张图片:
绿色圆圈是中心。
看起来应该更像这样:
答案 0 :(得分:11)
如果您没有预先定义的中心点,则“按顺时针顺序排序”的概念没有明确定义。
如果你所拥有的只是一堆你需要排序的点,并且你事先并不知道该中心,那么这个问题通常没有一个解决方案。该问题有许多替代解决方案,每个解决方案都会为您提供不同的多边形。
此外,找到一个允许您通过CW(或CCW)排序重新创建原始多边形的中心只能用于特殊类别的多边形:所谓的star-shaped多边形。星形多边形的主要特性是可以在多边形内部找到一个点,多边形的整个内部是“可观察的”(我希望很明显没有定义“可观察”的意思)。
如果您的多边形不是星形,那么这个中心点就不存在了。并且,由于这个原因,无法通过CW排序重新创建原始多边形。
图片中的牛轮廓显然不是星形多边形,这意味着您将永远无法通过对某个中心,任何中心周围的点进行排序来重新创建原始牛轮廓。没有“正确的方法”。这是不可能的。
答案 1 :(得分:2)
我认为最可靠的策略(除了重新设计您的程序/系统,因此首先不会出现此问题)是最小化多边形的总周长。
这不是一个简单的问题,但这是一个应该运行良好的启发式方法:
这只是一种启发式方法,而不是解决方案。我不确定它是否能保证产生多边形。
答案 2 :(得分:1)
以任何点作为中心,您应该能够确定集合中所有点的距离和角度,之后按角度排序很简单。但是,您选择作为中心的点将影响排序顺序,因此在选择一个点作为中心之前,很难知道“正确”顺序应该是什么。
所以,如果你选择质心作为中心(似乎是一个不错的选择),但有些点相对于那个点排序不正确,那么我会说你的排序代码存在问题。或者,如果您对算法未满足的排序顺序有所期望,那么我会说您的一个假设(排序顺序或中心位置)不正确。
答案 3 :(得分:-1)
参考Barycenter。可能这就是你要找的东西