卷包裹法 得到凸包

给定一系列的点,求出这些点中可以组合得到的最大的凸多边形的点集。

即求凸包;

 

① 先从这一系列的点中找到y值最小的点,如果存在相等的y值,则取x值最小的点。

② 再根据其他各点与最小的点的向量之间的叉积的关系,对其他各点进行排序。

http://www.cnblogs.com/Booble/archive/2011/02/28/1967179.html

网址中的博客中说明的十分清楚;

两个向量:a b

if(a x b>0)则说明向量a在b的外侧,否则说明b在a的外侧。

将以上各点与最小点的向量进行叉乘,如果一个点与任何一个点的值都>0,那么该点在最外侧,为第二小点。

如有两点的向量的乘积为0,则比较两点的x值,x值更小一点的在排序中也更小一点。

③ 排序完之后,先将序列中的两个最小的点作为凸包的起始点,开始沿着排序的方向判断这一系列的点是否在凸包上;

即:if (a(i-1)i x ai(i+1)>0),则说明点(i-1)在凸包上。最后,需要把最大的点和起点连起来判断。

posted on 2012-07-14 11:41  yumao  阅读(577)  评论(0)    收藏  举报

导航