判断点是否在矩形框(多边形)内

判断点是否在矩形内:

只需要判断该点是否在上下两条边和左右两条边之间就行。

判断一个点是否在两条线段之间夹着就转化成,判断一个点是否在某条线段的一边上,就可以利用叉乘的方向性,来判断夹角是否超过了180度 如下图

只要判断(AB X AE ) * (CDX CE)  >= 0 就说明E在AB,CD中间夹着,同理计算另两边DA和BC就可以了。

最后就是只需要判断

(AB X AE ) * (CD X CE)  >= 0 && (DA X DE ) * (BC X BE) >= 0 。


判断点是否在多边形内:

OpenCV API: pointPolygonTest() 

其他方法参考:

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

http://erich.realtimerendering.com/ptinpoly/

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
判断一个是否在不规则图形内,可以使用射线法和包围盒法相结合的方法。 具体做法如下: 1. 首先根据所有的坐标,计算得到一个包围盒,即最小矩形框,该包围盒的左上角坐标为`(x_min, y_min)`,右下角坐标为`(x_max, y_max)`。 2. 判断是否在包围盒内,如果不在,直接返回False。 3. 对于包围盒内的,向右射出一条射线,并计算该射线与不规则图形的边相交的次数。 4. 如果相交的次数为奇数,说明在不规则图形内部;如果相交的次数为偶数,说明在不规则图形外部。 需要注意的是,如果射线与不规则图形的边重合或者与顶重合,也需要计算在内,因为这也表示相交次数增加了。 以下是一个示例代码: ```python def is_point_in_irregular_polygon(x, y, points): # 计算包围盒 x_min = min([p[0] for p in points]) x_max = max([p[0] for p in points]) y_min = min([p[1] for p in points]) y_max = max([p[1] for p in points]) # 判断是否在包围盒内 if x < x_min or x > x_max or y < y_min or y > y_max: return False # 计算交数量 num_intersections = 0 for i in range(len(points)): x1, y1 = points[i] x2, y2 = points[(i + 1) % len(points)] if ((y1 <= y < y2) or (y2 <= y < y1)) and (x < max(x1, x2)): # 计算交的 x 坐标 x_inter = (y - y1) * (x2 - x1) / (y2 - y1) + x1 if (x_inter == x): # 如果交和顶重合,也需要计算在内 return True if (x_inter > x): # 如果交在右侧,计数加一 num_intersections += 1 # 判断数量的奇偶性 return (num_intersections % 2 == 1) ``` 这个示例代码只适用于简单的不规则多边形,如果是复杂的不规则图形,需要使用更复杂的算法,例如扫描线算法等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值