Добавил:
sergeevpavel0406@mail.ru СОВА Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика в техническом университете / Информатика в техническом университете. Компьютерная графика

.pdf
Скачиваний:
88
Добавлен:
06.03.2018
Размер:
6.96 Mб
Скачать

3.4. Твердотельное моделирование

а б

Рис. 3.50. Описание нескольких границ одним списком:

а— многосвязная грань; б — грань с мостом

данная структура ориентирована на хранение плоских многогранников. Она не рассчитана на описание объектов с криволинейными гранями и ребрами;

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

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

 

 

 

 

 

Таблица 3.3

Подтаблица

Подтаблицаребер

 

Подтаблица вершин

 

 

 

 

 

граней

Ребро

Вершина

Вершина

Координаты

 

 

 

^ 1

ЕьЕ56

Et

vb v2

V,

М,У\, Z\

F2

Ег, Е6, E-i

Е2

Уъ Уз

Уг

Хъ Уъ Zl

F3

E-j, E-i, E$

Ез

Уз,У4

Уз

Хз, Уз, 23

F4

Е4, E$, Е5

Е4

v4>v,

v4

Х4, У A, Z4

F5

Е\, Е2, E3, £4

Е5

vuv5

Уъ

Хъ, Уъ, Zъ

Ев

Уг, Уъ

Е7

Уз,Уъ

Ен

У4, Уъ

Существуют две простые структуры данных, лишенные указанных недостатков табличного описания — структура полуребер (half-edge data structure) и структура крыльевых ребер (winged-edge data structure).

245

3. Математические модели геометрических объектов

Структура полуребер

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

Более того, для каждой грани создается указатель на первое ребро списка, а в описании ребра создаются указатели на предыдущее и последующие ребра. Пример такой организации данных в виде двухсвязного списка ребер грани F\ показан на рис. 3.51.

Двухсвязный список позволяет использовать простой способ восстановления всей границы по любому предъявленному ребру. Для этого достаточно пройти весь граничный цикл, двигаясь по указателям. Если принять эту форму хранения для всех граней в виде двухсвязного списка, то появятся проблемы, связанные с целостностью представления всей оболочки. Пусть грань F2 представлена списком со входом в Е2 (рис. 3.52). Очевидно, что упорядоченность ребер этого списка противоречит системе указателей списка, задающего грань F,. Общее для граней F\ и F2 ребро Еь (см. рис. 3.49) получает различную ориентацию в списках обеих граней. Для разрешения этого противоречия можно разделить каждое ребро пополам и использовать половинки в описаниях тех граней, к которым они относятся. Частям одного ребра приписывается противоположная ориентация, а описание граней представляет собой двухсвязный список полуребер. Элементы списочного описания грани связываются ссылками таким образом, что направление обхода каждого из них согласуется с направлением обхода грани (против часовой стрелки, если смотреть снаружи тела).

 

F2

1—

 

\

\

Е5

E2

 

Еп

Е6

E6

Ех -

Ey h

Рис. 3.51. Двухсвязный список ребер

Рис. 3.52. Двухсвязный список ребер

грани F\

грани F2

246

3.4. Твердотельное моделирование

1 h9 \

hu

fTl

Рис. 3.53. Полуребра простого полиэдра

Рис. 3.54. Двухсвязные списки полуребер

 

граней F] и F2

Пример разбиения ребер на полуребра показан на рис. 3.53. Здесь представлены только две грани простого полиэдра, полное изображение которого дано рис. 3.49. На рис. 3.54 изображены две списочные структуры, которые задают границы граней Fx и F2.

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

На рис. 3.55 приведен пример трехсвязной грани с разметкой полуребер, а на рис. 3.56 изображена списочная структура этого объекта. Из рис. 3.53 и 3.54 следует, что при этом способе организации данных грань ссылается на список полуребер косвенно, через двухсвязный список циклов. Входом этого списка

служит обычно внешний цикл грани.

 

Последовательность перечисления полуре-

 

бер в списках зависит от принятой ориентации

 

