如何订购点列表以便不绘制相交的线?

时间:2011-05-18 19:35:28

标签: c#

我从用户点击屏幕获得点数列表。

我想基于这些点绘制一个多边形。问题是用户可能没有按正确的顺序点击(没有相交的段)来形成正确的多边形,因此我正在寻找一个代码片段,它会对该列表进行排序并排列点以正确的顺序形成一个好的多边形...

谢谢!

picture = BAD POLY!

enter image description here

-

picture = GOOD POLY!

enter image description here

3 个答案:

答案 0 :(得分:6)

如果要“包裹”多边形中的点,可以使用任意数量的convex hull finding算法。

答案 1 :(得分:3)

Dude我有同样的问题,但我找到了一个帮助我的代码。 我认为这可以解决你的问题。

查看此链接: http://jsfiddle.net/9DHSf/3/

答案 2 :(得分:1)

你可以取所有点的质心,然后将每个点的点积乘以一个参考点(比如列表中的第一个)到中心,得到列表中每个点的角度。任意参考向量。然后在角度上订购该列表。这将给你(例如)顺时针缠绕顺序中的点,所以你的线只是p1 - > p2,p2 - > p3等...