形状多边形包含的问题,似乎没有正确标记所有包含的点

Problem with shapely polygon contain, seems not to correctly flag all contained points

假设我们有一个包含多边形的 100x100 网格。 现在,如果我们为包含在多边形中的所有可能的 (x,y) 点 [x,y 是整数] 着色,我们应该期望多边形有点 painted/filled

但是我得到的图像从来没有正确落入并填充多边形!这是 shapely 的限制还是我做错了什么?! (请注意我需要它用于其他目的,而不仅仅是绘制多边形)

polygon and filled area not overlapping

import numpy as np
import matplotlib.pyplot as plt
import shapely.geometry

points = np.random.randint(0,100, (10,2)) # 10 random points
poly   = shapely.geometry.MultiPoint(points).convex_hull.buffer(1) # a polygon 
grid_points = [ shapely.geometry.Point(x,y) for x in range(100) for y in range(100)]
in_poly = np.array([poly.contains(point) for point in grid_points])

#plot
plt.imshow(in_poly.reshape(100,100), origin='lower')
plt.plot(*poly.exterior.xy)

这似乎符合您的要求 - 替换这一行(在 for 循环中交换 y 和 x):

grid_points = [ shapely.geometry.Point(x,y) for y in range(100) for x in range(100)]

一些注意事项:

我安装的 shapely 具有此模块名称(几何拼写不同,因此您可能需要在上面的行中更改名称):

  import shapely.geometry

感谢您添加第二个 plot 命令 - 这帮了很多忙。

沿途有些东西有不同的主要顺序(行与列),因此上面的行更改为列主要。

您可能希望通过对外部图进行逆运算来进行补偿。

(原版(带有新的随机形状),已更新,带有外观)