第一次做计算几何的题。。。
凸包:把给定点包围在内部的、面积最小的凸多边形。
Andrew算法是Graham算法的变种,速度更快稳定性也更好。
首先把所有点排序,按照第一关键字x第二关键字y从小到大排序,删除重复点后得到点序列P1...Pn。
1)把P1,P2放入凸包中,凸包中的点使用栈存储
2)从p3开始,当下一个点在凸包当前前进方向(即直线p1p2)左边的时候继续;
3)否则依次删除最近加入凸包的点,直到新点在左边。
如图,新点P18在当前前进方向P10P15的右边(使用叉积判断),因此需要从凸包上删除点P15和P10,让P8的下一个点为P18。重复该过程直到碰到最右边的Pn,求出下凸包即凸包的下轮廓。然后从Pn反过来重复该步骤求出上凸包,合并起来后就是完整的凸包。
http://blog.csdn.net/lytning/article/details/25238347
大神讲的非常好
所谓叉积判断:
已知向量a,b
坐标X1 Y1 X2 Y2
如果x1y2-x2y1<0就是顺时针,大于零逆时针,等于零平行,如果考试的时候忘记了,可以举个例子自己推导一下的。
%%%dubug还以为是凸包方向写错了。。。
下次注意,下不为例
#你的态度我无所谓,我的态度就是坚持下去,继续努力。#
凸包:把给定点包围在内部的、面积最小的凸多边形。
Andrew算法是Graham算法的变种,速度更快稳定性也更好。
首先把所有点排序,按照第一关键字x第二关键字y从小到大排序,删除重复点后得到点序列P1...Pn。
1)把P1,P2放入凸包中,凸包中的点使用栈存储
2)从p3开始,当下一个点在凸包当前前进方向(即直线p1p2)左边的时候继续;
3)否则依次删除最近加入凸包的点,直到新点在左边。
如图,新点P18在当前前进方向P10P15的右边(使用叉积判断),因此需要从凸包上删除点P15和P10,让P8的下一个点为P18。重复该过程直到碰到最右边的Pn,求出下凸包即凸包的下轮廓。然后从Pn反过来重复该步骤求出上凸包,合并起来后就是完整的凸包。
http://blog.csdn.net/lytning/article/details/25238347
大神讲的非常好
所谓叉积判断:
已知向量a,b
坐标X1 Y1 X2 Y2
如果x1y2-x2y1<0就是顺时针,大于零逆时针,等于零平行,如果考试的时候忘记了,可以举个例子自己推导一下的。
%%%dubug还以为是凸包方向写错了。。。
下次注意,下不为例
#你的态度我无所谓,我的态度就是坚持下去,继续努力。#