微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何检查点是否在多边形内? - 我认为现有的图书馆有一些问题

如何解决如何检查点是否在多边形内? - 我认为现有的图书馆有一些问题

我有个问题

我使用了两个不同的库

import matplotlib.path as mplPath

point = (0.3,0.2)
poly = [(0,0),(0,1),(1,1)]
polygon = mplPath.Path( np.array(poly) )
print(polygon.contains_point(point))

返回: 错误

from shapely.geometry import Point,polygon

point = Point(0.3,0.2)
polygon = polygon([(0,1)])
print(polygon.contains(point))
print( point.within(polygon) )

返回: 错误错误

然而,两个库都未能检测到 (0.3,0.2) 在给定的多边形内...

为什么..?而且,如何检查点是否位于更复杂的多边形内的天气?

谢谢!

解决方法

您的多边形无效,因为它的边界与自身相交。即使你填写了它,它也不包括你指定的点(0.3,0.2)。

多边形是通过按照您提供的顺序连接您提供的点,然后返回到第一个点来定义的。所以你的多边形有这些腿:

  • (0,0),to (0,1):沿y轴直线向上
  • (0,1) to (1,0):x轴的对角线,一个单位
  • (1,0) to (1,1):垂直线到(1,1)
  • (1,1) to (0,0):对角线回到第一个点,在(0,0)

很多软件会将此视为无效路径,因为它与自身交叉。即使它确实将其视为一个形状,它也将是两个三角形,边沿 y 轴并沿 (0,1) - (1,1) 路径,点在 (0.5,0.5) 处相交。您的点 (0.3,0.2) 落在它们下方的空三角形中(连接 (0,0) 到 (0.5,0.5) 到 (1,0))。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。