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

    点与多边形的的位置关系

    --点在形内                     

    --点在形外

    --点在边界上

    判断方法

    --射线法

    --转角法

    射线法

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

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

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

    对于凹多边形也是可以的

    射线法的特殊情况

    --与定点相交

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

      --否则不认为相交

    与边部分重合

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

     

    --平移法:

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

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

     

    边界情况

    --可以附加判断

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

      --叉乘+坐标比较

     

    --转角法

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

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

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

    转角法

      --特殊情况

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

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

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

     

    角度的计算

    转角法还是射线法?

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

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

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

     

     

     

     

  • 相关阅读:
    mapreduce 本地调试需要注意的问题
    socket-----爬虫&&文件传输
    多个地点ping服务器
    linux grep命令详解
    关于真多核和加多核&线程由哪几部分组成
    内存溢出和内存泄漏
    指针和引用的区别
    Doxygen的使用,配置及实例
    【转】doxygen+graphviz生成工程中的类继承树及函数调用图
    转载--void指针(void *的用法)
  • 原文地址:https://www.cnblogs.com/yoru/p/2705474.html
Copyright © 2011-2022 走看看