2017-04-24 348 views
3

我们有一个命中测试用例,它希望也考虑路径实际边界上的点。我们使用matplotlib.path.contains_points来集体测试一堆点,它对我们来说工作得非常好。今天我发现它在边界上的点返回错误,在我们的例子中,它是路径上的点(0,0)。有没有办法让matplotlib.path.contains_points包含边界点

有没有办法配置函数调用来产生边界点上的True,即包含边界?我只看到它支持一项独家测试,但根据documentation,还有其他变换和半径参数,也许他们有一些幻数来推动边界点为真?

contains_points(points, transform=None, radius=0.0)返回bool 阵列是True如果路径中包含的对应点。

如果transform不是None,则路径将在 执行测试之前转换。

radius允许路径稍大或小一些。

+1

源代码的快速扫描说不。对于像这样的操作,我可以建议使用 ['shapely'](http://toblerity.org/shapely/manual.html#object.intersects),它是专门为这类事情而构建的吗?如果你使用'shapely',你可以利用['object.intersects'](http://toblerity.org/shapely/manual.html#object.intersects)来处理这个问题。 –

+0

我绝对愿意重新实现这样的事情。很高兴知道存在通用计算几何图书馆。我基本上正在做一些你经常在美国食品及药物管理局(FDA)的规定中发现的“允许的总误差”如果shapely可以使用Python 3.6进行滚动,并直接或通过某些中间体从一些Pandas.Series对象中合理加载,那么我应该很好。感谢分享。如果你的快速扫描是准确的,我会在明天晚些时候自己挖掘源代码,然后推送一个答案,我会检查它。 – jxramos

回答

2

源代码的快速扫描说不。 matplotlib并非真正用于空间操作;它只是为它们提供了一点支持,因为它是一个具有巨大API表面的旧代码库。

我建议使用 shapely,它是专门为像这样的空间操作而构建的。如果您使用shapely,则可以利用object.intersects来处理此问题。

您可以将您的点转换为由shapely.Point对象和您的多边形(给定一系列坐标)组成的pandas.Seriespoly = shapely.Polygon(coordinates)对象中。然后做类似points_that_intersect = points[points.map(lambda p: poly.intersects(p)]

相关问题