zoukankan      html  css  js  c++  java
  • 点在多边形内外的判断

    点与多边形的的位置关系

    --点在形内                     

    --点在形外

    --点在边界上

    判断方法

    --射线法

    --转角法

    射线法

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

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

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

    对于凹多边形也是可以的

    射线法的特殊情况

    --与定点相交

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

      --否则不认为相交

    与边部分重合

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

     

    --平移法:

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

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

     

    边界情况

    --可以附加判断

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

      --叉乘+坐标比较

     

    --转角法

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

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

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

    转角法

      --特殊情况

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

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

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

     

    角度的计算

    转角法还是射线法?

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

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

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

     

     

     

     

  • 相关阅读:
    [js]vue-router的使用
    [js]递归实现 数组转树形
    [js]vue组件核心
    [js]了解chart绘图
    [js]vue权限控制
    [js]vue显示一个外部链接的组件
    [js]axios使用
    [js]vue中 给router-view 组件的 绑定 key 的原因
    [java]BeanPostProcessor使用及源码
    [java]权限管理
  • 原文地址:https://www.cnblogs.com/yoru/p/2705474.html
Copyright © 2011-2022 走看看