циклов. Считается, что ребра внешнего цикла

 

ориентированы против часовой стрелки, а ребра

 

всех внутренних — по часовой, если смотреть

 

на грань с внешней стороны тела (см. рис. 3.55).

 

Это соглашение об ориентации сохраняет внут-

 

реннюю часть грани по одну сторону от грани-

 

цы. Внутренние точки грани всегда лежат по

 

левую сторону при обходе циклов в выбранном

Рис. 3.55. Пример многосвязной

направлении.

грани

247

 

3. Математические модели геометрических объектов

 

 

 

 

Чтобы

придать списочной

структуре

 

 

 

данных свойства полноценной модели, сле-

 

 

 

дует пополнить ее информацией о связях

t

{ —1

полуребер с

инцидентными вершинами и

родительскими ребрами. Эта задача решает-

л.

h6

\

 

ся созданием дополнительных ссылок.

 

 

 

 

 

 

Чтобы создать связи между ребрами и

 

*п

 

полуребрами, вводятся указатели

ребер на

 

 

порожденные полуребра и указатели полу-

 

 

 

 

 

 

ребер на родительские ребра. Аналогичным

 

 

 

образом создаются связи между вершинами

А3

hn

 

и полуребрами.

 

 

 

 

Описанная структура данных имеет зна-

 

 

 

чительные преимущества по сравнению с

А4

hi

H

табличным представлением. Отметим только

 

 

самое главное. Эта форма описания позволяет

 

 

 

сохранить информацию о связях вершин, ре-

 

 

 

бер и граней и по этим данным синтезировать

 

-

 

любые необходимые сведения о смежности.

Рис. 3.56. Списочная структура

Рассмотрим способ определения мно-

грани с отверстием

 

жества ребер, исходящих из вершины V\, на

 

 

 

примере простого многогранника, показан-

 

 

 

ного на рис. 3.57.

 

Если вершина V, является начальной вершиной (это справедливо для приведенного примера), то выбирается полуребро prev /гь предшествующее Aj. Его родительское ребро представляет собой один из искомых объектов, соединенных с V\. После этой операции вместо ребра h\ рассматривается сопряженное ему полуребро (обозначим его new h\), и первый шаг алгоритма повторяется заново. Если V\ является конечной вершиной для /гь то выбирается полуребро, следующее за /гь а его родитель включается в число смежных ребер. Далее вместо h\ рассматривается полуребро, сопряженное со следующим за /гь и первая операция повторяется с полуребром new h\. Процедура повторяется до тех пор, пока не будет достигнуто полуребро, сопряженное со стартовым h\.

Структура крыльевых ребер

 

Рассмотренная в подразд. 3.3 структура полуре-

 

бер представляет собой список граней, каждая из ко-

 

торых задана двухсвязным списком ребер. По срав-

 

нению с табличной формой хранения данных это на-

 

много более эффективное представление оболочек

 

твердых тел. В твердотельной вычислительной гео-

Рис. 3.57. Генерация данных

метрии существуют задачи, вычисление которых в

о смежности ребер и вершин

248

Рис. 3.58. Фрагмент многоугольника и ссылки структуры крыльевых ребер

3.4. Твердотельное моделирование

структуре полуребер данных требует значительных вычислительных ресурсов. Известно несколько более эффективных подходов к описанию оболочек. Самым распространенным из них является подход Бомгарта (Baumgart), основанный на применении так называемых крыльевых ребер (winged edges). Сердцевиной этой структуры данных служит описание ребер, а не граней, как это принято в структуре полуребер. Каждое ребро представляется системой ссылок на связанные с данным ребром объекты многоугольника. В эту систему входят ссылки на две граничные вершины, на две грани, пересечение которых образует данное ребро, и четыре ребра, исходящих из граничных вершин.

Фрагмент многоугольника на рис. 3.58 иллюстрирует структуру данных крыльевых ребер. На рисунке в виде стрелок показаны все восемь ссылок ребра Е\.

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

каждая вершина получает обратную ссылку на одно из ребер, исходящих

из нее;

каждая грань снабжается ссылкой на одно из граничных ребер.

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

Пусть граничная вершина Vi ребра Е\ (см. рис. 3.58) есть п, а вершина V2 р. Тогда, согласно введенной классификации, для ребра Е\ грань F\ есть р-грань, а грань F2 — n-грань. Используя заданную классификацию, можно ввести четкое различение четырех смежных ребер 2, £з, Е4, Е5), на которые ссылается основное ребро (Е\). Два ребра, инцидентные вершине п, назовем n-ребрами. В нашем случае (см. рис. 3.58) это ребра Е2, Е3. При обходе граней по часовой стрелке они являются последующими для и-грани и предыдущими для р-грани. Ребра, связанные с вершиной р, будем называть р-ребрами. В нашем случае это Е4, Е$. По сравнению с и-вершинами они демонстрируют прямо противоположные свойства. При фиксированном направлении обхода они являются последующими для р-грани и предыдущими для «-грани. Эти четыре ребра называют крыльями (wings), от них и пошло название всей структуры данных.

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

