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

问题描述

我有个问题

我使用了两个不同的库

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))。