给定一系列的点,求出这些点中可以组合得到的最大的凸多边形的点集。
即求凸包;
① 先从这一系列的点中找到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)在凸包上。最后,需要把最大的点和起点连起来判断。