249

Рис. 3.59. Грань с несколькими отверстиями

3. Математические модели геометрических объектов

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

Пример такого представления иллюстрируют рис. 3.59 и 3.60. На рис. 3.59 показана грань с отверстиями, а на рис. 3.60 представлена списочная структура, которая задает топологию этой грани.

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

Булевские операции в системе В-гер

Синтез новых тел из набора исходных объектов путем применения некоторого множества выбранных операций — мощный и естественный способ формообразования. В компьютерной геометрии известно несколько классов допустимых операций, применимых к трехмерным телам. Одними из самых распространенных являются так называемые булевские (булевы) операции. К их числу прежде всего относятся объединение, вычитание и пересечение двух тел. Можно утверждать, что не существует развитых систем геометрического моделирова-

ния, которые не поддерживают этот метод син-

 

теза трехмерных и двухмерных форм.

 

В общем случае результатом булевских опе-

 

раций могут быть не многообразные объекты,

 

работа с которыми ограниченно поддерживается

 

в современных системах машинной графики. На-

 

помним, что и-мерным многообразием называет-

 

ся тело, расположенное в и-мерном пространстве,

 

каждая точка которого (тела) имеет окрестность,

 

топологически подобную «-мерной сфере.

 

Существует условие, которое немного огра-

 

ничивает разнообразие синтезируемых форм, но

 

гарантирует их высокую «технологичность». Это

 

дополнительное условие называется регуляриза-

 

цией, его формулировка и основные свойства

Рис. 3.60. Списочная структура,

подробно рассмотрены в начале главы. Способ

задающая грань с отверстиями

250

3.4. Твердотельное моделирование

описания трехмерных тел также существенно ограничивает применение булевских операций. Существуют несовместимые пары булевских операций и видов описания геометрии.

В табл. 3.4 дан полный список регулярных операций, применимых к телам с граничным описанием, и сведение регулярных операций к обычным (полный вариант этой таблицы приведен в начале главы).

 

 

 

Таблица 3.4

 

 

Регулярные булевские операции

 

Булевские операции

A U* В

А Г)* В

А-* В

 

Аь П В,

-

+

-

Вь П Л,-

-

+

+

А„-В

+

-

+

Вь-А

+

-

-

#(АЬ П Вь)

+

+

-

~{Аь П Вь)

-

-

+

Примечание. Большими латинскими буквами обозначены трехмерные телаоперанды. Нижние индексы i и b означают соответственно внутренние и граничные области: #(Ah Г) Вь) — часть общей границы объектов А и В, относительно которой А, и В, лежат по одну сторону; ~(АЬ П Вь) — часть общей границы, где А и В лежат по разные стороны; «+» — набор обычных операций, к которому сводится каждая регулярная булевская операция.

Результатом регулярного объединения двух тел A U* В является новое тело,

