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

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

Сообщение Anonymous »

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

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

Я пробовал использовать бескордовый loops из 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»