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

将小多边形堆叠在另一个更大的多边形中

如何解决将小多边形堆叠在另一个更大的多边形中

我有以下匀称的像素多边形

big_poly = polygon([(94.5,77.0),(92.5,53.0),(87.5,45.0),(66.0,20.5),(9.0,3.5),(5.5,6.0),(4.5,13.0),(7.5,26.0),(6.5,91.0),(8.0,92.5),(16.0,(44.0,86.5)])

我需要用 4 x 6 像素多边形填充 big_poly,让它们都落在大多边形的边界内并平行于其最小轴(相同的旋转)。

感谢@Georgy,解决方here 确实很有帮助。 所以我能够做到以下几点:

enter image description here

使用以下代码

b = building_poly.boundary
points = []
for x in range(int(np.floor(xmin)),int(np.ceil(xmax)),4):
for y in range(int(np.floor(ymin)),int(np.ceil(ymax)),6):
points.append((x,y))
points = MultiPoint(points)
result = points.intersection(building_poly)

并在 result 中绘制点,但现在我需要从这些点创建多边形。 如何将这些点变成矩形多边形?

我也找到了 this,但不确定如何使它适合我的情况。

解决方法

这是我们可以做的:

  1. 根据给定多边形的边界构造两个 X 和 Y 坐标数组
  2. 通过对连续的 X 和 Y 坐标对进行迭代,构建一个完全覆盖给定多边形的矩形网格
  3. 过滤掉那些不完全位于多边形内部的矩形

这很可能不是最有效的解决方案,但它对您的情况表现良好:

dx = 4
dy = 6
xmin,ymin,xmax,ymax = big_poly.bounds
xs = np.arange(np.floor(xmin),np.ceil(xmax) + 1,dx) 
ys = np.arange(np.floor(ymin),np.ceil(ymax) + 1,dy)
rectangles = (Polygon([(x_start,y_start),(x_end,y_end),(x_start,y_end)])
              for x_start,x_end in zip(xs,xs[1:])
              for y_start,y_end in zip(ys,ys[1:]))
rectangles = [rectangle for rectangle in rectangles 
              if big_poly.contains(rectangle)]

enter image description here

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