本文介绍利用Graham Scan算法获得凸包(平面凸包),并动态展示凸包的形成过程。下面用比较通俗的语言,介绍下凸包:在一个二维坐标平面中,散列着一些点,将最外层的点连接起来构成的凸多边型,它能包含散列的所有的点,这个多边形就是这些点构成的点集的凸包。
下面给出几个示例图:
其中图1、图2均不是凸包,因为图1中的凸多边形没有包含点集中所有的点;图2的多边形虽然包含了所有的点,但不是凸多边形。只有图3中的多边形是凸包,既是凸的又包含了所有的点。
下面介绍Graham Scan算法:
-
获得参考点P0:参考点就是所有点中,纵坐标最小的点,如果这样的点有多个,则把这些点中横坐标最小的点作为参考点。可知这个参考点肯定在凸包上。
-
点逆时针排序:
-
1,首先将参考点P0的坐标转换为原点,其他的点也按照上述规则转换到相应的点;