Как триангулировать из диаграммы Вороного?


13

Я вычислил диаграмму Вороного из набора точек (с помощью Boost.polygon ).

Я пытаюсь найти триангуляцию Делоне, соединяющую каждый центр ячейки для каждого ребра Вороного, но я скучаю по некоторым ребрам.

На следующем изображении красные точки - мои начальные точки, синие линии - ребра Вороного (я игнорировал бесконечные ребра), а зеленые линии - ребра триангуляции (по одному зеленому ребру для каждого синего ребра, соединяющего два начала ячейки).

Мы видим, что диагональные ребра отсутствуют. Что мне не хватает?

диаграмма вороной

Ответы:


19

Центральная точка на вашей диаграмме является вырожденным ребром диаграммы Вороного. Если вы сгенерируете диаграмму Вороного для нерегулярного облака точек, каждая вершина будет иметь степень 3. Вершина с степенью 4 (или более) может произойти только тогда, когда две (или более) вершины совпадают. Это означает, что между ними есть ребро нулевой длины. Но это ребро должно иметь соответствующее ребро в триангуляции Делоне. Проблема в том, что это произвольно, какое из двух возможных ребер вы выберете, потому что ребро нулевой длины не имеет связанного направления.

Чтобы визуализировать то, о чем я говорю, подумайте о том, чтобы начать с четырех менее равномерно расположенных точек (чтобы мы начинали только с вершин степени 3) и постепенно перевести их в их обычные положения.

Мы можем сделать это двумя различными способами, которые оба приведут к вырожденному случаю на вашей диаграмме. Вы увидите, что вы получите две разные триангуляции Делоне, которые являются допустимыми пределами для вырожденного случая:

введите описание изображения здесьвведите описание изображения здесь

Я предполагаю, что ваш код пропускает этот вырожденный случай по той или иной причине, но фактически не видя, как вы вычисляете триангуляцию Делоне по диаграмме Вороного, невозможно указать вам дальше, чем это.

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

введите описание изображения здесьвведите описание изображения здесь

Эти анимации также показывают, что (даже в невырожденном случае) соответствующие ребра Вороного и Делоне не обязательно фактически пересекаются в пределах их конечной протяженности. Это может затруднить понимание того, что 2 (или 3) ребра, которые триангулируют правильный многоугольник на конце, на самом деле соответствуют нескольким вырожденным ребрам, которые все находятся в центре. Также отметим, что всего существует 5 различных триангуляций пятиугольника и 14 триангуляций шестиугольника (хотя я не знаю, все ли 14 можно получить путем деформации невырожденной триангуляции).

Редактировать (по OP)

Диаграммы Вороного, вычисленные с помощью Boost.polygon, позволяют проходить через каждую вершину Вороного, и каждое ребро связано с этими вершинами (по часовой стрелке или против часовой стрелки). Таким образом, можно создать один треугольник для каждой пары ребер (два соединенных ребра будут связаны с 3 ячейками).


Вы также можете ответить здесь, или я удалю другой вопрос.
arthur.sw

3
@ arthur.sw Кросс-постинг вообще не рекомендуется на SE, поэтому я думаю, что его удаление будет лучшим вариантом.
Мартин Эндер

создатель интерактивной вороной диаграммы: alexbeutel.com/webgl/voronoi.html
arthur.sw

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.