首页 > 其他 > 详细

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

时间:2019-10-30 16:37:56      阅读:175      评论:0      收藏:0      [点我收藏+]

最近在处理图片时遇到一个问题,如何判断某个点是否落在一个多边形(比如四边形)区域里面?

在网上找到一个比较简洁明了的方法,不过后来运行程序时发现计算量比较大(我是对图片的每个像素都进行一次判断),有更好的方法还望指点指点~

这个方法是通过向量的叉乘来判断的:点如果落在顺时针(或逆时针)向量同一边,则点在多边形内。如下图,以顺时针为例,分别计算向量 ABAOBCBOCDCODADO的叉乘,所得结果的 z 轴分量同号则说明点 O 在四边形 ABCD 内部。

技术分享图片

附上 Python 实现的代码:

 1 # 判断点是否在四边形内部,在四边形内部返回1,否则返回0
 2 # x、y为点的坐标,xv为四边形的x坐标构成的向量,yv为四边形的y坐标构成的向量
 3 def inpolygon(x, y, xv, yv):
 4     z1 = (xv[1] - xv[0]) * (y - yv[0]) - (x - xv[0]) * (yv[1] - yv[0])
 5     z2 = (xv[2] - xv[1]) * (y - yv[1]) - (x - xv[1]) * (yv[2] - yv[1])
 6     z3 = (xv[3] - xv[2]) * (y - yv[2]) - (x - xv[2]) * (yv[3] - yv[2])
 7     z4 = (xv[0] - xv[3]) * (y - yv[3]) - (x - xv[3]) * (yv[0] - yv[3])
 8     if(z1 * z2 > 0 and z3 * z4 > 0 and z1 * z3 > 0): # z1, z2, z3, z4同号
 9         return 1 
10     return 0

 

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

原文:https://www.cnblogs.com/menggg/p/11765654.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!