平面凸多边形点有序化环绕
已知顶点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方向的点乘,并记录点的索引,降序排序,取出索引作为顺序排列的点的索引