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

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

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

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

трольными точками. Каждая кривая состоит из сегментов Q^-Qi- Сегменты QA, <2S и Qn опираются на кратные узлы и имеют нулевую длину.

3.2.6.Рациональная форма кривых и сплайнов

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

W(t) W(t) W(t)

где X(t), Y(t), Z{t)m W(t) — кубические полиномиальные кривые, контроль-

ные точки которых заданы в однородных координатах.

Кривую можно представить как четверку Q(t)=[X(t), Y(t), Z{t), W(t)], существующую в некотором однородном пространстве. Чтобы задать кривую в трехмерном пространстве, достаточно каждую координату этого вектора поделить на W(t). Очевидно, что любая нерациональная кривая может быть представлена в рациональном виде простым добавлением W(t) = 1 в качестве четвертого элемента. В частности, в таком виде можно представить кривые Безье и Эрмита и многие другие типы кривых. Неоднородные В-сплайны, приведенные к рациональной форме, в литературе по машинной графике называются NURBSкривые (сокращение от nonuniform rational B-spline).

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

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

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

205

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

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

3.2.7. Разбиение кривых

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

Существуют два основных подхода для решения этой задачи:

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

увеличение числа контрольных точек путем разбиения сегментов кривых. Пусть, например, имеется сегмент кривой Безье с четырьмя контрольными точками. Если разделить его на две части, то число контрольных точек возрастет до семи, что улучшит управляемость кривой. Для неоднородных В-сплайнов аналогичный процесс называется подразбиением (refinement) и заключается в добавлении произвольного числа новых контрольных точек. Очень часто эту операцию приходится выполнять в процессе визуализации кривых и поверхностей.

Рассмотрим постановку задачи. Дана кривая Безье Q(t), положение которой

определяется точками Рь Р2, Рз и Р4- Требуется найти левую кривую, задаваемую точками L\, Li, L3 и L4, которая совпадает с исходной кривой на полуинтервале О < t < 1/2. По тем же исходным данным необходимо определить правую кривую, которая совпадает с заданной кривой на полуинтервале 1/2 < t < 1 с точками /?i, R2, /?з и R4.

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

Р\Р2 и Р2Рз в отношении

 

. Далее необходимо найти положение линии ///?3,

 

которая делит отрезки Р2Рз и РзР* В ТОЙ же пропорции. После этого следует про-

206

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

вести линию Lj,R2, разбивающую отрезки L2H и HRT, В заданном соотношении. В результате на кривой Q(t) будет получена точка L4 = R\, которая, в свою очередь, разобьет отрезок

t

L3/?2 в отношении

 

.

 

1-г Все вычисления существенно упрощают-

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

Рис. 3.25. Схема разбиения кривой Безье при t - 1/2

Р12

Н=-

 

 

 

2

 

г

R2-

H+R,

LA-RX

'

2

 

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

левую GB и правую GB части геометрического

вектора разделенной кривой

Безье. Они описываются следующими соотношениями:

 

8

0

0

0"

Pi'

G»—DRxGn——

4

4

0

0

Pi

2

4

2

0

р3

 

 

1

3

3

1

Л.

}I=DRBXGE

0

2

4

2

 

0

0

4

4

 

 

 

 

0

0

0

8

Л.

