zoukankan      html  css  js  c++  java
  • 判断点是否在多边形内部

    如何判断一个点是否在多边形内部?

    (1)面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。

    (2)夹角和判别法:判断目标点与所有边的夹角和是否为360度,为360度则在多边形内部。

    (3)引射线法:从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。

    具体做法:将测试点的Y坐标与多边形的每一个点进行比较,会得到一个测试点所在的行与多边形边的交点的列表。在下图的这个例子中有8条边与测试点所在的行相交,而有6条边没有相交。如果测试点的两边点的个数都是奇数个则该测试点在多边形内,否则在多边形外。在这个例子中测试点的左边有5个交点,右边有三个交点,它们都是奇数,所以点在多边形内。

    112137381678569

    算法图解:

    061456221234057

    关于这个算法的具体的更多图形例子:http://alienryderflex.com/polygon/

    参考代码:

    Code

    来自一个polygon的内部实现:

    Code

    特殊情况:要检测的点在多变形的一条边上,射线法判断的结果是不确定的,需要特殊处理(If the test point is on the border of the polygon, this algorithm will deliver unpredictable results)。

    计算一个多边形的面积(area of a polygon):

    Code

    参考资料:

    http://alienryderflex.com/polygon/

    http://en.wikipedia.org/wiki/Point_in_polygon

    http://www.codeproject.com/Tips/84226/Is-a-Point-inside-a-Polygon

  • 相关阅读:
    主流浏览器内核概览
    图片圆角边框自适应宽高(深夜原创)
    <程序员节>
    谁说Float菜单不可以水平居中
    如何做好一份前端工程师的简历?
    重温textjustify:interideograph
    Firefox 4 beta 1发布——前端开发者须知
    让PHP程序永远在后台运行
    如何让Linux后台运行命令或php
    PHP执行后台程序 argv
  • 原文地址:https://www.cnblogs.com/klcf0220/p/9868678.html
Copyright © 2011-2022 走看看