1,理论
凸包计算算法导论上有讲,关键步骤是根据对顶点进行逆时针排序。凸包顶点只是多边形顶点子集。
图-1
如图1中,判断三个点构成顺时针还是逆时针方向。使用向量点积即可:
向量A<beg, end>
向量B<beg, next>
A.dot(B) 是一个实数,大于0,则逆时针,小于0则顺时针。
2,效果图:
图 - 2
图 - 3
图2是随机生成了三十个点。
图3是黄色线条是排序以后顺序链接,外面淡蓝色线条是凸包。注意排序以后的顶点只保证顺序连线的顺序,不能保证所有顶点逆时针/顺时针排序。。。而且中间非常有可能是z型,即顺时针/逆时针翻转~
3,可运行程序
freeglut2.6.0