Информатика в техническом университете / Информатика в техническом университете. Компьютерная графика
.pdf
3.4. Твердотельное моделирование
располагаются внутри внешней. Оболочки любого типа не должны иметь пересечений друг с другом и самопересечений.
Во многих операциях автоматизированного конструирования и технологической подготовки производства важно различать внутренние и внешние точки деталей и узлов. Поэтому граничные оболочки считаются ориентированными, одна сторона их обращена внутрь тела, другая — наружу. Чтобы сделать ориентацию определенной каждой точке границы приписывается нормаль, которая направлена от оболочки в наружном направлении. Это соглашение представляется совершенно ясным для внешних оболочек, некоторые противоречия с геометрической интуицией могут возникать с нормалями внутренних фрагментов границы, которые имеют нормали, направленные внутрь ограничиваемой части пространства. Можно считать, что внутренние оболочки тела ведут себя как вывернутые наизнанку внешние.
Таким образом, для точного математического описания трехмерного тела требуется задать внешнюю оболочку и в зависимости от связности объекта одну или несколько внутренних оболочек.
Большая часть современных систем геометрического моделирования поддерживает представление, у которого фрагментами границ являются так называемые двухмерные многообразия — геометрические объекты, каждая точка которых имеет окрестность, топологически подобную плоскому двухмерному диску. Точное название отношения топологического подобия — гомоморфизм. Это абстрактная математическая категория, которая нуждается в четком и развернутом определении. С небольшой погрешностью подобными можно считать две геометрические фигуры, между точками которых можно установить непрерывное взаимно-однозначное соответствие.
На рис. 3.46 изображены образцы тел. Две призмы, показанные на рис 3.46, б, соединены по одному ребру. Если взять любую точку на этом ребре и проанализировать ее окрестность, то можно заметить ее коренное топологическое отличие от двухмерного диска. Примеры объектов, не относящихся к классу многообразий: соединение трехмерного тела с отдельным ребром; два многообразия, имеющие только одну общую вершину; трехмерное тело с внутренними переборками.
а |
б |
Рис. 3.46. Форма многообразного тела (а) и не многообразного тела (б)
241
3. Математические модели геометрических объектов
Структура полуребер
Специалистам в области информатики и практикующим программистам хорошо известны все основные структуры данных и их сильные и слабые стороны. Так, очевидные недостатки массивов, которые служат простейшей формой описания таблиц, преодолеваются применением многосвязных списочных структур. Для хранения информации о граничном представлении трехмерных тел можно использовать такой способ организации данных, у которого основной единицей хранения будет двухсвязный список ребер грани.
Более того, для каждой грани создается указатель на первое ребро списка, а в описании ребра создаются указатели на предыдущее и последующие ребра. Пример такой организации данных в виде двухсвязного списка ребер грани F\ показан на рис. 3.51.
Двухсвязный список позволяет использовать простой способ восстановления всей границы по любому предъявленному ребру. Для этого достаточно пройти весь граничный цикл, двигаясь по указателям. Если принять эту форму хранения для всех граней в виде двухсвязного списка, то появятся проблемы, связанные с целостностью представления всей оболочки. Пусть грань F2 представлена списком со входом в Е2 (рис. 3.52). Очевидно, что упорядоченность ребер этого списка противоречит системе указателей списка, задающего грань F\. Общее для граней F\ и F2 ребро Е6 (см. рис. 3.49) получает различную ориентацию в списках обеих граней. Для разрешения этого противоречия можно разделить каждое ребро пополам и использовать половинки в описаниях тех граней, к которым они относятся. Частям одного ребра приписывается противоположная ориентация, а описание граней представляет собой двухсвязный список полуребер. Элементы списочного описания грани связываются ссылками таким образом, что направление обхода каждого из них согласуется с направлением обхода грани (против часовой стрелки, если смотреть снаружи тела).
Fi |
F2 |
Е5 \ |
fn |
|
E7 |
Е6 |
|
Щ - |
E1 4_JJ |
Рис. 3.51. Двухсвязный список ребер |
Рис. 3.52. Двухсвязный список ребер |
грани Fj |
грани F2 |
246
3.4. Твердотельное моделирование
|
|
|
Fi |
|
h9 |
1 |
hA 1 |
|
hu |
|
hu |
|
|
-г- |
A14 |
|
|
|
|
Рис. 3.53. Полуребра простого полиэдра |
Рис. 3.54. Двухсвязные списки полуребер |
||
|
|
граней F\ и F2 |
|
Пример разбиения ребер на полуребра показан на рис. 3.53. Здесь представлены только две грани простого полиэдра, полное изображение которого дано рис. 3.49. На рис. 3.54 изображены две списочные структуры, которые задают границы граней Fy и F2.
Структура полуребер позволяет компактно описывать грани с отверстиями без дополнительных ребер-мостиков. В общем случае грань может иметь сложную границу, состоящую из нескольких внутренних фрагментов, задающих отверстия, и одного внешнего граничного контура. Последовательность ребер, определяющая любой граничный фрагмент, представляет собой цикл, или петлю. Для описания грани с отверстиями можно организовать список списков, в котором входами служат циклы, а каждый цикл задается двухсвязным списком полуребер.
На рис. 3.55 приведен пример трехсвязной грани с разметкой полуребер, а на рис. 3.56 изображена списочная структура этого объекта. Из рис. 3.53 и 3.54 следует, что при этом способе организации данных грань ссылается на список полуребер косвенно, через двухсвязный список циклов. Входом этого списка служит обычно внешний цикл грани.
Последовательность перечисления полуребер в списках зависит от принятой ориентации циклов. Считается, что ребра внешнего цикла ориентированы против часовой стрелки, а ребра всех внутренних — по часовой, если смотреть на грань с внешней стороны тела (см. рис. 3.55). Это соглашение об ориентации сохраняет внутреннюю часть грани по одну сторону от грани-
цы. Внутренние точки грани всегда лежат по |
|
левую сторону при обходе циклов в выбранном |
Рис. 3.55. Пример многосвязной |
направлении. |
грани |
247
|
|
3. Математические модели геометрических объектов |
|
|||
Е |
|
41 |
Чтобы |
придать списочной |
структуре |
|
|
данных свойства полноценной модели, сле- |
|||||
|
|
|
дует пополнить ее информацией о связях |
|||
\ |
|
fil he\ \—1 |
полуребер с |
инцидентными вершинами и |
||
\ |
родительскими ребрами. Эта задача решает- |
|||||
А, |
||||||
|
|
|
ся созданием дополнительных ссылок. |
|||
|
|
|
Чтобы создать связи между ребрами и |
|||
hi |
|
hn |
полуребрами, вводятся указатели |
ребер на |
||
|
порожденные полуребра и указатели полу- |
|||||
|
|
|
||||
|
|
|
ребер на родительские ребра. Аналогичным |
|||
|
|
|
образом создаются связи между вершинами |
|||
hi |
|
hn |
и полуребрами. |
|
||
|
|
|
Описанная структура данных имеет зна- |
|||
|
|
|
чительные преимущества по сравнению с |
|||
hA |
|
hi |
табличным представлением. Отметим только |
|||
|
|
|
самое главное. Эта форма описания позволяет |
|||
|
|
|
сохранить информацию о связях вершин, ре- |
|||
h5 |
|
|
бер и граней и по этим данным синтезировать |
|||
|
|
любые необходимые сведения о смежности. |
||||
|
|
|
||||
Рис. 3.56. Списочная структура |
Рассмотрим способ определения мно- |
|||||
|
грани с отверстием |
жества ребер, исходящих из вершины V\, на |
||||
|
|
|
примере простого многогранника, показан- |
|||
|
|
|
ного на рис. 3.57. |
|
||
Если вершина V\ является начальной вершиной (это справедливо для приведенного примера), то выбирается полуребро prev hu предшествующее h\. Его родительское ребро представляет собой один из искомых объектов, соединенных с V\. После этой операции вместо ребра hi рассматривается сопряженное ему полуребро (обозначим его new hi), и первый шаг алгоритма повторяется заново. Если Vi является конечной вершиной для h\, то выбирается полуребро, следующее за /гь а его родитель включается в число смежных ребер. Далее вместо h] рассматривается полуребро, сопряженное со следующим за Ьь и первая операция повторяется с полуребром new hi. Процедура повторяется до тех пор, пока не будет достигнуто полуребро, сопряженное со стартовым hi.
Структура крыльевых ребер |
|
Рассмотренная в подразд. 3.3 структура полуре- |
|
бер представляет собой список граней, каждая из ко- |
|
торых задана двухсвязным списком ребер. По срав- |
|
нению с табличной формой хранения данных это на- |
|
много более эффективное представление оболочек |
|
твердых тел. В твердотельной вычислительной гео- |
Рис. 3.57. Генерация данных |
метрии существуют задачи, вычисление которых в |
о смежности ребер и вершин |
248
3.4. Твердотельное моделирование
структуре полуребер данных требует значительных |
А |
|
вычислительных ресурсов. Известно несколько более |
/ |
|
эффективных подходов к описанию оболочек. Самым |
|
|
распространенным из них является подход Бомгарта |
|
|
(Baumgart), основанный на применении так называе- |
|
|
мых крыльевых ребер (winged edges). Сердцевиной |
|
|
этой структуры данных служит описание ребер, а не |
|
|
граней, как это принято в структуре полуребер. Каждое |
|
|
ребро представляется системой ссылок на связанные с |
|
|
данным ребром объекты многоугольника. В эту систе- |
|
|
му входят ссылки на две граничные вершины, на две |
|
|
грани, пересечение которых образует данное ребро, и |
|
|
четыре ребра, исходящих из граничных вершин. |
Рис. 3.58. Фрагмент много- |
|
Фрагмент многоугольника на рис. 3.58 иллюст- |
||
угольника и ссылки струк- |
||
рирует структуру данных крыльевых ребер. На ри- |
туры крыльевых ребер |
|
сунке в виде стрелок показаны все восемь ссылок |
|
|
ребра Ei. |
|
Чтобы обеспечить более эффективное решение наиболее востребованных топологических задач, структура данных пополняется дополнительными ссылками:
•каждая вершина получает обратную ссылку на одно из ребер, исходящих
из нее;
•каждая грань снабжается ссылкой на одно из граничных ребер.
При любом направлении обхода соседних граней (например, по часовой стрелке) вершины, принадлежащие общей грани, будут упорядочены в последовательности пройденных вершин в противоположном порядке. Пусть граничными вершинами некоторого ребра, общего для двух граней, являются вершины пир. Грань называют р-гранью, если при обходе ее границы по часовой стрелке вершина р встречается в перечислении вершин позже (стоит правее) вершины п. Грань называется n-гранью в противном случае.
Пусть граничная вершина V\ ребра Ех (см. рис. 3.58) есть п, а вершина V2 — р. Тогда, согласно введенной классификации, для ребра Et грань Fi есть р-грань, а грань F2 — тг-грань. Используя заданную классификацию, можно ввести четкое различение четырех смежных ребер (Е2, Е3, Е4, Е5), на которые ссылается основное ребро (Ei). Два ребра, инцидентные вершине п, назовем и-ребрами. В нашем случае (см. рис. 3.58) это ребра Е2, Е$. При обходе граней по часовой стрелке они являются последующими для и-грани и предыдущими для р-грани. Ребра, связанные с вершиной р, будем называть р-ребрами. В нашем случае это Е4, Е5. По сравнению с n-вершинами они демонстрируют прямо противоположные свойства. При фиксированном направлении обхода они являются последующими для р-грани и предыдущими для и-грани. Эти четыре ребра называют крыльями (wings), от них и пошло название всей структуры данных.
Описанная структура данных предназначена для хранения данных об оболочках, состоящих из односвязных граней. Существует несколько модификаций этой
249
3. Математические модели геометрических объектов
структуры, позволяющих расширить ее возможности на грани с отверстиями. Например, можно хранить описание каждой грани в виде списка граничных циклов подобно тому, как это делается в структуре полуребер. Для каждой грани сохраняется указатель на внешний цикл, который, в свою очередь, ссылается на внутренний граничный цикл, если он имеется. Последний указывает на другой цикл при наличии нескольких отверстий в одной грани или на внешний цикл, в ином случае.
Пример такого представления иллюстрируют рис. 3.59 и 3.60. На рис. 3.59 показана грань с отверстиями, а на рис. 3.60 представлена списочная структура, которая задает топологию этой грани.
Выбор односвязного списка вместо двухсвязного не имеет принципиального значения. Односвязный список позволяет получить более экономную структуру, что достигается за счет некоторой потери эффективности расчета для некоторых классов задач.
Булевские операции в системе В-гер
Синтез новых тел из набора исходных объектов путем применения некоторого множества выбранных операций — мощный и естественный способ формообразования. В компьютерной геометрии известно несколько классов допустимых операций, применимых к трехмерным телам. Одними из самых распространенных являются так называемые булевские (булевы) операции. К их числу прежде всего относятся объединение, вычитание и пересечение двух тел. Можно утверждать, что не существует развитых систем геометрического моделирова-
ния, которые не поддерживают этот метод син- |
|
теза трехмерных и двухмерных форм. |
|
В общем случае результатом булевских опе- |
|
раций могут быть не многообразные объекты, |
|
работа с которыми ограниченно поддерживается |
|
в современных системах машинной графики. На- |
|
помним, что и-мерным многообразием называет- |
|
ся тело, расположенное в и-мерном пространстве, |
|
каждая точка которого (тела) имеет окрестность, |
|
топологически подобную n-мерной сфере. |
|
Существует условие, которое немного огра- |
|
ничивает разнообразие синтезируемых форм, но |
|
гарантирует их высокую «технологичность». Это |
|
дополнительное условие называется регуляриза- |
|
цией, его формулировка и основные свойства |
Рис. 3.60. Списочная структура, |
подробно рассмотрены в начале главы. Способ |
задающая грань с отверстиями |
250
3. Математические модели геометрических объектов
Техника булевского объединения
Рассмотрим операцию булевского сложения двух трехмерных тел. Суть операции достаточно проста. Требуется найти линии пересечения граничных оболочек двух тел, затем удалить часть первого тела, которая расположена внутри второго, и кусок второго тела, попавшего внутрь первого. Оставшиеся фрагменты образуют новое тело, которое представляет собой булевское объединение.
Операцию можно разбить на три этапа. Первый этап состоит в получении линий пересечения граничных оболочек двух тел. По этим линиям строят новые ребра, которые будем называть ребрами пересечения. На втором этапе ищут точки пересечения новых ребер со старыми ребрами, присутствовавшими в описании границ операндов до операции. Эти ребра разрежем на части по всем новым вершинам. Третий этап заключается в перестройке граничных циклов пересекающихся граней. Рассмотрим содержание этапов более подробно.
Первый этап операции булевского объединения начинается с поиска линий пересечения каждой грани первого тела с каждой гранью второго тела, если таковые (линии) имеются. Технически этот шаг реализуется при помощи хорошо известного алгоритма поиска линии пересечения двух поверхностей, который рассмотрен в гл. 4, посвященной алгоритмическому обеспечению КГ.
Пусть построены искомые линии пересечения. На их базе создадим ребра пересечения. Всем новым ребрам припишем направление, которое совпадает с ориентацией векторного произведения нормали грани первого тела с нормалью грани второго тела. Будем считать положительной ориентацию нормали, направленной наружу тела (рис. 3.61). Ребра пересечения должны целиком лежать внутри граничных циклов исходных тел. Они могут соединяться со старой границей только своими концевыми вершинами. Это условие, примененное к примеру, показанному на рис. 3.61, требует разделения ребер старой границы на две части в точках А, В и С.
На втором этапе процедуры построения булевского объединения требуется разрезать ребра старой границы в точках касания новых ребер. Это разделение
Рис. 3.61. Нормали граней и направления ребер пересечения
252
3.4. Твердотельное моделирование
выполняется посредством рассечения кривых, которые являются носителями ребер. Из одной кривой получим две кривые, которые при соединении образуют исходную кривую. Одна из этих кривых останется геометрическим носителем разрезаемого ребра, а на базе второй построим новое ребро, которое наследует свойства исходного ребра. Граничные ребра строятся на основе кривой пересечения двух поверхностей. Рассечению подлежат два экземпляра этой двухмерной кривой, лежащие на разных поверхностях.
Точки пересечения нового ребра со старым ребром грани ищем как точки пересечения двухмерных кривых, заданных на общей для них плоскости параметров. От каждого ребра в формуле, определяющей точки пересечения линий, участвует по одной двухмерной кривой, входящей в линию пересечения. Параметры точек пересечения ребер и сами координаты кривых, являющиеся параметрами поверхности, должны быть определены с заданной точностью. Поскольку каждое ребро исходных тел входит в циклы двух смежных граней, то после резки ребер исходных тел необходимо произвести корректировку этих циклов с учетом проведенного разрезания.
В результате выполнения первых двух этапов получим совокупность ориентированных ребер пересечения, которые соединяются друг с другом и со старыми ребрами тел-операндов только в вершинах.
Третий этап является заключительным в операции построения булевского объединения. Его цель состоит в разрезании граней и перестройке граничных циклов в соответствии с новой структурой граничных ребер.
На рис. 3.62 показаны грани двух пересекающихся тел, представленных на рис. 3.61. Тонкими линиями со стрелками изображены направления граничных циклов исходных граней, толстыми линиями со стрелками — ребра разрезания. Требуется перестроить граничные циклы таким образом, чтобы учесть новую ситуацию, созданную разрезанием. На рис. 3.63 показаны части граней, которые войдут в результирующее объединение. Как и ранее, тонкие линии со стрелками
Рис. 3.62. Грани тел до разрезания
253
