Как найти бесхордовые циклы на рисунке?Python

Программы на Python
Гость
Как найти бесхордовые циклы на рисунке?

Сообщение Гость »

Входные данные представляют собой массив линий, состоящий из двух и более двумерных точек:
coordinates = [(x, y, x1, y1, x2, y2, etc.), (x3, y3, x4, y4, etc.)].

Вот все координаты: https://pastebin.com/raw/uj71Wz0U.
Задача состоит в том, чтобы найти все бесхордовые циклы в рисунок. Нужно учитывать, что хорду можно провести не только между точками графика, но и например от середины одной линии до середины другой.
Есть только 15 таких циклов в моем рисунке:
Изображение

Я пробовал использовать метод бесхордовых петель от networkx, но пока не нашел подходящего метода специально для моей ситуации.
Вот блок кода, который поможет постройте все линии по координатам, указанным выше:
# Create coordinate lists for each pair of points
x_coords = []
y_coords = []
all_connections = []

for coord_set in coords:
x_pair = []
y_pair = []
connections_pair = []
for i in range(len(coord_set) // 2 - 1):
x1, y1 = coord_set[2*i], coord_set[2*i+1]
x2, y2 = coord_set[2*i+2], coord_set[2*i+3]
x_pair.extend([x1, x2])
y_pair.extend([y1, y2])
connections_pair.append(((x1, y1), (x2, y2))))
all_connections.append(((x1, y1), (x2, y2))))
x_coords.append(x_pair)
y_coords.append(y_pair)

print(all_connections)

# Plot the graph
for i in range(len(x_coords)):
plt.plot(x_coords, y_coords, marker='o')

plt.xlabel('X')
plt.ylabel('Y')
plt.title('Line Chart')
plt.grid(True)
plt.show()



Подробнее здесь: https://stackoverflow.com/questions/782 ... -a-drawing

Вернуться в «Python»