有没有一种方法可以使matplotlib.path.contains_points包括边界点?

4
我们有一个命中测试用例,希望也考虑到路径上实际边界上的点。我们正在使用matplotlib.path.contains_points对一堆点进行批量测试,并且它对我们非常有效。今天我发现它对于边界上的点返回false,在我们的情况下原点(0,0)是路径上的一个点。
是否有一种方法来配置函数调用以在边界点上产生True,即包括边界?我只看到它支持一个排他性测试,但根据文档中的documentation,还有其他参数transform和radius,也许它们有一些魔数可以将边界点推向真实点?
“contains_points(points, transform=None, radius=0.0)”返回一个布尔数组,如果路径包含相应的点,则为True。
如果transform不是None,则在执行测试之前将转换路径。
半径允许稍微放大或缩小路径。

1
快速扫描源代码显示没有。对于这样的操作,我可以建议使用shapely,它是专门为此类事情构建的。如果您使用shapely,则可以利用object.intersects来处理此操作。 - Aleksey Bilogur
我完全愿意使用这种东西重新实现。很高兴知道存在一个通用的计算几何库。我基本上正在做一些你经常在FDA法规中发现的可允许总误差工作。如果shapely可以与Python 3.6配合,并且可以直接从一些Pandas.Series对象或通过一些中间对象进行合理加载,那么我应该可以顺利进行。谢谢分享。如果您的快速扫描准确无误,请继续推送答案,我会检查它。 - jxramos
1个回答

4
快速扫描源代码后,matplotlib并不是专为空间操作而设计的。它只是因为具有庞大的API表面而在某种程度上支持这些操作。
建议使用专门用于空间操作的shapely而不是matplotlib。如果您使用shapely,则可以利用object.intersects来处理此操作。
您可以将点转换为由shapely.Point对象组成的pandas.Series,将多边形(给定坐标序列)转换为poly = shapely.Polygon(coordinates)对象。然后执行类似于points_that_intersect = points[points.map(lambda p: poly.intersects(p)]的操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接