Каждая новая контрольная точка L, (/?,•) кривой Безье представляет собой взвешенную сумму Р(, причем каждая координата принимает только неотрицательные значения и их сумма равна единице. Таким образом, части кривой Безье лежат внутри выпуклой оболочки, опирающейся на контрольные точки кривой. Это значит, что новые контрольные точки не могут находиться далеко от кривой. В действительности они лежат ближе к ней, чем ее оригинальные контрольные точки. Это свойство сокращения осцилляции справедливо для любого сплайна, обладающего выпуклой оболочкой. Из очевидной симметрии геомет-

т

р

рических построений следует симметрия матриц DB

и DB.

207

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

Разделение кривой Безье при / = 1/2 существенно упрощает саму процедуру и все сопутствующие вычисления. Игогда требуется решить эту задачу в общем виде, т. е. разделить кривую в произвольной точке, положение которой задается пользователем. Процедура разбиения в основных своих операциях совпадает с описанной за исключением пропорции деления сторон, которая в общем случае

t

равна

Соответствующие матрицы задающие разделение В-сплайна, в общем случае имеют вид

 

4

0

0" ~Pi-i

 

6

1

0

Pi-2

 

4

4

0

Pi-l

 

1

6

1

A _

 

6

1

0" ~Р,-з~

=DB XGD

4

4

0

Pi-2

= -

 

 

 

 

1

6

1

Pi-X

 

0 0

4

4_ A -

' Если внимательно посмотреть на эти матрицы, то очевидно, что четыре контрольные точки GB и новые контрольные точки находятся в конфликте. Изменения старых или новых точек приводят к нарушению связности кривой. Проблема решается использованием неоднородных В-сплайнов.

Разделение неоднородного В-сплайна — непростая задача, которая не описывается матричными зависимостями, заданными в явном виде. Эта процедура может быть задана рекурсивно. Ее основной целью является введение нового узла в последовательность узлов сплайна.

Пусть неоднородный В-сплайн задан последовательностью контрольных точек Ро, Р\, ..., Р„. Будем считать, что известно значение параметра t - t', задающего положение нового узла. Требуется найти новую последовательность контрольных точек Qo, <2ь •••, Qn+\, задающую положение уточненной кривой. Без ограничения общности можно считать, что tt• < t < tj+\. Новые контрольные точки кривой можно найти по следующим рекуррентным зависимостям:

(3.17)

где а, задается соотношениями

208

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

а£-=1,

К / < J —3;

 

а,- =

~ '" , j-2<i^j;

(3.18)

а,.=0,

; + 1<1<и.

 

Рассмотрим работу описанного способа на примере кривой, заданной последовательностью узлов (0, 0, 0, 0, 1, 1, 1, 1). Координаты х вектора контрольных точек записываются в виде (5, 8, 9, 6), положение новой точки задается параметром t - 0,5 (п = 3, j - 3). Непосредственные вычисления по формулам (3.18) позволяют найти значения коэффициентов а,; их удобно записать в виде вектора (0,5; 0,5; 0,5). Применяя уравнения (3.17), найдем координаты х новых контрольных точек Qt. Они равны (5,0; 6,5; 8,5; 7,5; 6,0).

Добавление нового узла влечет за собой замену двух старых контрольных точек сплайна на три новые. После операции подразбиения сплайна сегменты, которые примыкают к разделяемому сегменту, определяются в терминах новых контрольных точек. Более громоздкие последствия влечет за собой процедура разбиения равномерных сплайнов. Во-первых, четыре старые контрольные точки заменяются пятью новыми. Во-вторых, сегменты, примыкающие к обрабатываемому сегменту, как и ранее, задаются старыми контрольными точками, а новые сегменты зависят от собственного набора точек.

3.2.8. Преобразование представлений

Решение многих прикладных задач требует преобразования формы представления кривых. Иными словами, задана кривая, представленная геометрическим вектором G\ и базисной матрицей Мь Требуется найти геометрический вектор G2 и базисную матрицу М2, не меняющие кривую, а значит, удовлетворяющие соотношению G\MX = G2M2. Решим это простое матричное уравнение относительно G2:

G2=M2xxMxxGx=Ml2xG{.

Матрица МХ2 =M2xxMx выполняет преобразование известного геометрического вектора G\ в неизвестный вектор G2. Преобразование В-сплайнов в кривые Безье выполняется при помощи матрицы

 

 

 

1

4

1

0

Мв

=М1ххМв

= -

0

4

2

0

 

 

 

0

2

4

0

 

 

 

0

1

4

1

209

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

аобратное преобразование задается матрицей

 

 

'6

-7

2

0

 

_,

0

2

-1

0

вл1, ~

BSX

В- 0

-1 2

0

 

 

0

2

-7

6

Неоднородные В-сплайны не описываются матричными соотношениями в явной форме, но существует косвенный путь преобразования такого рода объектов. Напомним, что В-сплайн с последовательностью узлов (0, 0, 0, 0, 1, 1, 1, 1) представляет собой кривую Безье. Чтобы перевести неоднородный сплайн в иную форму, достаточно предварительно превратить его в кривую Безье, добавив необходимое количество дополнительных узлов. Трансформация кривых Безье в другие формы выполняется посредством известных матричных преобразований.

3.2.9. Рисование кривых

Существуют два основных способа рисования параметрических кривых:

пошаговая визуализация, когда значения координат x(t), y(i) и z(t) вычисляются при последовательно возрастающих значениях параметра t;

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

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

Рассмотрим более эффективный способ определения кубических полиномов, основанный на вычислениях правых разностей. Правая разность функции f(t) задается соотношением

 

, 5>0.

Перепишем это уравнение в виде

) = f(t)+Af(t), а затем в более эко-

номной итеративной форме

(3.19)

где функция / вычисляется в точках, равноотстоящих друг от друга на одинаковый интервал 8. Поэтому tn = пд и /„ =f(tn).

Для полинома третьей степени f(t)=at +bt~ +ct + d=TxC правая разность запишется в следующем виде:

210

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

Af(t)=a(t + 5)3 +b(t + b)2+c(t + b) + d-{at3 +bt2 +ct + d) =

=3at28+t(3a82 + 2bd)+ad3

82

b

Из уравнения (3.20) следует, что правая разность функции ДО представляет собой полином второй степени. Это не очень оптимистический вывод, поскольку данная формула является частью уравнения (3.19), которое требует еще и операции сложения. Попробуем упростить вычисления. Из уравнения (3.19) можно получить

(3.21)

Используя выражения (3.20) и (3.21), после приведения подобных имеем

3 +2ЬЪ2,

т. е. уравнение первой степени относительно параметра t. Запишем уравнение (3.21) в индексной форме:

A2fn=Afn+l-Afn.

Разрешим его относительно Д/л и заменим п на п - 1:

 

2 Л-,-

(3-22)

Теперь, чтобы по уравнению (3.19) вычислить слагаемое

Д/„, подсчитаем

Д2/л_, и добавим результат к Д / ^ . Поскольку Д2/„_] является линейной функцией относительно t, предложенная схема намного менее трудоемка по сравнению с непосредственным вычислением Д/л по уравнению (3.20).

