Перестраивание ребра между смежными треугольниками (флип).

<< Click to Display Table of Contents >>

Navigation:  РЕЖИМЫ РАБОТЫ В ОКНАХ-ЧЕРТЕЖАХ > < Работа с триангулированными моделями поверхностей >

 Перестраивание ребра между смежными треугольниками (флип).

 

 

 

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

 

Рассматриваемый режим используется для выполнения такой операции.

 

 

 

В каких случаях целесообразно производить перестраивание ребра между двумя смежными треугольниками

 

 

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

Возможны 2 варианта построения треугольников:

 

     

 

 

Какой из этих вариантов построения лучше ?

Для решения этой задачи используется 3D модификация условия Делоне.

 

Сначала вспомним о 'классической' триангуляции Делоне (в 2D координатах).

Все треугольники триангуляции Делоне удовлетворяют условию Делоне: внутрь ОКРУЖНОСТИ, описанной вокруг треугольника, не попадает ни одна из точек, участвующих в триангуляции.

На приводимом рисунке показаны описанные окружности для нескольких треугольников триангуляции Делоне:

 

 

Условие Делоне замечательно работает в 2D координатах.

 

3D модификация условия Делоне : внутрь СФЕРЫ, описанной вокруг треугольника, не попадает ни одна из точек, участвующих в триангуляции.

 

 

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

На основании этого можно сделать вывод о том, какой вариант пары треугольников лучше.

 

При использовании 3D модификация условия Делоне (в отличие от 2D) могут быть случаи, когда и существующие и новые треугольники не отвечают этому условию.

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

 

 

 

 

 

Процесс перестраивания ребра между смежными треугольниками состоит из следующих этапов:

 

1. Выбор ребра, общего для смежных треугольников.

Используется Ctrl + левая клавиша мыши или Shift + левая клавиша мыши.

 

 

1а. Если ребро выбирается при помощи Ctrl + левой клавиши мыши, то программой будет отрисовано новое ребро и она перейдет в режим ожидания подтверждения.

Подтверждение операции - двойной клик на левую клавишу мыши или Enter,  отмена -правая клавиша мыши или Esc.

 

Новое ребро изображается толстой штриховой линией малинового цвета.

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

 

 

1б. Если стартовая точка выбирается при помощи Shift + левой клавиши мыши, то изменение ребра будет произведено сразу, без дополнительного подтверждения.

 

 

Пример перестраивания ребра между смежными треугольниками

 

 

 

 

 

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

 

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

 

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

 

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

 

В приведенном примере выдается следующее сообщение:

 

 

 

Кроме этого сообщения, возможны следующие сообщения:

 

 

 

 

 

Также возможно появление  сообщений об ошибках, при которых перестраивание ребра однозначно не производится:

 

 

 

 

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

Далее можно выбрать, продолжать перестраивание треугольников или нет.

 

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

Аналогичная информация выводится и в окно с информацией о работе с программой, причем и в тех случаях, когда новая пара треугольников будет лучше:

 

 

 

 

 

 

 

 

Поиск пар треугольников, для которых рекомендуется произвести флип; выполнение флипа для найденных треугольников

 

В некоторых случаях желательно проанализировать имеющуюся модель поверхности на предмет возможного улучшения за счет выполнения флипов.

 

 

 

 

 

Если установить курсор на интересующую нас модель поверхности и нажать правую клавишу мыши, то появится всплывающее меню:

 

Найти пары треугольников, для которых желательно сделать флип, в модели ПОВЕРХНОСТИ - после выбора этого пункта меню появляется диалог:

 

 

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

 

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

 

Добавить в проект файл-чертеж, в который записать ребра, рекомендуемые для флипа - если отмечено, то после поиска треугольников, для которых желателен флип, производится запись ребер, которые рекомендуется перестроить в файл-чертеж (в виде полилиний из двух точек). Название файла чертежа в своем начале будет совпадать с названием файла с моделью поверхности, а далее добавляется текст "(РЕБРА ДЛЯ ФЛИПА)". Если ни одного ребра не найдено, то файл не создается.

Создаваемые полилинии-ребра будут иметь темно-малиновый цвет:

 

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

--------------------------------

Поиск пар треугольников, для которых желательно сделать флип, в модели ПОВЕРХНОСТИ

'Файл 'E:\Примеры\DGS\Флип ребра\Средняя поверхность.dgs'

Модель поверхности № 1  (ID=1).  Назв. объекта ''

Всего точек = 3069,   всего треугольников = 6037.  (НЕЗАМКНУТАЯ)'

Количество пар треугольников, которые желательно перестроить = 6

Пары треугольников, которые желательно перестроить (флип) :

№ треугольника (№ ребра) -<>-  № треугольника (№ребра)

68 (2)  -<>-  114 (2)

305 (3)  -<>-  356 (3)

440 (2)  -<>-  496 (1)

1019 (2)  -<>-  1105 (1)

1379 (2)  -<>-  1485 (1)

1978 (3)  -<>-  2099 (1)

 

Каждый треугольник может оказаться в списке только один раз, даже если по другому его ребру также может быть рекомендован флип.

Это сделано потому, что после перестраивания треугольника по одному ребру, изменяются взаимоотношения этого треугольника с другими треугольниками.

Из этого следует, что за один проход не всегда можно получить все возможные перестроения.

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

 

 

 

 

Перестроить (флип), при необходимости, треугольнико модели поверхности - после выбора этого пункта меню появляется диалог:

 

 

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

 

 

Ограничить перестраивание треугольников одним проходом - если отметить этот элемент, то перестроены будут только те треугольники, которые попали бы в список при выборе предыдущего пункта всплывающего меню.

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

 

 

 

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

 

После флипов, информация о результатах выводится в окно с информацией о работе с программой. Например :

 

--------------------------------

Перестраивание (флип) треугольников модели ПОВЕРХНОСТИ

Файл 'E:\Примеры\DGS\Флип ребра\Средняя поверхность.dgs'

Модель поверхности № 1  (ID=1).  Назв. объекта ''

Всего точек = 3069,   всего треугольников = 6037.  (НЕЗАМКНУТАЯ)

*Флип*   68 ( 2 )  <==>   114 ( 2 )

*Флип*   305 ( 3 )  <==>   356 ( 3 )

*Флип*   440 ( 2 )  <==>   496 ( 1 )

*Флип*   1019 ( 2 )  <==>   1105 ( 1 )

*Флип*   1379 ( 2 )  <==>   1485 ( 1 )

*Флип*   1978 ( 3 )  <==>   2099 ( 1 )

Количество пар треугольников, для которых произведено перестраивание с использованием флипа = 6