点与多边形的的位置关系
--点在形内
--点在形外
--点在边界上
判断方法
--射线法
--转角法
射线法
--通常取X轴正方向为射线方向
--奇数次相交,则在形内
--偶数次相交,则在形外
对于凹多边形也是可以的
射线法的特殊情况
--与定点相交
--与其相邻的端点或者线段在射线的异侧,则认为是相交
--否则不认为相交
与边部分重合
--缩点法:遇到一个在射线上的点,向后梁旭跳过所有也在射线上的点,直到第一个不再射线上的点,在用上述条件。
--平移法:
将射线稍微上升或下降很小的一个量。
--实际操作时不用真的平移,只需要判断较高的端点高于射线,较低的端点低于射线或恰在射线上。
边界情况
--可以附加判断
--判断是否在边界或者与多边形的定点重合
--叉乘+坐标比较
--转角法
通过多边形走一圈,累计绕给定的点多少角度来判断:
--沿正方向转角的代数和为2∏,则在内部
--沿正方向转角的代数和为0,则在外部
转角法
--特殊情况
--沿正方向转角的代数和为 ∏,则在边上
--沿正方向转角的代数和为大于 0 小于 2∏
--当相邻两条线段共线时,只根据角度有可能分辨不出两种情况,可以用点积辅以判断
角度的计算
转角法还是射线法?
--射线法特殊情况的处理比较麻烦,不够优美。
--转角法很优美,而且时间复杂度与射线法一样
--但是转角法需要反三角函数、开根、浮点除法的计算。因此实际运算的速度慢很多。