книги / Основы САПР. CAD CAM CAE
.pdfПашагавый алгоритм реализации булевекай операции |
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ь направлены противоположно).
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). Теперь геометрическая информация,
Приложение д
Структура данных и топологические
операторы для немногообразных систем
моделирования
Д.1. Структура данных
В разделе 5.3.2 мы представляли объем в виде трех таблиц - грани, ребра и вер
шины. Можно представить себе хранение списков топологических элементов
немногообразной модели аналогичным способом. Такой подход, предложенный
в [109], иллюстрирует рис. Д.1. Объект, в данном случае пирамида со слоистой
гранью и свободным ребром, состоит из объема, соответствующего пирамиде,
грани, соответствующей слоистой грани, и ребра, соответствующего свободному
ребру. Объем определяется оболочкой, окружающей объект, а оболочка снова
определяется списком поверхностей (см. таблицу граней в разделе 5.3.2). Далее, с каждой гранью связаны кольца, и каждое кольцо имеет список ребер (см. таб лицу ребер в разделе 5.3.2). Аналогичным образом, каждое ребро имеет список вершин (см. таблицу вершин в разделе 5.3.2). Структура данных, представлен
ная на рис. Д.1, а, представляется весьма компактной и четкой, поскольку она
является простым расширением структуры данных на случай немногообразных
моделей. Однако эта структура не дает достаточно информации для получения
сведений о смежности топологических элементов. Например, при добавлении к
модели новой грани (рис. Д.1, а) мы должны выяснить отношения смежности
между гранями. Если добавленная грань создает новую оболочку с существую щими гранями, необходимо определить эту оболочку и добавить ее, изменив
оболочку 51 в структуре данных, пш<азанной на рис. Д.1, б. Чтобы можно было
определить оболочку, образуемую гранями, необходимо иметь информацию о
смежности граней.
Разработано несколько подходов к описанию немногообразной топологии, в осо бенности информации о смежности. Наиболее значительная работа была проде лана Вейлером, который ввел структуру радиальных ребер для представления
немногообразных топологий [156]. В случае многообразных твердотельных мо
делей информация о смежности хранится в виде двух типов циклического упо
рядочивания (то есть цикл -«грань - ребро» и цикл -«вершина - ребро»). Цикл <<грань - ребро• - это список ребер для каждой грани или кольца, а цикл -«вер шина - ребро» - список связанных ребер, сходящихся в заданной вершине. По смотрев на структуру полуребер и структуру крыльевых ребер в разделе 5.3.2,
можно убедиться, что эти сведения о циклах хранятся прямо или косвенно. Ме
жду тем, для представления немногобразной модели общего вида необходимо