天天看点

判断点是否在多边形内部

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

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

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

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

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

判断点是否在多边形内部

算法图解:

判断点是否在多边形内部

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

参考代码:

判断点是否在多边形内部
判断点是否在多边形内部

来自一个polygon的内部实现:

判断点是否在多边形内部
判断点是否在多边形内部

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

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

判断点是否在多边形内部
判断点是否在多边形内部

参考资料:

http://alienryderflex.com/polygon/

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

http://www.codeproject.com/tips/84226/is-a-point-inside-a-polygon

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

http://www.cnblogs.com/luxiaoxun/p/3722358.html