Кривые Безье
Кривые Безье.
Кривые Безье применяется для приближенного решения задачи отображения кривых, задаваемого с помощью множества точек. При этом вместо «жесткого» задания точек, определяющих формируемую кривую, в интерактивном режиме подбирается такой набор опорных точек-ориентиров, который при построении кривой Безье дает форму кривой, наиболее соответствующую требуемой.
Кривые Безье строятся на основании так называемого многочлена Безье.
Многочлен Безье задается в параметрической форме через параметр t. При этом связь параметра t с декартовыми координатами задается как:
x = Px(t); y = Py(t),
где параметр t изменяется в диапазоне
0<=t<=1.
Если заданы точки-ориентиры :
x0,y0; x1,y1;... xi,yi;.... xm,ym,
Рекомендуемые материалы
то многочлен Безье представляется в виде:
|
|
где 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)/(1!))f(1)(a) + ((x-a)2/(2!))f(2)(a) + ...+
+ ((x-a)2/(2!))f(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, можно использовать следующее правило:
1) для заданного значения t (например, t=0.5) находится значение полинома Безье, заданного на точках-ориентирах P0, P1, ….Pi,….. Pm-1, P1,m-1, и полинома Безье, заданного на точках-ориентирах P1, ….Pi,….. Pm-1, P1,m;
2) определяется отрезок, соединяющий найденные точки;
3) в качестве значения полинома Безье P0,m(t), заданного на точках-ориентирах P0, P1, …Pi,….. Pm-1, P1,m берется точка, соответствующая середине найденного отрезка.
В качестве итерационного алгоритма формирования значения полинома Безье для текущего значения t можно использовать следующий алгоритм.
На каждой итерации рассчитываются точки, расположенные на i-ой части отрезков, соединяющего две соседние точки-ориентиры, полученные на предыдущей итерации. Эти рассчитанные точки берутся как точки ориентиры для следующей итерации. Если после очередной итерации будет получена одна точка-ориентир, то эта точка и есть искомая точка, определяемая полиномом Безье для заданного значения t.
Граф–схема такого алгоритма приведена на Рис. 2.3‑1.
На Рис. 2.3‑2 приведены примеры расчета значения полинома Безье для разного количества точек-ориентиров и разных значений параметра t.
На приведенном рисунке серыми кружочками обозначены вводимые промежуточные точки-ориентиры, получаемые в процессе расчета кривой Безье. Зеленым кружочком обозначена точка, которая соответствует значению полинома Безье при заданном значении параметра t.
Содержательно многочлен Безье можно представить в виде модели, в которой используется эластичная магнитная нить, закрепленная в точках P0 и Pn, расположенная в магнитном поле, создаваемом одинаковыми магнитами, помещенными в точках P0, P1,…, Pm-1.
Для того чтобы обеспечивать большее «притяжение» к какой-либо точке-ориентиру, можно использовать механизм кратных точек (удвоение, утроение и т.д.), в соответствующее количество раз увеличивающий напряженность поля, создаваемого в этой точке. Этот механизм иллюстрируется Рис. 2.2‑3.
На рисунке механизм кратных точек используется для точек-ориентиров P1, P2, которые берутся с одинаковыми координатами X, Y. Поэтому при рассмотрении полинома, определенными точками-ориентирами P1, P2, в качестве его значения для любой заданной величины параметра t выбирается точка, соответствующая P1 (или, что то же самое P2). Поэтому на приведенном рисунке промежуточная точка-ориентир совпадает с начальными точками-ориентирами P1, P2.
Рис. 2.3‑1
Люди также интересуются этой лекцией: 5.3 Квантование непрерывных сигналов.
![]() |
![]() |
Рис. 2.3‑2
![]() |
Рис. 2.3‑3