содержащее точки, принадлежащие внутреннему объему первого или второго операнда. Результатом регулярного пересечения А О* В служит тело, содержащие точки, принадлежащие внутреннему объему первого и второго операндов. Тело, образованное вычитанием А -* В, состоит из внутренних точек первого операнда, которые не входят во внутренний объем второго операнда.

Известно, что операцию вычитания можно свести к операции пересечения; для этого требуется обратить второй операнд (вывернуть его наизнанку) и найти множество точек, принадлежащее объему первого и второго операндов. Операцию обращения обозначают обычно через Т. В обращенном теле внутренние грани становятся наружными, наружные — внутренними, кроме того, изменяяется направление всех граничных циклов на противоположное. В результате внутренним объемом становится та часть пространства, которая первоначально располагалась за граничной оболочкой тела. Сведение операций можно записать в виде короткого математического выражения Г = Л - В = АП В.

Булевские операции над двухмерными и трехмерными объектами имеют множество общих черт. Это относится к их математической и программной реализации в пакетах КГ.

251

3. Математические модели геометрических объектов

Техника булевского объединения

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

Операцию можно разбить на три этапа. Первый этап состоит в получении линий пересечения граничных оболочек двух тел. По этим линиям строят новые ребра, которые будем называть ребрами пересечения. На втором этапе ищут точки пересечения новых ребер со старыми ребрами, присутствовавшими в описании границ операндов до операции. Эти ребра разрежем на части по всем новым вершинам. Третий этап заключается в перестройке граничных циклов пересекающихся граней. Рассмотрим содержание этапов более подробно.

Первый этап операции булевского объединения начинается с поиска линий пересечения каждой грани первого тела с каждой гранью второго тела, если таковые (линии) имеются. Технически этот шаг реализуется при помощи хорошо известного алгоритма поиска линии пересечения двух поверхностей, который рассмотрен в гл. 4, посвященной алгоритмическому обеспечению КГ.

Пусть построены искомые линии пересечения. На их базе создадим ребра пересечения. Всем новым ребрам припишем направление, которое совпадает с ориентацией векторного произведения нормали грани первого тела с нормалью грани второго тела. Будем считать положительной ориентацию нормали, направленной наружу тела (рис. 3.61). Ребра пересечения должны целиком лежать внутри граничных циклов исходных тел. Они могут соединяться со старой границей только своими концевыми вершинами. Это условие, примененное к примеру, показанному на рис. 3.61, требует разделения ребер старой границы на две части в точках А, В и С.

На втором этапе процедуры построения булевского объединения требуется разрезать ребра старой границы в точках касания новых ребер. Это разделение

Рис. 3.61. Нормали граней и направления ребер пересечения

252

3.4. Твердотельное моделирование

выполняется посредством рассечения кривых, которые являются носителями ребер. Из одной кривой получим две кривые, которые при соединении образуют исходную кривую. Одна из этих кривых останется геометрическим носителем разрезаемого ребра, а на базе второй построим новое ребро, которое наследует свойства исходного ребра. Граничные ребра строятся на основе кривой пересечения двух поверхностей. Рассечению подлежат два экземпляра этой двухмерной кривой, лежащие на разных поверхностях.

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

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

Третий этап является заключительным в операции построения булевского объединения. Его цель состоит в разрезании граней и перестройке граничных циклов в соответствии с новой структурой граничных ребер.

На рис. 3.62 показаны грани двух пересекающихся тел, представленных на рис. 3.61. Тонкими линиями со стрелками изображены направления граничных циклов исходных граней, толстыми линиями со стрелками — ребра разрезания. Требуется перестроить граничные циклы таким образом, чтобы учесть новую ситуацию, созданную разрезанием. На рис. 3.63 показаны части граней, которые войдут в результирующее объединение. Как и ранее, тонкие линии со стрелками

Рис. 3.62. Грани тел до разрезания

253

3. Математические модели геометрических объектов

Рис. 3.63. Грани тел после разрезания

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

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

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

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

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

Множество новых граничных циклов разделим на группы, каждая из которых состоит из одного внешнего цикла и всех входящих в него внутренних цик-

т