3

После того, как я выполнил двумерную триангуляцию, некоторые треугольники имеют один и тот же цвет, и я хочу перекомпилировать их для рисования в виде цветных графических дорожек. Я считаю, что если я просто рисую треугольники один за другим, некоторые графические визуализаторы показывают швы между треугольниками (по крайней мере, если задействованы сглаживание и/или прозрачность).Что противоположность триангуляции многоугольника?

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

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

+1

удалить все ребра, которые происходят более одного раза? (где ребро определяется двумя связанными с ним точками) –

+0

Неплохой старт, но по-прежнему возникает вопрос об повороте оставшихся краев в путь, который не является тривиальным для прикосновения к полигонам, а затем выяснения, которые являются отверстиями другие. Я надеюсь, что есть имя для этой операции и общий алгоритм, который обрабатывал бы частично разделяемые ребра. – xan

ответ

6

Подумайте о каждом треугольнике в виде контура, состоящего из трех векторов, идущих в цепь против часовой стрелки.

<--^ 
|/
|/ 
V 

Итак, для всех треугольников в вашей форме возьмите союз их контурных векторов. Если два контурных вектора в объединении идентичны, но идут в противоположных направлениях, они отменяют друг друга и удаляются из объединения.

Например, для двух треугольников, которые бок о бок объединение 6 векторов

<--^^ 
| //| 
|// | 
VV--> 

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

<--^ 
| | 
| | 
V--> 

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

<-----<-----<-----^ 
|     | 
|     | 
V  ^-----> ^
|  |  |  | 
|  |  |  | 
V  <-----V ^
|     | 
|     | 
V----->----->-----> 
+0

Спасибо, я не думал о назначении направлений к краям. Хорошие диаграммы. – xan