博客参考:http://blog.youkuaiyun.com/chao_xun/article/details/8042403
谢谢 【chao_xun】把凸包写的这么详细。
原始思路
关于凸包的问题的解决的最初思路是这样的。
<1>找到一个基准点<必须在凸边上>
<2>以基准点做射线,然后将该射线向固定方向旋转,直到接触到一个新的点。
<3>以<2>中找到的点作为新的基准点,作射线继续朝着一开始的固定的方向旋转
<4>反复重复2,3直到最后所有边闭合起来
如下图:
**
算法步骤
**
下文是参照了【chao_xun】博客中的算法的理解写出的步骤
1.首先选取一个极点,最下边的点,若最低高度相等取最左边(只要保证此点必为凸边上的点即可),以此作为基准点;
2.易知,该点一定在凸包的边上,所以可以以该点与另外一个点连线成边,作为凸包的边:以基准点为射线的端点,做一条X轴正方向的水平射线,扫面各个点与基准点所构成的向量与x轴正方向所构成的夹角,依照夹角进行排序,然后进行第三步的连边(排序的作用意义非常),下图是扫描排序的结果