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

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

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

502

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

ориентированная граничная поверхность региона, и она имеет то же значение,

что и на рис. Д.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, в поперечном сечении. По рис. Д.б

видно, что указатель сопряженности вхождения ребра - это указатель на вхож­

дение ребра на обратной стороне грани, а радиальный указатель указывает на

вхождение ребра, которое принадлежит вхождению грани, смежному в радиаль-

504

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

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

ставлении радиальных ребер дисковый цикл не хранится в явном виде. Однако

цикл «вершина-ребро• хранится, как и в многообразном представлении, в виде

списка вхождений вершин для каждой вершины. Хранение списка вхождений

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

(<Вершина - ребро•. Например, вершина V1 на рис. Д.S хранит список вхожде­

ний вершин vu 1 - vu2 - vu3 - vu4 - vu5 - vu6• Обратите внимание, что вхожде­

ния вершин перечислены без значительного упорядочивания. Именно поэтому две различные модели, показанные на рис. Д.З, имеют одну и ту же структуру

в представлении радиальных ребер.

,Указатели

сопряженности

вхождения

fu2 ребра fut

Радиальные

указатели

вхождения

ребра

Рис. Д.6. Поперечное сечение с указателями вхождений ребер

По рис. Д.4 можно заметить, что такие базовые топологические элементы, как

грань, кольцо, ребро и вершина, являются избыточными, поскольку вся необхо­

димая информация о них хранится в элементах их вхождений. На самом деле не

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

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

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

имеют дело с более интуитивными понятиями базовых топологических элемен­

тов, а не с топологическими вхождениями этих элементов. Это одно из несколь­

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

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

лизацией этой структуры в [156].

Д.2. Операторы для манипулирования топологией

505

 

 

 

Д.2. Операторы для манипулирования

топологией

По аналогии с операторами Эйлера, используемыми для манипулирования топо­

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

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

ных моделях [157]. Однако эти операторы не унаследовали полезных свойств

операторов Эйлера, поскольку в их основе не лежало уравнение, подобное фор­

муле Эйлера-Пуанкаре. Как вы помните, формула Эйлера-Пуанкаре устанавли­

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

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

аналогичной формулы для немногообразной модели, принимая во внимание гибкость ее топологии. Однако Маеуда с коллегами [109] обобщили формулу

Эйлера-Пуанкаре на случай немногообразной модели следующим образом:

v-e+(/-1·)-(V-Vь

где:

+Vc)=C-C,, +Cr,

(Д.1)

v - количество вершин;

е - количество ребер; f - количество граней;

т - количество колец, или отверстий, в гранях;

V - количество замкнутых объемов во всех комплексах, или просто несвяз­

,ных объектах1;

Vh - количество отверстий, или проходов через объемы;

Vc - количество полостей, или пустот, в объемах;

С - количество комплексов, или несвязных объектов; Ch- количество отверстий, или проходов через объекты; Се - количество полостей, или пустот, в объектах.

Выражение (Д.1) можно проверить на модели, изображенной на рис. Д.1, а.

В этой модели v = 6, е= 9, f = 5, т= О, V = 1, Vh =О, Vc =О, С= 1, С,,= О и Се= О. Подстановка этих значений в выражение (Д.1) дает 6- 9 +(5-О)- (1- О+ О)=

= 1 -О+ О, что удовлетворяет уравнению.

Мы можем также показать, что формула Эйлера-Пуанкаре, приведеиная в урав­

нении (5.1), является просто частным случаем уравнения (Д.1). Поскольку лю­ бой несвязвый объект имеет один объем в многообразной интерпретации, мы знаем, что v =С, v,, = ch и Vc =Се· Подставляя ЭТО в уравнение (Д.1), получаем

(Д.2)

Число оболочек s равняется сумме количества объемов V и количества пустот Ve,

поэтому (Д.2) можно переписать следующим образом:

v-e+(f -т)=2(s-V1,). (Д.З)

1Любой несвязный объект считается одним комплексом, и каждый комплекс может состо­

ять из нескольких объемов и свободных ребер. Комплекс эквивалентеи модели u прел­ стаuлешш радиальных ребер.

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, создается примитинный

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

Приложение Е

Алгоритм .де Кастильо

Алгоритм де Кастильо можно сформулировать следующим образом.

Р(и), коордииаты точки на кривой Безъе при З1lачении параметра, равиом и, рав­

иы Р; и вычисляются по следующей рекурсивиой формуле:

r (1 )Pr-1

pr-1

(Е.1)

P;=-и;

+иi+1•

где

r= 1, ..., п;

i =О, ..., п- r;

Р~ =Р;,

а иачалъиые значеиия Р;0 - это координаты задаюЩlL"С точек Р; .

Выражение (Е.1) показывает, что Р/ вычисляются по Р;0 , или что задающие точ­

ки Р/ вычисляются поР;~ и т. д., пока не будет получено Р; -значение Р(и).

Этот процесс показан на рис. Е.1 для кривой Безье порядка 3 (п = 3). Обратите

внимание, что Р~ получается путем разбиения сегмента линии Р0 Р1 на отрезки с отношением длин и: (1- и), Р11 и Р~ определяются так же. Затем находится Pg,

для чего сегмент линии Р~Pi разбивается на отрезки с тем же отношением длин,

а после этого определяются pg или Р~' путем аналогичного разбиения сегмента

PgP12 pg дает координаты точки кривой, соответствующей значению парамет­

ра и. Как вы помните, значение параметра определяет отношение, в котором раз­

биваются соответствующие сегменты линии. Рисунок Е.1 показывает также, что

исходная кривая Безье состоит из двух кривых Безье: одна определена четырьмя

задающими точками Р0 , Р01 , Р02 и Р03 , а другая - Р03 , Р12 , Р21 и Р3 . Проверку этого

утверждения можно найти в [48]. Обратите также внимание, что два новых за­

дающих многоугольника аппроксимируют оригинальную кривую Безье гораздо

более близко, чем исходный задающий многоугольник. Таким образом, алгоритм

де Кастильо может применяться многократно для аппроксимации кривой Безье сегментами прямых линий.

Процесс получения Р~' с помощью формулы (Е.1) иллюстрируется .схематически

на рис. Е.2. Любая точка Р; определяется верхним левым соседом РГ1 11 левым соседом Р;'+-11 , следовательно, новые точки, создаваемые в процессе рекурсии, об­

разуют нижний треугольник с вершиной в Р;. Эта схематическая диаграмма со­ держит доnолнительную полезную информацию. Мы показали, что кривая Безье nорядка 3 в процессе nрименения алгоритма де Кастильо может быть разделена на две кривые Безье того же nорядка. Эту идею можно расnространить на кри­

вую Безье любого порядка. На самом деле две группы точек, окруженные flу!iк­

тирными линиями, - это задающие точки двух кривых Безье, nолученных путем

Приложение Е. Алгоритм де Кастильо

509

разделения исходной кривой Безье, определенной точками Р0 , Р1 , ..., Pn. Таким образом, кривую Безье любого порядка можно разбить на множество кривых Безье

того же порядка, многократно применяя алгоритм де Кастильо, и результирующие

задающие многоугольники будут достаточно близко аппроксимировать исходную кривую. Такая аппроксимация прямолинейными сегментами может использоваться для вычисления начальных значений точек пересечения между кривыми Безье. Реализация алгоритма де Кастильо на языке С представлена в листинге Е.1.

С помощью алгоритма де Кастильо можно также вычислить производные кри­

вой Безье. Дело в том, что производмая любого порядка от кривой Безье может быть выражена уравнением кривой Безье, как отмечалось в разделе 6.4.1.

Рис. Е.1. Применение алгоритма де Кастильо

Рп---+ Р~-~ Р~-2 • •

Рис. Е.2. Схематическая иллюстрация алгоритма де Кастильо

Листинг Е.1. Реализация алгоритма де Касrильо на языке С

float decas(degгee. coeff. u)

/*

Использует алгоритм де Кастильо для вычисления одной координаты точки кривой Безье. Должна вызываться для каждой координаты

Сх. у и/или z) задающего многоугольника.

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·

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