栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

判断点在四边形内(Python实现)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

判断点在四边形内(Python实现)

判断点在四边形内的算法 在网上流传的方法大多是适合矩形 例如链接 并不适合所有的凸四边形。

先说对于矩形常用的方法 也是网上流传比较广的一种方法 是判断点与四边形的边的夹角是锐角 也即点积 0。实现如下

def point_in_box_rect2(point, corners):
 check if a point lies in a rectangle defined by corners. un-support quadrangle
 idea: check projection
 Args:
 point (2,): coordinate of point
 corners (4, 2): coordinate of corners
 Returns:
 True if point in box
 assert corners.shape (4, 2)
 a corners[0, :]
 b corners[1, :]
 c corners[2, :]
 d corners[3, :]
 ab b - a
 am point - a
 bc c - b
 bm point - b
 cd d - c
 cm point - c
 da a - d
 dm point - d
 p_ab np.dot(ab, am)
 p_bc np.dot(bc, bm)
 p_cd np.dot(cd, cm)
 p_da np.dot(da, dm)
 cond1 p_ab 0 and p_bc 0 and p_cd 0 and p_da 0
 cond2 p_ab 0 and p_bc 0 and p_cd 0 and p_da 0
 return cond1 or cond2

以上方法不适用平行四边形的情况 例如

 对于更一般的情况 可以将四边形考虑成2个三角形 判断点是不是在三角形其中之一内即可 具体参考链接。实现如下

def sign(p1, p2, p3):
 return (p1[0] - p3[0]) * (p2[1] - p3[1]) - 
 (p2[0] - p3[0]) * (p1[1] - p3[1])
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267525.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号