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

Информатика в техническом университете / Информатика в техническом университете. Компьютерная графика

.pdf
Скачиваний:
83
Добавлен:
06.03.2018
Размер:
6.96 Mб
Скачать

3.1. Представление кривых и поверхностей

координат вершин. Более того, для некоторых операций невозможно использовать явное представление смежных ребер и вершин. Например, чтобы перетащить вершину и рассчитать новое положение всех смежных объектов интерактивно, требуется найти все полигоны, которые примыкают к данной вершине. Эта операция требует сравнения координатных троек одного полигона со всеми аналогичными объектами других полигонов. Более эффективным способом реализации этой операции является предварительная сортировка N координатных троек. В самом лучшем случае трудоемкость такой процедуры оценивается выражением ,/V log2 N. Кроме того, накопление ошибок вычисления может привести к некорректному вычислению координат полигонов и фатальным ошибкам.

Данный способ представления графики влечет за собой ряд проблем в процессе визуализации на экране, печати на принтере и выводе на плоттер или подобных устройствах. Поскольку ребра могут принадлежать двум полигонам, то в общем случае задачу отсечения ребер приходится решать дважды. В процессе рисования и печати объекты с кратной принадлежностью будут прорисовываться несколько раз, если не принять специальных мер. Заметную неустойчивость работы в этом смысле демонстрируют так называемые растеризаторы — устройства, переводящие векторную графику в растровую.

Список вершин

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

Каждый многоугольник задается множеством порядковых номеров вершин в списке вершин. Например четырехугольник, опирающийся на вершины с номерами 3,7,12, 35, будет представлен в виде

Р = (3,7, 12,35).

На рис. 3.2 приведен пример описания полигональной сетки в виде списка вершин. Эта простейшая сетка состоит из двух полигонов Рх и Р2. Первый из них задается вектором (1, 2, 3), второй описывается тройкой (1, 3, 4). Это представление обладает несколькими несомненными преимуществами по сравнению с явным описанием полигональных сеток в виде списка многоугольников. Во-первых, здесь достигается значительная эко-

Рис. 3.2. Представление поли- гональных сеток в виде списка вершин:

v=(vuv2, у3, У4);

Р, = (1,2,3);Р2 = (1,3,4)

175

