Алгоритмы компьютерной графики Пешков Анатолий Тимофеевич, БГУИР. 1 отображение просранства пользователя и машинного носителя 4
Скачать 1.86 Mb.
|
2.3 Кривые Безье.Кривые Безье применяется для приближенного решения задачи отображения кривых, задаваемого с помощью множества точек. При этом вместо «жесткого» задания точек, определяющих формируемую кривую, в интерактивном режиме подбирается такой набор опорных точек-ориентиров, который при построении кривой Безье дает форму кривой, наиболее соответствующую требуемой. Кривые Безье строятся на основании так называемого многочлена Безье. Многочлен Безье задается в параметрической форме через параметр t. При этом связь параметра t с декартовыми координатами задается как: x = Px(t); y = Py(t), где параметр t изменяется в диапазоне 0<=t<=1. Если заданы точки-ориентиры : x0,y0; x1,y1;... xi,yi;.... xm,ym, то многочлен Безье представляется в виде: m Px(t)=Cmiti (1-t)m-i xi; . i=0 . m Py(t)=Cmiti (1-t)m-i yi, . i=0 где 0 <= t <= 1; В векторной форме многочлен Безье задается как: Вынесем из под знака суммы слагаемые со значением i=0 и i=m, представив многочлен Безье в виде: Если учесть, что 0=1, 00=1 и Сm0 =Сmm =1 ,то будем иметь: Найдем значения для P при t=0 и t=1: Подставив в полученное выражение значение t=1и t=0, получим: Оценим поведение многочлен Безье в окрестностях точек t=0 и t=1. Для этого применим разложение функции f(x) в окрестности точки x=а в ряд Тейлора: f(x)=f(a) + ((x-a)/(1f(1)(a) + ((x-a)2/(2f(2)(a) + ...+ + ((x-a)2/(2f(2)(a)+ R(x n+1), где: f(i)(a) – i-ая производная функции f(x) в точке x=a; R(x n+1)- остаточный член, определяющий погрешность порядка n-ой степени x. Для многочлен Безье в окрестности точки t = 0 будим иметь: P(t=0) = P(0)+tP(1)(0)+R(t2) P(0)+tP(1)(0) (2.3-2) (так как параметр t, оставаясь меньше единицы, стремится к нулю, достаточно остановиться на погрешности второго порядка). P(t=1) = P(1)+(1-t)P(1)(1)+R((1-t)2) P(1)+(1-t)P(1)(1). (2.3-3) Найдем общее выражение для производной многочлен Безье: При t=0 имеем: или: При t=1 будем иметь: или: П олученные значения производных для значений t = 0 и t = 1 подставим в выражения (2.3-2), (2.3-3): Из полученных выражений видно, что кривая Безье в окрестности точки t= 0 стремится к прямой P0P1, отличаясь от нее тем меньше, чем t ближе к 0, а в окрестности точки t =1 она стремится к прямой Pm-1Pm, отличаясь от нее тем меньше, чем t ближе к 1. Выведем рекурсивные выражения для расчета функции, определяемой полиномом Безье. Сначала выведем рекурсивное выражение для расчета Сmi. Покажем, что имеет место Для этого выполним следующие преобразования правой часть доказываемого равенства: В выражение (2.3-1) вместо Сmi подставим Сm-1i +Cm-1i-1. Обозначим многочлен, построенный на m+1 точках x0,y0; x1,y1;... xi,yi;.... xm,ym, как P0,m(t). Легко убедиться, что часть выражения (2.3-4), помеченная первой фигурной скобкой, представляет собой полином Безье P0,m-1(t), построенный на m точках: x0,y0; x1,y1;... xi,yi;.... xm-1,ym-1, а часть выражения (2.3-4), помеченная второй фигурной скобкой, представляет собой полином Безье P1,m(t), построенный на m точках: x1,y1;... xi,yi;.... xm,ym, В таком случае можно выразить многочлен Безье P0,m(t), построенный на точках: P0, P1, ….Pi,….. Pm-1, P1,m, через многочлен Безье P0,m-1(t), построенный на точках P0, P1, ….Pi,….. Pm-1, и многочлен Безье P1,m(t), построенный на точках P1, ….Pi,….. Pm-1, P1,m следующим образом: Отсюда следует, что для определения значения полинома Безье P0,m(t), заданного на точках-ориентирахP0, P1, ….Pi,….. Pm-1, P1,m, для некоторого конкретного значения параметра t, можно использовать следующее правило: для заданного значения t (например, t=0.5) находится значение полинома Безье, заданного на точках-ориентирахP0, P1, ….Pi,….. Pm-1, P1,m-1, и полинома Безье, заданного на точках-ориентирахP1, ….Pi,….. Pm-1, P1,m; определяется отрезок, соединяющий найденные точки; в качестве значения полинома Безье P0,m(t), заданного на точках-ориентирахP0, P1, …Pi,….. Pm-1, P1,mберется точка, соответствующая середине найденного отрезка. В качестве итерационного алгоритма формирования значения полинома Безье для текущего значения t можно использовать следующий алгоритм. На каждой итерации рассчитываются точки, расположенные на i-ой части отрезков, соединяющего две соседние точки-ориентиры, полученные на предыдущей итерации. Эти рассчитанные точки берутся как точки ориентиры для следующей итерации. Если после очередной итерации будет получена одна точка-ориентир, то эта точка и есть искомая точка, определяемая полиномом Безье для заданного значения t. Граф–схема такого алгоритма приведена на . На Error: Reference source not found приведены примеры расчета значения полинома Безье для разного количества точек-ориентиров и разных значений параметра t. На приведенном рисунке серыми кружочками обозначены вводимые промежуточные точки-ориентиры, получаемые в процессе расчета кривой Безье. Зеленым кружочком обозначена точка, которая соответствует значению полинома Безье при заданном значении параметра t. Содержательно многочлен Безье можно представить в виде модели, в которой используется эластичная магнитная нить, закрепленная в точках P0 и Pn, расположенная в магнитном поле, создаваемом одинаковыми магнитами, помещенными в точках P0, P1,…, Pm-1. Для того чтобы обеспечивать большее «притяжение» к какой-либо точке-ориентиру, можно использовать механизм кратных точек (удвоение, утроение и т.д.), в соответствующее количество раз увеличивающий напряженность поля, создаваемого в этой точке. Этот механизм иллюстрируется Рис. Формирование дуги окружности.-13. На рисунке механизм кратных точек используется для точек-ориентиров P1, P2, которые берутся с одинаковыми координатами X, Y. Поэтому при рассмотрении полинома, определенными точками-ориентирами P1, P2, в качестве его значения для любой заданной величины параметра t выбирается точка, соответствующая P1 (или, что то же самое P2). Поэтому на приведенном рисунке промежуточная точка-ориентир совпадает с начальными точками-ориентирами P1, P2. Рис. Кривые Безье.‑15 Рис. Кривые Безье.‑16 Рис. Кривые Безье.‑17 |