На самом деле я работаю с 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
Я хочу провести различие между LAND и списком полигонов
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()
многоугольник синего цвета, разность красного цвета
Я не понимаю, почему это дает мне этот результат, у кого-нибудь есть идея?