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

книги / Основы САПР. CAD CAM CAE

.pdf
Скачиваний:
18
Добавлен:
19.11.2023
Размер:
29.79 Mб
Скачать

Приложение Г

Пошаговый алгоритм реализации булевекай операции

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

1.Вычисляются кривые пересечения всех граней объема А и всех граней объе­

ма В; объемы А и В показаны на рис. Г.1. Затем находятся фрагменты каждой

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

по данной кривой (рис. Г.2). Далее такие фрагменты будУт называться ксег­ ментами (xegments). Вычисление кривой пересечения между двумя граня­ ми - сложная задача. Однакоl1Jоно является важным аспектом определения эффективности и устойчивости булевекай операции.

ОбъемА ~ОбьомВ

~~~[В

Объединение Пересечение Разность

Рис. Г.1. Пример булееской оnерации

Грань объема А

Кривая nересечения

Рис. Г.2. Оnределение ксегмента

Пашагавый алгоритм реализации булевекай операции

493

 

 

 

В зависимости от типов уравнений, используемых для представления каждой

поверхности, можно использовать различные методы вычисления кривых пе­

ресечения, как описано в главе 7. Кроме того, конечные точки ксегмента нахо­

дятся по точкам пересечения кривой пересечения с ребрами граней, как опи­

сано в главе 6.

2.Ксегменты, полученные на шаге 1, наносятся на соответствующие грани объе­ мов А и В (рис. Г.З). Каждый ксеrмент добавляется как новое ребро соответ­ ствующей грани каждого объема с помощью операторов Эйлера, так что разделение граней учитывается автоматически. Операторы Эйлера выбира­

ются в зависимости от расположения ксеrмента относительно грани, на кото­

рую он должен быть нанесен. Есть пять возможных вариантов расположения (рис. Г.4). На рис. Г.4, а изображена ситуация, в которой новое ребро совпада­

ет с существующим; здесь никаких действий не требуется. На рис. Г.4, б два

конца нового ребра совпадают с существующими вершинами, но само ребро не совпадает с существующими ребрами; в этом случае необходимо при­

менить оператор MEL. На рис. Г.4, в один конец нового ребра совпадает с су­

ществующей вершиной, а другой расположен внутри грани; в этом случае

применяется оператор MEV. На рис. Г.4, г оба конца нового ребра находятся

внутри грани; в этой ситуации мы действуем операторами MEWLS и КРМН.

Здесь оператор КРМН иреобразует кольцо, созданное оператором MEWLS,

вкольцо отверстия, принадлежащее внешнему кольцу грани. Одновременно

он устраняет избыточную оболочку, если кольцо, которое иреобразовывается

вкольцо отверстия, было связано с отдельной оболочкой. На рис. Г.4, д два

конца нового ребра связаны с разными кольцами на грани; в этом случае при­

меняется оператор МЕКН. Из этих объяснений мы можем заключить, что каж­ дый ксегмент можно нанести на соответствующую грань каждого из объемов

автоматически, если можно автоматически определить его положение по от­

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

называется тестом. ua вхождение (injout test).

Объем А после модификации

Объем В после модификации

Рис. Г.З. Добавление новых граней к объемам А и В

494

Приложение Г. Пошаговый алгоритм реализации булевекай операции

 

 

 

а

б

в

г

д

Рис. Г.4. Возможное расположение ксегмента по отношению к соответствующей грани

3.Грани объема А классифицируются по их расположению относительно объе­

ма В. Иными словами, для каждой грани определяется, расположена ли она

внутри, снаружи или на граничной поверхности объема В. Грани объема В

классифицируются таким же образом по отношению к объему А.

Классификация требует большого объема вычислений, поэтому мы будем из­

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

К счастью, группы граней одного объема могут иметь одинаковое положение по отношению к другому объему. На рис. Г.S грани, принадлежащие к каждой

из групп, имеют одно и то же положение относительно другого объема

(то есть грани в группе А1 находятся вне объема В, грани в группе В1 находят­ ся внутри объема А). Эти группы также разделены новыми ребрами, получен­

ными из ксегментов.

~~

Групnа в,

ГpynnaA2

Групnа В2

Групnа А,

Рис. Г.5. Груnnы граней

Таким образом, грани, принадлежащие группе, можно определить путем об­

хода соседних граней, начиная с любой грани в группе, без пересечения ксре­

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

ве вторичной начальной грани, и обнаруженные на данной итерации грани добавляются к отобранному множеству. Процесс останавливается, когда каж­ дая грань из отобранного множества побывает в роли вторичной исходной грани. В данном примере будут отобраны грани из группы А1• После этого

в качестве вторичной исходной грани будет выбрана любая из граней, не при­ надлежащих к группе А1; тот же самый процесс будет повторен для нахож­ дения граней, принадлежащих к группе А2• Еслп какая-либо грань не принад­

лежит ни к А1, ни к А2, то далее находятся грани группы А3 (которые не

Поwаговый алгоритм реализации булевекай операции

495

 

 

 

существуют в данном примере). Такой же процесс применяется к объему В,

в результате чего получаются группы граней В1 и В2 (рис. Г.5).

После того как грани объемов А и В будут разделены на группы, необходимо

определить положение каждой группы граней по отношению к противопо­

ложному объему. В качестве примера рассмотрим метод для группы А1• Ос­ тальные группы можно обрабатывать так же. Сначала произвольно выбирает­

ся одно из ксребер, образующих внешнюю границу группы А1, и обозначается как Хе (рис. Г.6). Любая из граней группы А1, имеющая Хе одним из своих ре­

бер, обозначается F3 , а грань объема В, делящая ребро Хе с F3 , обозначается Fь.

Затем находятся векторы Na и Nь внешних нормалей к граням Fa и F1,, а также тангенциальный вектор Т в любой точке Хе (рис. Г.6). Тангенциальный век­

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

направлением внешнего кольца La грани Fа при взгляде снаружи. Наконец,

классификация группы А1 по отношению к объему В находится из значения (Na Т)· Nь следующим образом. Группа А1 находится вне объема В, если это

значение положительно, внутри - если значение отрицательно, и на поверх­

ности объема, если это значение равно нулю. Если выясняется, что группа А находится на поверхности объема В, она далее классифицируется как ON_ SАМЕ (если Na и Nь имеют одно и то же направление) или ON_OPPOSIТE (если Na и Nь направлены противоположно).

Рис. Г.6. Классификация групп граней

4.Группы граней отбираются в соответствии с конкретной булевекай опера­

цией. Правила отбора групп определяет табл. Г.1. Мы объясним, как исполь­

зовать эти правила для операции объединения, а для прочих операций они

используются точно так же. Для операции объединения табл. Г.1 показывает,

что нам необходимо отобрать элементы О и О(Х) в столбце •Объединение•.

Это означает, что мы должны отобрать группы объема А, находящиеся вне

объема В, группы объема В, находящиеся вне объема А, и группы объема А, классифицированные как ON_SAME (или группы ON_SAME объема В). Символы О(Х) и Х(О) в табл. Г.1 подразумевают, что элемент объема А соот­ ветствует элементу объема В, и что данный элемент должен быть отобран

лишь единож:tы. Если мы применим это правило к группам граней на

рис. Г.5, мы выясним, что для операции объединения будут отобраны группы

496

Приложение Г. Пошаговый алгоритм реализации булевекай операции

 

 

 

А1 и В2• Правила для операций разности и пересечения вы можете проверить,

применяя их к группам граней на рис. Г.5.

Табпица Г.1. Группы граней, отбираемые для булевских операций

 

 

 

 

 

Объединение

Пересечеине

 

Разность

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OUT

о

х

 

о

 

 

 

 

 

 

 

 

 

 

 

 

 

Объем А

 

IN

х

о

 

х

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ON SAME

О(Х)

О(Х)

 

х

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ON OPPOSIТE

х

х

О(Х)

 

 

 

 

 

 

 

 

OUT

о

 

 

 

 

 

 

 

 

 

х

х

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IN

х

о

о

 

 

 

 

 

 

Объем В

ON SAME

Х(О)

Х(О)

х

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ON OPPOSIТE

х

х

Х(О)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.По результатам, полученным на шаге 4, ненужные группы граней удаляются

из каждого объема. Для примера с операцией объединения из объемов А и В

удаляются соответственно группы А2 и В1• Форму объемов А и В после удале­ ния ненужных групп граней илюстрирует рис. Г.7. Сложной топологической

операции, необходимой для создания объема, можно избежать, удалив не­

нужные группы граней из исходного объема, вместо того чтобы создавать но­

вый объем из отобранных групп граней. Как упоминалось ранее, подходы, изложенные в работах [132, 115], требуют этой топологической операции.

Рис. Г.7. Объемы nосле удаления ненужных групn граней

Вкачестве примера рассмотрим удаление группы граней А2 из объема А. Гра­ ни группы А2 можно удалить путем уничтожения ребер Е1 и Е2 (рис. Г.8).

Вобщем случае грани, принадлежащие группе, удаляются путем уничтоже­

ния всех их ребер, кроме ксребер. Керебра уничтожать не следует, поскольку

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

храняются. Ребро Е1 удаляется оператором Эйлера KEL, который также объе­

диняет грани F 1 и F"2 (рис. Г.9, а). Аналогичным образом.с помощью операто­ ра KEL удаляется ребро Е2 (рис. Г.9, 6). Теперь геометрическая информация,

Пошаговый алгоритм реализации булевекай операции

497

хранимая для грани F 1, не имеет смысла, и на следующем шаге используется только информация о ее внешнем кольце.

F1

Рис. Г.8. Топологические элементы, принадпежащие к группе А2

аб

Рис. Г.9. Процедура удаления Е1 и Е2

6.Два объема, полученные на шаге 5, склеиваются по общей границе (рис. Г.10).

Ту же лроцедуру склеивания необходимо лрименить к другим группам гра­

ней при использовании операторов лересечения и разности.

=

Рис. ·Г.1 О. Соэдание объема путем склеивания

Для лримера, изображенного на рис. Г.1О, лроцедура склеивания выполняет­

ся следующим образом. Во-первых, определяются восемь пар совпадающих

вершин и восемь пар совпадающих ребер, и пара вершин соединяется опе­ раторами КРМН и МЕКН. Как объяснялось ранее, два объема будут объедине­ ны оператором КРМН и сохранены в одной оболочке. Более того, одно из двух

общих граничных колец станет кольцом отверстия для другого в результате лрименения оператора КРМН. Оператор МЕКН соединяет пару совпадающих

вершин путем присоединения кольца отверстия к внешнему кольцу. Остав­

шиеся семь пар вершин соединяются путем семикратного лрименения опера­

тора MEL (рис. Г.11). Во-вторых, каждая пара вершин, соединенных ребром

498

Приложение Г. Пашагавый алгоритм реализации булевекай операции

нулевой длины, удаляется оператором КZEV. Этот оператор применяется во­

семь раз, поскольку имеется восемь вершин, соединенных ребрами нулевой

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

рис. 7.11. Наконец, восьмикратным применением оператора KEL удаляются

множественные ребра и вырожденные кольца.

КРМН

MEKL

7 х МЕL

18 х KZEV

..8 ,х__KEL

Рис. Г.11. Пошаговая иллюстрация процедуры склеивания

7.Далее определяется, имеет ли полученный объем множественные несвязан­

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

привести к появлению нескольких объемов, что демонстрирует рис. Г.12.

=

Рис. Г.12. Булевекая операция, приводящая к появлению нескольких объемов

Приложение д

Структура данных и топологические

операторы для немногообразных систем

моделирования

Д.1. Структура данных

В разделе 5.3.2 мы представляли объем в виде трех таблиц - грани, ребра и вер­

шины. Можно представить себе хранение списков топологических элементов

немногообразной модели аналогичным способом. Такой подход, предложенный

в [109], иллюстрирует рис. Д.1. Объект, в данном случае пирамида со слоистой

гранью и свободным ребром, состоит из объема, соответствующего пирамиде,

грани, соответствующей слоистой грани, и ребра, соответствующего свободному

ребру. Объем определяется оболочкой, окружающей объект, а оболочка снова

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

ная на рис. Д.1, а, представляется весьма компактной и четкой, поскольку она

является простым расширением структуры данных на случай немногообразных

моделей. Однако эта структура не дает достаточно информации для получения

сведений о смежности топологических элементов. Например, при добавлении к

модели новой грани (рис. Д.1, а) мы должны выяснить отношения смежности

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

оболочку 51 в структуре данных, пш<азанной на рис. Д.1, б. Чтобы можно было

определить оболочку, образуемую гранями, необходимо иметь информацию о

смежности граней.

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

немногообразных топологий [156]. В случае многообразных твердотельных мо­

делей информация о смежности хранится в виде двух типов циклического упо­

рядочивания (то есть цикл -«грань - ребро» и цикл -«вершина - ребро»). Цикл <<грань - ребро• - это список ребер для каждой грани или кольца, а цикл -«вер­ шина - ребро» - список связанных ребер, сходящихся в заданной вершине. По­ смотрев на структуру полуребер и структуру крыльевых ребер в разделе 5.3.2,

можно убедиться, что эти сведения о циклах хранятся прямо или косвенно. Ме­

жду тем, для представления немногобразной модели общего вида необходимо

500

Приложение д. Структура данных и топологические операторы

 

 

 

задать три типа циклов: кольцевой, радиальный и дисковый. Кольцевой цикл

(рис. Д.2, а) соответствует циклу 4Грань - вершина» в многообразных твердо­

тельных моделях. Радиальный цикл, показанный на рис. Д.2, 6 представляет со­

бой цикл граней, соединенных с определенным ребром. Эта информация не

является необходимой в многообразной модели, поскольку ребро всегда принад­

лежит двум граням. Однако в немногообразных моделях ребро может одновре­

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

ро» в многообразных твердотельных моделях. Однако в немногообразных моде­ лях вершина может иметь несколько дисковых циклов. Например, вершина V на

рис. Д.З, а и 6 имеет три дисковых цикла, каждый из которых принадлежит сво­

ей оболочке.

в

VL, 1Объемl

 

l

 

 

 

 

 

1'~

 

Fs

F,

F2

F4

[ГРЗНЬ)

l

l

l

l

l

 

Ls

L,

Щ

Ц 1Кольцоl

/l\/lYl~

 

 

лл Е1 Ез

Е, Е2

Е4

Es ---- ~

Vб Vз Vs -------------------

 

 

 

 

1Вершина~

б

Рис. Д.1. Представление немногообразной модели с помощью списков

тоnологических элементов

Соседние файлы в папке книги