组成凸包的点有极性,叫做极点。反之,是非极点。
极点的特征是,过该点必然至少有一条直线,直线的一边为空,另一边是凸包上的所有点。
从下图可以看到,蓝色的点组成凸包,是极点。内部的青色的点是非极点。比如,p,q,r就是极点。

那如何判断当前点是否是极点呢?
根据1.1凸相关,可以知道,如果能线性表示,且系数均非负,且和为1时,即在三角形内部时,不是极点。很明显,下图的UV两点不是极点


而上图的1,2,3,4均为极点。
这就出现了第一个判断极点的算法—判断点是否在三角形内。
首先初始化所有的点都是极点。先构建三角形pqr,再找判断点s,如果s在三角形内,则s不是极点。很明显,这是个四重循环。时间复杂度O(n4)

那如何判断点在三角形内呢?用toleft测试,上图中,三角形pqr按照逆时针分为三个向量pq,qr,rs,点s在都在这三个向量的左边;如果按照顺时针,分为qp,pr,rq,那么点s都在这三个向量的右边。这说明点s在三角形内。
即,要么点均在各向量左,要么点均在各向量右。
在to-left判断时,邓老师用了海伦公式,实际上我更倾向于向量叉乘看符号,因为右手定则,能判断方向。比如sp和sq叉乘,sq和sr叉乘,sr和sp叉乘,这三个值在第三个方向上的分量如果同号,则点在三角形内。
本文介绍了如何判断一个点是否是凸包的极点。极点的特性是存在一条直线,该直线一侧为空,另一侧包含所有凸包上的点。通过线性表示和向量叉乘的方法,可以确定点是否在三角形内,从而判断其是否为极点。文章提到了一个四重循环的初步算法,以及使用向量叉乘的优化方法,通过右手定则判断点是否在三角形内部。
1414

被折叠的 条评论
为什么被折叠?



