判断是否在凸包内
上图如何判断点P在多边形内部:根据向量叉乘,按照逆时针(顺时针)取向量进行叉乘,所得值同号,则说明点在多边形内部。
即判断方式为:取向量AB和AP、BC和BP、CD和CP、DE和DP、EA和EP进行叉乘,判断所得值是否同号。
步骤
1.将多边形的第i条边的第一个顶点指向点P得到向量 v1,然后将从第一个顶点指向第二个顶点得到向量v2,叉乘这两个向量。
2.如果叉乘结果与上一条边的叉乘结果的乘积大于0则继续执行,如果乘积小于0,表示点P不在凸多边形内,直接返回即可。
要点:要求凸多边形的点以固定的顺序给出,例如固定为逆时针或顺时针。
这里注意,凸包是X的凸集的交集S,即凸多边形。与凹多边形不同。
变量名 | 类 型 | 静态 | 数组 | 备 注 | i | 整数型 | | | value | 双精度小数型 | | | lastValue | 双精度小数型 | | |
计次循环首 (取数组成员数 (hull ) - 1, i ) value = cross (sub (p, hull [i ]), sub (hull [i + 1 ], hull [i ]))  如果真 (value × lastValue < 0 ) 返回 (假) lastValue = value 计次循环尾 ()返回 (真)
|