平面凸多边形点有序化环绕

已知顶点V1...Vn是一组共面的凸多边形顶点,且它们的环绕顺序杂乱无序,求正确的环绕顺序。

 

步骤:

1.在平面中取任一个方向(可取任意两点连线,如果是2d顶点,可以直接去x轴或者y轴)为方向,找出在这个方向上最靠后的顶点Vz和次靠后的点Vy

2.以VzVy方向作为base dir,取Vz到其他顶点的Vx(Vx为V1...Vn中,除去两个最靠后的点之外的任一点)的距离矢量,与VzVy依次做点乘

3.对这些点乘升序排序,就是Vz,Vy之后的顶点排列顺序

 

依据:

1.如果在平面任意方向上取出最靠后的点Vz和次最靠后的点Vy,那么VzVy必然是凸多边形的一条边.

2.对于凸多边形一条边VzVy,在这个环绕方向上一次排列的其他点Vx到Vz的距离矢量VzVx与VzVy的点乘必然从大到小排列.只要根据点乘排序,就可以得到全部的环绕顺序

 

实现:


1.如何找出最靠后点和次靠后点组成的第一条边

先把所有点在对选定轴作点乘,最小点乘,和次最小点乘就是最靠后点和次最靠后点,可以用两次冒泡,是否还有更简单的方法?

 

2.计算所有其他点Vx到最靠后点Vz的距离矢量与VzVy方向的点乘,并记录点的索引,降序排序,取出索引作为顺序排列的点的索引


 

 

 

 


 

posted on 2008-08-05 10:27  cgwolver  阅读(558)  评论(0编辑  收藏  举报

导航