求最小凸包——Graham算法——凸包概念 凸包(Convex Hull)是一个计算几何(图形学)中的概念。用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有点的。 Graham_scan算法 这个算法是由数学大师葛立恒(Graham)发明的,他曾经是美国数学学会主席,ATT首席科学家以及国际杂技师协会主席。 Graham 算法是在某种意义上来说求解二维静态凸包的一种最优的算法,这种算法目前被广泛的应用于对各种以二维静态凸包为基础的ACM题目的求解。Graham算法的时间复杂度大约是nlogn,因此在求解二维平面上多个点构成的凸包时,消耗时间相对较少。Graham_scan算法1. 在所有点中选取y坐标最小的一点H,当作基点。如果存在多个点的y坐标都为最小值,则选取x坐标最小的一点。坐标相同的点应排除。HGraham_scan算法2.然后按照其它各点p和基点构成的向量H,p与x轴的夹角进行排序,夹角由小到大进行逆时针扫描。并依次排序。p11p10p6p12p8p5p7p4p9p14p13p3p2p1H(P0)Graham_scan算法3.将P0, P1, p2放入栈中。并将栈内的点依次排号并命名为Ai(i以0为起点), P0, P1必为凸包的两点p11p10p6p12p8p5p7p4p9p14p13p3p2p2p1A2p1A1H(
原创力文档

文档评论(0)