Как отсортировать ряд линий, имеющих одну и ту же вершину, по часовой стрелке

Я пытаюсь сохранить триангуляцию в структуре списка двусвязных ребер и застрял на одном шаге.

мой вопрос: как я могу отсортировать список полуребер, которые имеют один и тот же хвост, по часовой стрелке?

Для тех, кто не знаком с этой структурой данных: как я могу отсортировать список линий, имеющих общую вершину, по часовой стрелке?

Спасибо!


person user2605344    schedule 09.09.2013    source источник


Ответы (1)


Предполагая, что вы имеете в виду по часовой стрелке относительно вершины, вы действительно просто хотите отсортировать их по их касательным. Предполагая, что у вас есть какой-то способ сослаться на точки в строке, это будет выглядеть примерно так в Python, поскольку вы не указали конкретный язык:

vertices = [[(1,2),(3,4)]...] # Some vertices assuming (1,2) is common vertex
sorting = lambda vector: math.atan(vector[1][1] / vector[1][0])
sorted_list = sorted(vertices, key=sorting)

Также есть обратный параметр, если вы хотите переключиться на против часовой стрелки.

person Slater Victoroff    schedule 09.09.2013
comment
Не могли бы вы переписать это на С++? Меня немного смущает строка 2 (поскольку я не знаю Python). Спасибо! - person user2605344; 09.09.2013
comment
@user2605344 user2605344 Вторая линия - это просто арктангенс. - person Slater Victoroff; 09.09.2013
comment
Извините, но я не понимаю, что вы имеете в виду. В чем мне поможет арктангенс? Предполагая, что у меня есть v1, v2 и v3, где v1 является общей вершиной, должен ли я делать atan(y3/y2) или atan(x3/x2) или как? Я не понимаю, как это связано с математикой. Спасибо. - person user2605344; 09.09.2013
comment
Неважно, я придумал другой способ, используя определители. Теперь я тоже понимаю ваш метод. Спасибо. - person user2605344; 09.09.2013