книги / Основы САПР. CAD CAM CAE
.pdf502 |
Приложение д. Структура данных и топологические операторы |
ориентированная граничная поверхность региона, и она имеет то же значение,
что и на рис. Д.1, б. Такие топологические сущности, как грань, кольцо, ребро и вершина, имеют тот же смысл, что и в многообразном представлении.
1-г-::-----.1--~
lt_:г=----L..-_--..
Рис. Д.4. Топологические элементы в представлении радиальных ребер
Рисунок Д.4 показывает, что связи между базовыми топологическими сущностя
ми задаются косвенно через четыре дополнительных топологических элемента:
вхождение грани, вхождение кольца, вхождение ребра и вхождение вершины. Это аналогично введению полуребер для косвенного задания связей между коль
цами, ребрами и вершинами (см. раздел 5.3.2). Вхождение гpauu (jace-use)- это
один из двух вариантов использования грани, или одна из двух ее сторон. Таким
образом, оболочка, окружающая внешнюю или внутренню область объема, опре
деляется набором связанных вхождений граней. Вхождение грани, или исполь
зование грани оболочкой, имеет определенную ориентацию по отношению к гео
метрии грани, и эта ориентация противоположна ориентации сопряженного ему
вхождения данной грани. Каждое из двух вхождений грани становится элемен
том каждой из двух оболочек, обращенных к данной грани. В случае сотовой структуры без замкнутого объема, как на рис. Д.S, эти сопряженные вхождения грани принадлежат одной и той же оболочке. В данном примере список вхожде
ний граней fuг fu 2- fu5- fu 6- fu 4- fu 3 образует оболочку. Вхождение грани ог
раничено одним или несколькими вхождениями кольца, так как грань окружена
кольцами. Вхождеиuе кольца (loop-use) -это один из вариантов использования
кольца, связанный с одним из двух вариантов использования грани, и оно имеет
ориентацию по отношению к соответствующему вхождению грани, что опреде
ляет ее внутреннюю или внешнюю границу (см. рис. Д.S). Вхождение кольца оп ределяется списком вхождений ребер. Вхождение ребра (edge-use)- это гранич ный сегмент кривой на вхождении кольца, принадлежащего вхождению грани, н оно представляет использование ребра данным вхождением кольца или, в случае
Д.l. Структура данных |
503 |
каркасного ребра, вершинами его конечных точек. Ориентация вхождения ребра
определяется вхождением начальной вершины, как и для полуребер. Вхождеиие
вершииы ( vertex use) - это структура, представляющая смежное использование
вершины ребром в качестве конечной точки, кольцом в случае одновершинного
кольца или оболочкой в случае одновершинной оболочки.
Рис. Д.5. Использование дополнительных топологических элементов для указания
смежности
Некоторые вырожденвые ситуации указаны пунктирными связями на рис. Д.4.
Во-первых, прямое соединение оболочки и списка вхождений ребра допускает
существование оболочки, представляющей собой каркас. Аналогичным образом,
соединение оболочки и вхождения вершины допускает существование оболочки,
состоящей из одной вершины. Изолированная точка в немногообразном пред ставлении хранится как независимая оболочка. Кроме того, прямое соединение
вхо~дения кольца и вхождения вершины позволяет хранить изолированную
точку, находящуюся на грани, в виде кольца отверстия этой грани, что дает воз
можность представить свободное ребро, исходящее из пекоторой точки на грани. Немногообразные модели смешанной размерности можно обрабатывать, интер
претируя элементы меньшей размерности как вырожденвые вхождения г~;>аней
и храня эти вхождения в списке вместе с другими вхождениями граней, принад
лежащими той же оболочке.
Теперь поясним, как в структуре радиальных ребер представляются кольцевой и
радиальный циклы. Прежде всего, кольцевой цикл задается просто списком вхо
ждений ребер для каждого вхождения кольца. Например, вхождение кольца lu 1
на рис. Д.5 несет в себе список вхождениj:i ребер eu 1 - eu7 - eu8 - eu9. Для зада ния радиального цикла каждое вхождение ребра имеет два указателя, указатель
сопряженности и радиальный указатель (рис. Д.б). На рис. Д.б изображен вид
сотовой структуры, представленной на рис. Д.5, в поперечном сечении. По рис. Д.б
видно, что указатель сопряженности вхождения ребра - это указатель на вхож
дение ребра на обратной стороне грани, а радиальный указатель указывает на
вхождение ребра, которое принадлежит вхождению грани, смежному в радиаль-
506 Приложение д. СтрУК'JУра данных и топологические операторы
Следовательно, уравнение (Д.3) - это то же самое, что и уравнение (5.1), по
скольку r и Vh имеют такой же смысл, что h и рвуравнении (5.1).
Когда связь меЖду топологическими элементами в немногообразной модели установлена, как в уравнении (Д.1), мы можем определить минимальный набор
операторов, необходимых для манипулирования ими. Поскольку формула (Д.1)
определяет плоскость в 10-мерном пространстве с координатами (v, е, f, r, V, Vh, V,, С, Ch, Се), имеется 9 независимых базисных векторов. Таким образом, для описания любого объекта в немногообразной топологии достаточно иметь 9 опе
раторов и соответствующих им обратных операторов. Один из возможных мини мальных наборов, определенный в [109], иллюстрирует рис. Д.7. Хотя девяти операторов достаточно для создания любого объекта, на практике можно до
стичь большей эффективности, если добавить еще несколько операторов. Как вы
помните, в разделе 5.3.3 мы ввели семь операторов Эйлера, хотя для создания
многообразной модели достаточно пяти.
mvC(kvC) |
Создать (уничтожить) вершину, комплекс |
~~~~ • |
|
|
/1"-. |
mev(kev) |
Создать (уничтожить) ребро, вершину |
~---- |
|
|
|||
|
|
|
|
meCh(keCh) |
Создать (уничтожить) ребро, |
(~LJ. |
|
отверстие комплекса |
|||
|
|||
mfkCh(kfmCh) |
Создать (уничтожить) грань, |
LJ.~LJ. |
|
|
|||
отверстие комплекса |
|
||
|
|
||
|
|
|
|
mfCc(kfCc) |
Создать (уничтожить) грань, |
в~в |
|
nолость комплекса |
|||
|
|||
mvr(kvr) |
Создать (уничтожить) вершину, кольцо |
LJ~LI7 |
|
|
|
|
|
mVkCc(kVmCc) |
Создать (уничтожить) объем, |
в~в |
|
полостькомплекса |
|||
|
|||
mvVc(kvVc) |
Создать (уничтожить) вершину, |
в~61? |
|
полость объема |
|||
|
|||
meVh(keVh) |
Создать(уничтожить)ребро, |
··'··- |
|
отверстие объема |
|||
|
~~~/ |
Рис. Д.7. Минимальный набор оnераторов
Точно так же, как команды моделирования высокого уровня реализованы в сис
темах твердотельного моделирования с помощью операторов Эйлера, команды
немногообразных систем моделирования реализуются путем последовательного выполнения соответствующих операторов. На рис. Д.8 показано, как с помощью
предложенных операторов, перечисленных на рис. Д.7, создается примитинный
параллелепипед. Все прочие команды моделирования реализованы аналогично. На самом деле команды, доступные в немногообразных системах моделирова ния. выглядят точно так же, как команды обычных системах твердотельного мо-
510 |
|
|
|
|
|
|
|
Приложение Е. Алгоритм де Кастильо |
|
Вход: |
|
|
|
|
|
|
|
|
|
degree: стеnень кривой Безье |
|
|
|||||||
coeff: |
|
нассив коэффициентов кривой |
|
|
|||||
u: |
|
|
значение nараметра |
|
|
|
|||
Выход: |
|
|
|
|
|
|
|
|
|
значение |
координаты |
|
|
|
|
|
|||
*/ |
degree: |
|
|
|
|
|
|
||
int |
|
|
|
|
|
|
|||
fl oat |
coeff[ J; |
|
|
|
|
|
|
||
float |
u; |
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
int |
г. |
i; |
|
|
|
|
|
|
|
float |
ul: |
|
/* |
|
|
|
|
||
float |
coeffa[ЗOJ; |
доnолнительный |
нассив |
||||||
|
|
|
|
измените |
размерность. |
||||
ul |
= 1. О |
|
если его |
недостаточно */ |
|||||
u; |
i++) |
|
|
|
|
||||
for(i=O; |
i<=degree; |
|
|
|
|
||||
|
coeffa[i] |
= coeff[i]; |
/*сохраняем |
входной нассив */ |
|||||
for(r=l; |
r<=degree; |
r++) |
|
|
|
|
|||
|
for(i=O; |
i<=degree-r; |
i++) |
|
|
||||
|
|
{ |
coeffa[i] = |
ul |
* coeffa[i] + u * coeffa[i+l]; |
||||
|
|
|
}
return(coeffa[OJ);
Приложение Ж
Вычисление В-сплайновой кривой
по методу Кокса-де Бура
Опишем вычисление В-сплайновой кривой по методу Кокса-де Бура. Для этого
мы вычислим координаты В-сплайновой кривой для параметра и в диапазоне t 1 :$;и:$; t1+!· Когда и находится 13 этом диапазоне, достаточно рассмотреть только
N1•1• Распространяя эффект N1.1 (см. рис. 6.5), мы можем заключить, что только
функции сопряжения Nl-(k-!J.I" ... , N 1,k моrут иметь иенулевые значения. Поэтому
выражение для Р(и) можно изменить следующим образом:
|
|
|
n |
|
|
|
|
1 |
|
|
|
|
|
|
Р(и) = LP;N;,k(и) = |
LP;N;.k(и). |
|
|
(Ж.1) |
||||||||
|
|
|
i=O |
|
|
|
i=l-k+! |
|
|
|
|
|
|
Подставляя уравнение (6.32) в ура13нение (Ж.1), получаем: |
|
|
|
||||||||||
Р(и)=. ±Р;[(и-t; )~;.k-1 |
+ (ti+k -и~Ni+l,k-1] = |
|
|
|
|||||||||
t=l-k+l |
|
ti+k-1 |
t; |
|
|
ti+k |
ti+l |
|
|
|
|
||
1 |
и - t . |
|
|
+ |
1+1 |
ti+k-1 |
-и |
= |
|
|
|||
= L |
|
1 |
P;Ni,k-1 |
L |
|
|
|
pj-\Nj.k-1 |
|
|
|||
i=l-k+l |
ti+k-1 - |
t; |
|
|
|
j=l-k+2 tj+k-1 |
- tj |
|
|
|
|||
1 |
и-t; |
|
|
+ |
1+1 |
( |
1- |
и-tj ) |
|
= |
|
||
= L |
|
|
P;Ni,k-1 |
L |
|
|
pj-!Nj,k-1 |
(Ж.2) |
|||||
i=l-k+2 ti+k-1 - |
t; |
|
|
j=l-k+2 |
|
tj+k-1 - tj |
|
|
|
||||
= ± [ и-t; |
Р; +(1- |
и-t; |
)Pн]Ni.k-t = |
|
|
|
|||||||
i=l-k+2 |
ti+k-1 |
- t; |
|
|
ti+k-1 |
- ti |
|
|
|
|
|
||
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
= L:P;' Ni.k-t • |
|
|
|
|
|
|
|
|
|
|
|
||
i=l-k+ 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
где Р;' определяется следующим образом': |
|
и-t; |
)рi-1' |
|
|
(Ж.3) |
|||||||
|
;1 |
- |
и-t; |
|
р;+ (t- |
|
|
||||||
|
р |
_ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ti+k-1 - |
t; |
|
|
|
ti+k-1 - |
t; |
|
|
|
Таким образом, Р;1 можно интерпретировать как внутреннюю точку разбиения
сегмента линии Р;Рн , аналогично алгоритму де Кастильо.
Теперь N;,k-! выражается через комбинацию N;,~t-2 и N;+t.k- 2 с помощью форму лы (6.32), и это выражение подста13ляется 13 уравнение (Ж.2) вместо N;,k-!· После
этого, используя процесс, аналогичный тому, который применялея при выводе
уравнения (Ж.2), мы можем получить следующее соотношение:
1Во второй строке (Ж.2) делается nодстановкаj = i + 1, а в третьей строке диаnазон сумми
рования сужается, nоскольку M-k+l.k-1 и ~Vj+l.k-t равны нулю в интервале t, и tl+t·