V=(VuV2,V3,Vd = (xuyi,zi),

3. Математические модели геометрических объектов

Рис. 3.3. Представление поли- гональной сетки в виде списка ребер:

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

Список ребер

E2 = (v2, v3, Л); £з =

(Vu v4,

При задании полигональной сетки в виде спи-

ска ребер базовую информацию дает список вер-

P2);E4 = (V3,V4,P2);E5

= (Vu

шин, но многоугольники описываются ссылками

V3,Pl,P2);Pi=(EuE2,E5);

 

P2

= (£3, E4, E5)

на список ребер, в котором каждое из них упоми-

нается только один раз. В свою очередь, ребра

 

 

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

Р = (Ei, E2, ..., Е„),

где Ei — описание ребра,

t = (Vk, Vp, Ph Pt).

Здесь V — имена граничных вершин ребра; Р — наименования смежных полигонов или полигона.

На рис. 3.3 показан пример простой полигональной сетки и ее представление в виде списка ребер. Границы многоугольников задаются в виде перечисления всех смежных ребер. Это позволяет избежать проблем избыточной прорисовки и различных трудностей, которые возникают в процессе трансформации избыточных описаний. Упрощается также и визуализация полигонов с заполнением.

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

E = (Vl,V2,PuP2,...,Pn).

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

176

3.1. Представление кривых и поверхностей

ной вершине, не имеет простого решения. В любом случае для ее решения следует просмотреть все наличные ребра.

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

3.1.3. Согласованность полигональных сеток

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

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

Существует очень лаконичный программный код, предназначенный для проверки принадлежности ребер полигонам. Достаточно легко устанавливается и ликвидируется избыточность (кратное присутствие ребер и вершин на границе одного многоугольника). Разработаны эффективные процедуры для определения связности и идентификации отверстий.

3.1.4.Уравнения плоскости

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

Ах + By + Cz + D = 0.

Коэффициенты этого уравнения задают нормаль [А, В, С] к данной плоскости. Точки Р\, Р2, Рз, принадлежащие плоскости, позволяют вычислить нормаль как векторное произведение Р\Рг х Р\Ръ (или Р2Рг х РгР\ и т. д.), где Р, — радиусывекторы, соединяющие начало координат с точками плоскости.

177

3. Математические модели геометрических объектов

у

Если векторное произведение равно ну-

(х\,У\)

лю, то выбранные три точки коллинеарны,

 

 

т. е. не могут определить положение плос-

 

кости. Вместо этой выборки в принципе мо-

 

жет быть использована любая другая сово-

 

купность точек. Свободный член уравнения

 

D может быть определен после нахождения

 

нормали [А, В, С] и подстановки в искомое

 

уравнение любой из трех точек.

Рис. 3.4. Вычисление коэффициента

Если для задания полигона используется

уравнения плоскости по проекции:

более трех точек, то они могут оказаться не-

С=-((У\ +у2)(х21) +

компланарны. Это может быть вызвано ошиб-

ками вычисления или выбранным способом

 

 

генерации многоугольника. В этом случае сле-

 

дует использовать другую технику для нахо-

3

ждения плоскости, которая наилучшим обра-

 

зом приближает заданное множество точек

 

многоугольника.

Очевидно, что коэффициенты А, В, С уравнения плоскости зависят от проекций полигона на координатные плоскости (х, у), (х, z), (у, z)- Например, если полигон расположен параллельно плоскости (х, у), то А = В = О, а его проекции на координатные плоскости (х, z), (у, z) равны нулю.

Пусть известна проекция полигона на координатную плоскость (х, у). По этим данным можно определить коэффициент С уравнения плоскости:

j~t "I V Ч s ч Ч

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

На рис. 3.4 показан простой пример вычисления коэффициента уравнения плоскости по известной проекции многоугольника.

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

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

Ax+By+Cz + D

(л- — |

 

,

 

где x,y,z — координаты вершины.

178

3.2. Параметрические кубические кривые

Расстояние, рассчитанное по этой формуле, может быть положительным или отрицательным в зависимости от положения точки. Если точка принадлежит несущей плоскости, то d = 0. Если по условиям задачи требуется определить только положение точки, для этого не требуется вычислять корень и выполнять деление. Знак числителя даст точный ответ на поставленный вопрос.

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

к =

1

+ С2

 

Данное решение значительно упрощает вычисление расстояний d, поскольку знаменатель соответствующего выражения становится равным единице.

3.2. Параметрические кубические кривые

Ломаные и полигоны представляют собой важнейшие способы аппроксимации кривых и поверхностей. Чтобы получить высокую точность кусочнолинейной аппроксимации сложных кривых или поверхностей в общем случае требуется большое количество фрагментов. Это влечет необходимость хранения и обработки больших массивов граничных точек, что способно усложнить некоторые интерактивные операции с геометрическими формами. Рассмотрим более эффективный способ представления кусочно-гладких кривых. Далее это представление будет обобщенно на случай пространственных поверхностей. Основная идея состоит в том, чтобы для описания геометрии сложных объектов использовать кривые более высоких порядков, чем линейные функции. В общем случае эти кривые точнее приближают форму и требуют для обработки меньше вычислительных ресурсов.

3.2.1. Основные положения

Существуют три основных подхода к использованию аппроксимационных кривых высоких порядков. Так, можно попытаться найти точные аналитические выражения вида у =f(x) и z = g(x). Этот выбор имеет несколько очевидных недостатков. Во-первых, нельзя однозначно описать замкнутые кривые, например окружности или эллипсы. Такие объекты приходится предварительно разбивать на ряд сегментов и искать описание каждого из них. Во-вторых, полученное описание не обладает инвариантностью относительно поворотов. Чтобы задать повернутую версию кривой следует проделать значительную вычислительную работу, а в общем случае требуется получить новое разбиение кривой на сегмен-

179

3.Математическиемоделигеометрическихобъектов

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

Проблемы иного порядка влечет за собой попытка задать кривую в виде решения неявного уравнения f(x, у, z) = 0. Во-первых, выбранное уравнение способно продуцировать несколько решений, в числе которых могут содержаться и паразитные. Во-вторых, существуют кривые, которые не имеют точного аналитического описания или описываются системами уравнений. Простейший пример такого рода — полуокружность. В-третьих, серьезные проблемы возникают в процессе объединения неявно заданных фрагментов кривых. Часто в точках их сочленения невозможно определить точную величину тангенса угла наклона, значение которого используется в процессе решения многих геометрических задач.

Параметрическое задание кривой в виде х = x(t), у = y(t), z = z(f) преодолевает недостатки функционального и неявного способов описания кривых. Вместо кусочно-линейных кривых, рассмотренных в предыдущем разделе, здесь будут использоваться кусочно-полиномиальные кривые. Более точно, если сложная кривая разбивается на несколько сегментов, каждый из которых описывается тремя функциями x(t), y(t), z(t), являющимися кубическими полиномами от параметра t. В современной практике геометрических вычислений кубические полиномы используются чаще всего. Полиномы низших порядков не обеспечивают достаточной точности аппроксимации кривых, а многочлены более высоких порядков порождают осцилляции формы, что приводит к росту вычислительных ресурсов. Никакие другие полиномы невысокой степени не дают возможности выполнить точную интерполяцию криволинейных фрагментов по значениям концевых точек и их производных. Кроме того, параметрические кубические кривые — это кривые самого низкого порядка, которые могут занимать произвольное положение (не лежать на плоскости) в трехмерном пространстве. Действительно, положение кривой, описываемой полиномом второй степени, задается тремя точками, а три точки всегда определяют плоскость.

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

Кубический полином, описывающий криволинейный сегмент, можно представить в следующем виде:

Q(t) = [x(t), y(t), z(t)],

где

x(t) = axt3 + bxt2 + cxt + dx;

= a/+bzt2+czt +

180

3.2. Параметрические кубические кривые

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

Введем вектор-строку Т = [t3, t2, t, 1]. Используя это обозначение, исходное выражение можно записать в более компактном матричном виде:

= [x(t),y(t),z(t)] = TxC,

где

ах a az

С=

\ К

 

 

СУ Сг

Производная от функции Q(t) называется касательным или тангенциальным вектором параметрической кривой. Тангенциальный вектор легко найти прямым дифференцированием выражения Q(t):

1

 

d_

 

-,2t,t, 1, 0]xC =

 

 

 

dt

dt

~dt

dt

dt

= [3axt2 +2bxt+cx, 3ayt2 +2byt+cy, 3azt2 +2bzt+cz].

На рис. 3.5 показан пример двух соединенных сегментов параметрической кубической кривой и их полиномы. Пример демонстрирует возможность параметрическим способом задавать многозначные кривые, т. е. такие зависимости, которые могут принимать несколько значений при одном значении аргумента.

Если два сегмента V\ и V2 параметрической кривой соединены, то говорят, что кривая принадлежит в данной точке к классу геометрической непрерывности G0. Если совпадают направления касательных векторов (необязательно зна-

Рис. 3.5. Координаты параметрической кривой и представляющие их полиномы

181

3. Математические модели геометрических объектов

Соединительная

чения), то кривая в точке соединения принад-

точка

лежит классу G1. Длины касательных векто-

 

ров таких сегментов связаны прямо пропор-

 

циональным соотношением T(VX) = kT(V2), где

 

к — коэффициент пропорциональности. В

 

системах автоматизированного проектирова-

 

ния во многих операциях используются кри-

 

вые последнего класса, поскольку они вос-

*(')

принимаются наблюдателем как гладкие.

Рис. 3.6. Соединение фрагментов

Если в точке сочленения сегментов сов-

кривых трех различных типов

падают значения и направления касательных

 

векторов, то такая кривая относится к классу

С1 . Наконец, равенство производных п порядка дает основания отнести кривую к классу С". Иногда непрерывность типа С, i = 1,2, ... называют параметрической непрерывностью.

На рис. 3.6 показаны примеры соединений фрагментов кривых. Кусок кривой S соединяется с тремя кривыми Со, Сь С2 (нижний индекс обозначает тип соединения).

Очевиден физический смысл касательного вектора —Q(t). Его значение dt

равно скорости изменения кривой относительно параметра t в данной точке. Вторая производная от Q(t) по параметру t равна ускорению. Если, к примеру, камера движется вдоль параметрической кубической кривой и делает снимки через равные промежутки времени, то касательный вектор задает скорость перемещения камеры вдоль кривой. В точках сочленения фрагментов скорость движения камеры и ее ускорение не должны резко изменяться. В противном случае возможны заметные нарушения плавности съемки. На примере, показанном на рис. 3.6, кривая С2 обеспечивает намного более высокую плавность и на значительном удалении от точки соединения.

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

Существует важный частный случай, когда выполнимость условия принадлежности классу С1 не влечет за собой принадлежность кривой классу G1 . Такая ситуация может возникнуть, когда значения касательного вектора равны нулю в точке сочленения для обоих смежных сегментов параметрической кривой. В этом случае значения касательного вектора будут равны, но его направления могут различаться (рис. 3.7). Если представить себе движение камеры вдоль этой кривой, то в точке сочленения скорость ее перемещения будет равна нулю, после перехода на смежный фрагмент она изменит направление движения.

182

3.2. Параметрические кубические кривые

Графики параметрических кривых за-

у^

метно отличаются от графиков обычных

 

функций, где независимый аргумент откла-

 

дывается по одной оси, а зависимый — по

 

другой. Аргумент t параметрических кривых

 

не представлен на их графиках совсем. Это

о

значит, в частности, что невозможно опреде-

Рис. 3.7. Пример кривой, которая

лить касательный вектор

непосредственно

w

F

^

принадлежит классу С, но не вхо-

по графику параметрической кривой.

д и т в к л а с с Q1 .

Проиллюстрируем это утверждение про-

р _ т о ч к а с о ч л е н е н и я ф р а г м е н т о в ( з а с е ч _

стым примером. Пусть имеется параметриче-

к а м и обозначены расстояния, пройденные

екая кривая 8(0, 0 < t < 1, а ее касательный

объектом за равные промежутки)

вектор равен нулю при t = 0. Предположим,

что ц(0 = 8(20, 0 < t < 1/2. В этом случае графики параметрических функций ц(0 и 8(0 совпадают. С другой стороны, ц'(0) = 28'(0). Это значит, две кривые имеют одинаковые графики, но различные касательные векторы. Поэтому принято накладывать на кривые требование принадлежности к классу G1. Для гладкого сочленения двух фрагментов часто достаточно совпадения направления касательных векторов, а не их полного равенства.

Как следует из определения, для нахождения кубического полинома (формула (3.1)) требуется установить значения его четырех коэффициентов. Для нахождения неизвестных следует наложить на кривую четыре дополнительных условия. Такими условиями служат значения кубического сегмента на концевых точках, значения касательного вектора и условия связности между соседними сегментами.

Рассмотрим три важнейших типа кривых — многочлены Эрмита, кривые Безье и сплайны различного рода. Первые задаются собственными значениями и величинами касательного вектора, принимаемыми на концевых точках. Для определения кривой Безье требуется задать значения кривой на концевых точках и два промежуточных значения, которые используются для пересчета касательного вектора. Для определения сплайнов должны быть известны значения четырех контрольных точек и, кроме того, могут накладываться различные дополнительные условия, например степень гладкости или поведение кривой вблизи точки сочленения. Важнейшими типами сплайнов, нашедшими широкое применение в машинной графике, являются однородные (uniform) и неоднородные (nonuniform) В-сплайны.

Напомним, что параметрическая кубическая кривая описывается уравнением

Q(t)=TxC,

где <2(0 = МО, j(0, z(t)], T = [t3, t2, t, 1]; С — прямоугольная матрица коэффициентов

183

3. Математические модели геометрических объектов

ах

ау

az

С= br

b,

h

d, d., d

Представим матрицу С в виде С = MG, где матрица М — базовая матрица четвертого порядка, a G — вектор-столбец геометрических ограничений, который часто называют геометрическим вектором. Координаты геометрического вектора формируются на основе дополнительной информации о поведении кривой. Это могут быть значения на концевых точках, величины касательного вектора и другие ограничения, определяющие поведение кривой. Обозначим через Gx вектор-столбец, содержащий только х-компоненты геометрического вектора. Аналогичное толкование будут иметь обозначения Gy и Gz. По матрицам М и G строится классификация различных типов кривых.

Запишем выражение параметрической кривой в развернутом виде:

 

mn

ml2

mn

mu

 

 

 

Q{t)=[x(t\ y(t), z(t)}=[t\ t2, t,

m2\

m00

m^.

m2

4

X

(3.2)

 

m31

 

 

m3

4

 

 

 

m4X

m4

m;43

 

 

 

G4_

Найдем выражение для координаты x(t)\

 

 

x{t)

= TxMxGx

=

 

 

= (timn+

t2m2l+

tm3l+

m4l)gu+(t3ml2+

t2m22 +

m42)g2x

(3.3)

(t3ml3+

t2m23+

tm33+

m43)g3x+(t3mH+

t2m24+

tm34+ m44)g4x.

 

Из уравнения (3.3) следует, что кривая представляет собой взвешенную сумму элементов геометрической матрицы. Такой вес имеют кубические полиномы по всем трем геометрическим координатам. Совокупность весовых коэффициентов иногда называют стыковочной функцией, или функцией сопряжения (blending function). Стыковочные функции В задаются простым матричным соотношением

В=ТхМ.

Способы вычисления матрицы М зависят от специфики параметрических кривых.

3.2.2. Кривые Эрмита

Свое название кривые получили от имени французского математика Шарля Эрмита, который подробно исследовал их свойства. Это частный случай кубиче-

184