dresva = [0.09, 0.97, 0.15, 0.88, 0.03, 0.88, 0.09, 0.97]
graviy = [0.05, 0.98, 0.07, 0.98, 0.09, 0.97, 0.1, 0.95, 0.1, 0.93, 0.09, 0.91, 0.07, 0.9, 0.05, 0.9, 0.03, 0.91, 0.02, 0.93, 0.02, 0.95, 0.03, 0.97, 0.05, 0.98]
glina = [0.02, 0.9, 0.2, 0.98]
Задача — найти способ создания новых объектов под старыми в соответствии с порядком вызова функции создания. В данном случае мы начинаем с создания объекта дресва, затем объекта грави, который будет скрываться под объектом дресва. Затем создается объект глины, и соответственно этот объект скрывается под первым и вторым объектами.
Желаемые выходные данные — координаты всех линий для рисования рисунка

Часть программы, которую @Timeless написал работает. Но мой набор данных более сложен. В моем случае необходимо улучшенное решение.
obj_1 = [[0.09, 0.98, 0.13, 0.98, 0.17, 0.97, 0.2, 0.94, 0.2, 0.91, 0.17, 0.88, 0.13, 0.87, 0.09, 0.87, 0.05, 0.88, 0.02, 0.91, 0.02, 0.94, 0.05, 0.97, 0.09, 0.98]]
obj_2 = [[0.1, 0.77, 0.2, 1.07]]
def create_lines(coords):
return unary_union(
[
(
Polygon(ls) if (
ls := LineString(batched(coo, 2))
).is_ring else ls
) for coo in coords
]
)
lines1, lines2 = map(create_lines, [obj_1, obj_2])
fig, ax = plt.subplots(figsize=(4, 7))
plot_line(lines2.difference(lines1), color="w", add_points=False, ax=ax)
plot_line(lines1.exterior, color="w", lw=2, add_points=False, ax=ax)
ax.set(facecolor="#242c34", xticks=[], yticks=[])
plt.show()
Подробнее здесь: https://stackoverflow.com/questions/783 ... r-old-ones