点在多边形内外的判断

点与多边形的的位置关系

--点在形内                     

--点在形外

--点在边界上

判断方法

--射线法

--转角法

射线法

--通常取X轴正方向为射线方向

--奇数次相交,则在形内

--偶数次相交,则在形外

 

对于凹多边形也是可以的

 

 

射线法的特殊情况

--与定点相交

  --与其相邻的端点或者线段在射线的异侧,则认为是相交

  --否则不认为相交

与边部分重合

--缩点法:遇到一个在射线上的点,向后梁旭跳过所有也在射线上的点,直到第一个不再射线上的点,在用上述条件。

 

--平移法:

将射线稍微上升或下降很小的一个量。

  --实际操作时不用真的平移,只需要判断较高的端点高于射线,较低的端点低于射线或恰在射线上。  

 

边界情况

--可以附加判断

--判断是否在边界或者与多边形的定点重合

  --叉乘+坐标比较

 

--转角法

通过多边形走一圈,累计绕给定的点多少角度来判断:

  --沿正方向转角的代数和为2∏,则在内部

  --沿正方向转角的代数和为0,则在外部

 

转角法

  --特殊情况

    --沿正方向转角的代数和为 ∏,则在边上

    --沿正方向转角的代数和为大于 0 小于 2

    --当相邻两条线段共线时,只根据角度有可能分辨不出两种情况,可以用点积辅以判断

 

角度的计算

 

转角法还是射线法?

--射线法特殊情况的处理比较麻烦,不够优美。

--转角法很优美,而且时间复杂度与射线法一样

--但是转角法需要反三角函数、开根、浮点除法的计算。因此实际运算的速度慢很多。

 

 

 

 

 

posted @ 2012-09-27 13:08  YORU  阅读(1650)  评论(0编辑  收藏  举报