Итак, я прошел целую кучу кругов, определяя, где они перекрываются , как это , и теперь я построил круги, которые перекрываются.
Но в углу, как я показал стрелкой, у меня есть два красных круга, перекрывающих один синий, но должно быть обнаружено только одно перекрытие. Второе перекрытие круга следует игнорировать, исходя из расстояния.
Как убрать дополнительное перекрытие, чтобы один красный всегда перекрывал один синий, а также наоборот?
![enter image description here](https://i.stack.imgur.com/4qsS6.png)
import matplotlib.pyplot as plt
# Format is (x1, y1, r1), x2, y2, r2), squared_distance)
circles = (((87, 319, 10), (82, 316, 10), 34),
((162, 230, 10), (157, 226, 10), 41),
((162, 438, 10), (162, 440, 10), 4),
((235, 146, 10), (230, 150, 10), 41),
((260, 183, 10), (260, 185, 10), 4),
((260, 265, 10), (253, 269, 10), 65),
((360, 88, 10), (366, 91, 10), 45),
((428, 442, 10), (433, 447, 10), 50), # Two red overlap the same blue
((438, 453, 10), (433, 447, 10), 61), # So this one (furthest away) must go
((459, 24, 10), (465, 21, 10), 45))
fig, ax = plt.subplots(figsize = (6,6))
ax.set_xlim(0,500)
ax.set_ylim(0,500)
for red, blue, squared_dist in circles:
x1, y1, r1 = red
x2, y2, r2 = blue
c = plt.Circle((x1, y1), r1, color = "red", linewidth = 2, fill = False, alpha = 1)
ax.add_patch(c)
c = plt.Circle((x2, y2), r2, color = "blue", linewidth = 2, fill = False, alpha = 1)
ax.add_patch(c)
ax.arrow(390, 400, 20, 20, head_width=10, head_length=10, fc='k', ec='k')
plt.show()