Попробуем еще упростить процедуру вычислений, для этого найдем

 

Д3 /(О = А(А2 /(О)=Д2 /(? + 6)-Д2 /(О=6а63 .

(3.23)

Эта правая разность представляет собой постоянную величину. Перепишем уравнение (3.23) в индексной форме и подставим в это выражение найденное

ранее значение для Д fn:

Еще раз перепишем это уравнение, заменив в нем п на п - 2,

Полученный результат можно использовать для быстрого вычисления Д/л по формуле (3.22).

211

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

Чтобы организовать вычисления на интервале от п = О до п8 = 1, найдем начальные условия по формулам (3.20)-(3.23) при t = 0. Все необходимые расчеты выполняются прямым использованием указанных формул. Результат запишем в матричной форме:

О

О

О

1

а

 

А/о

б3

б2

б

О

Ъ

(3.24)

А2

653

3

О

О X

с

А3 /о.

653

О

О

О

d

 

Перепишем это выражение в более компактной форме, обозначив квадратную матрицу через £(5), а правый вектор-столбец — через С:

D = E(8)xC.

Для решения поставленной задачи требуется найти три функции x(t), y(t), z(t); для этого запишем соответствующие начальные условия в следующем виде:

Dx=E(5)xCx;

 

Dy=E(5)xCy;

(3.25)

D=E(5)xC7.

 

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

void DrawCurveFwdDif ( int n,

/* Число шагов, необходимых для рисования кривой */ double х, double Дх, double Д2х, double ДЗх,

/* Начальные значения для x(t), найденные при t = 0 по формуле (3.25) */

double у, double Ду, double Д2у, double ДЗу,

/* Начальные значения для y(t) , найденные при t = 0 по формуле (3.25) */

double z, double Az, double Д2г. double ДЗг

/* Начальные значения для z(t) , найденные при t = 0 по формуле (3.25) */

/* Для расчета Dx, Dy, Dz используется шаг 5 = 1/п */

int i;

MoveAbs3 (х, у, z) ;

212

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

/* Перейти к началу кривой */ for(r=0; i < n; i++) { х+=ДХ; Дх+=Л2х; Л2х+=ДЗХ; у+=Ау; ЛУ+=Л2У; Л2У+=ДЗУ; z+=Z\z; Az+=A2z; Д22+=ДЗг; LineAbs(x,у,z)

/* Рисование короткого сегмента линии */

}

} /* Конец процедуры DrawCurveFwdDif */

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

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

void DrawCurveRecSub (curve, e)

{

if (Straight (curve, e))

/* Проверка принадлежности контрольных точек заданной окрестности Е линии */

DrawLine (curve); else {

SubdivideCurve (curve, leftCurve, rightCurve); DrawCurveRecSub (leftCurve, e); DrawCurveRecSub (rightCurve, £);

}

/* Конец процедуры DrawCurveRecSub */

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

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

213

 

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

 

 

 

большее из расстояний d2 и с/3 становится

 

 

меньше, чем заданная окрестность 8, то кривая

 

 

с достаточной точностью может быть заменена

 

 

прямым отрезком, опирающимся на конечные

 

 

точки Р\ и РА. Для кривых Безье конечными

 

 

точками служат первая и последняя контроль-

 

 

ные точки Р\ и Р4-

 

 

 

 

 

Практика показывает, что преобразование

„ ., Л1- г,

~

кривых различного типа в кривые Безье дает

Рис. 3.26. Проверка линейности

г

г

г

«

конвой Безье

возможность применить эффективную проце-

 

 

дуру визуализации, основанную на рекурсив-

 

 

ном подразбиении. Эта схема позволяет избе-

жать лишних вычислений, неизбежных при использовании алгоритма, основанного на вычислении правых разностей. Чтобы получить приемлемую точность фрагментов с высокой кривизной, шаг 5, с которым вычисляются правые разности, должен иметь небольшое значение. Для сегментов с формой, приближенной к прямой, величина шага может быть увеличена. С другой стороны, алгоритм рекурсивного подразбиения расходует дополнительные вычислительные ресурсы на проверку линейности фрагментов. Неплохой альтернативой является применение рекурсивного алгоритма с фиксированной глубиной, что позволяет избежать проверки линейности.

3.2.10. Сравнение кубических кривых

Свойства параметрических кривых могут значительно отличаться друг от друга. Восприимчивость к интерактивным изменениям, гладкость в точках сочленения, скорость визуализации, трудоемкость вычислений — это далеко неполный перечень критериев, которые влияют на успешность применения типа кривых в прикладных областях и задачах. В большинстве случаев вопрос о выборе оптимальной формы представления кривых не стоит. Ранее было показано, что многие математические модели кривых преобразуются одна в другую без значительных потерь и искажений. Например, неоднородные В-сплайны могут быть использованы для внутреннего представления кривых, тогда как пользователю удобнее работать с узлами и касательными, представленными в форме Безье или Эрмита. Многие популярные графические редакторы поддерживают пользовательский интерфейс кривых Эрмита, которые внутри редактора обрабатываются как кривые Безье, описанные на языке PostScript. Развитые CAD-системы характеризуются еще большей гибкостью. Они оставляют на усмотрение пользователя выбор одной из форм представления кривых, которыми могут быть кривые Безье, Эрмита, однородные и неоднородные В-сплайны. В большинстве случаев для обработки внутри системы выбираются неоднородные В-сплайны, поскольку они обладают наибольшейобщностью исамойвысокойгибкостью.>•.-. »•.

214 '