На самом деле я работаю с shapely на python.
Вот вещи:
У меня есть один большой полигон, скажем
import matplotlib.pyplot as plt
import shapely
from shapely.geometry import Polygon
LAND = Polygon([(0, 0), (0, 20), (20, 20), (20, 0)])
и у меня есть список случайных полигонов, сгенерированных с помощью
import random
def generate_polygons(box_size=10, amount=15):
"""
A function that generate an amount of polygon randomly
in a square of size = box_size
"""
polygons = []
for i in range(amount):
x = random.randint(0, box_size - 2)
y = random.randint(0, box_size - 2)
dx = 2
dy = 2
polygons.append(Polygon([(x, y), (x, y+dy), (x+dx, y+dy), (x+dx, y)]))
return polygons
Я хочу сделать разницу между ЗЕМЛЕЙ и списком полигонов
diff = LAND
polygons = generate_polygons(20, 15)
for polygon in polygons:
diff = diff.difference(polygon)
Давайте построим результат Вот многоугольники:
FIG, AXS = plt.subplots()
if (isinstance(polygons, shapely.geometry.polygon.Polygon)):
X, Y = polygons.exterior.xy
AXS.fill(X, Y, 'b')
else:
for polygon in polygons:
X, Y = polygon.exterior.xy
AXS.fill(X, Y, 'b')
plt.show()
Вот разница:
FIG, AXS = plt.subplots()
if (isinstance(diff, shapely.geometry.polygon.Polygon)):
X, Y = diff.exterior.xy
AXS.fill(X, Y, 'r', alpha=0.5)
else:
for polygon in diff:
X, Y = polygon.exterior.xy
AXS.fill(X, Y, 'r', alpha=0.5)
plt.show()
многоугольник в синем цвете, разница в красном цвете
Я не понимаю, почему это дает мне такой результат, у кого-нибудь есть идея?