Безјеова крива

Безјеова крива (погрешно наречена „Безиерова крива“) — параметарска крива која наоѓа честа примена во сметачката графика и сродните полиња. Воопштувањата на Безјеовите криви во повисоки димензии се нарекуваат Безјеови површини, чиј посебен случај е Безјеовиот триаголник.
Кај векторската графика, Безјеовите криви се користат за моделирање на глатки криви чиј размер може да се менува до бесконечност. „Патеките“, како што се нарекуваат во програмите за работа (манипулација) со слики се комбинации од сврзани Безјеови криви. Патеките не се ограничени од растеризираните слики и можат да се менуваат интуитивно. Безјеовите криви се користат и во анимацијата, како алатка за контрола на движењето.
Безјеовите криви наоѓаат примена и кај временските одредници, особено за анимации и во изработката на посредници. На пример, со Безјеова крива можеме да ја назначиме брзината на еден објект со текот на времето, како икона што се преместува од А до Б, наместо да преместуваме утврден број на пиксели по чекор. Кога аниматорите или уредувачите на посредници зборуваат за „физиката“ или „чувството“ во работата, тие всушност споменуваат извесна Безјеова крива што ја контролира брзината на даденото движење со текот на времето.
Безјеовите криви ги популаризирал францускиот инженер Пјер Безје во 1962, кога почнал да ги применува при обликувањето на автомобилски каросерии. Овие криви прв ги осмислил Пол де Кастелжо користејќи де Кастелжоов алгоритам, кој е бројчено стабилен метод за вреднување на Безјеови криви.
1 Примена
1.1 Сметачка графика
Безјеовите криви наоѓаат широка примена во сметачката графика за моделирање на глатки криви. Бидејќи кривата е целосно опфатена во испакната обвивка на нејзините контролни точки, точките можат да се прикажат графичк и да се користат за интуитивно манипулирање на кривата. Кривата може да се менува со афините трансформации како транслацијата и ротацијата со нивна примена врз соодветните контролни точки.
Најзатапени се квадратните и кубните Безјеови криви. Кривите од повисок степен се потешки за вреднување. Кога има потреба од посложени облици, се земаат Безјеови криви од ниж ред и се поврзуваат. Ова се нарекува „патека“ кај стандардите за векторска графика (како SVG) и програмите за работење со неа (како Adobe Illustrator и Inkscape). За да се обезбеди сигурна глаткост, контрочната точка во којашто се среќаваат две криви мора да лежи на линијата помеѓу две контрочни точки од секоја страна.
Најпростиот метод на претворање (растеризирање) една Безјеова крива со вчитување е нејзино вреднување во голем број на збиени точки и претворање на приближната низа од отсечки. Меѓутоа ова не гарантира дека растеризираниот извод ќе изгледа доволно гладок, бидејќи точките може да бидат премногу оддалечени една од друга. Може да се јави и обратен случај, кајшто може да има премногу точки во деловите на кривата што се речиси прави. Постои и чест адаптивен метод на рекурзивна поделба, каде се проверуваат контролните точки на кривата за да се утврди дали кривата дава приближен извод на отсечка до прецизнос со мала толеранција. Ако е незадоволителна, кривата параметарски се одделува на две отсечки, 0 ≤ ''t'' ≤ 0,5 и 0,5 ≤ ''t'' ≤ 1, и истата постапка се применува на секоја половина. Постојат и нерекурзивни методи на разликување, но треба да се обрати големо внимание при анализата на јавувањата на грешки. Постојат и аналитички методи, каде вчитана линија ја пресекуваме со сплајн и наоѓаме корени на кубни полиноми (за кубни сплајнови), па потоа работиме со повеќе вакви корени.
1.2 Анимација
Кај програмите за анимација како Adobe Flash и Synfig, Безјеовите криви служат за општо исцртување, на пример на движењето. Корисникот ја исцртува саканата патека со Безјеови криви, а програмот ги создава кадрите што му требаат на објектот за да се движи долж зададената патека.
Кај 3Д анимациите, Безјеови криви служат за определување на тридимензонални патеки и дводимензионални криви за интерполација на клучните кадри.
1.3 Фонтови
Фонтовите од семејството TrueType користат Безјеови сплајнови составени од квадратни Безјеови криви.
Современите системи за ликовно уредување како PostScript, Asymptote и Metafont користат безјеови сплајнови составени од кубни Безјеови криви за исцртување на закривени облици. Овој алгоритам наоѓа примена и кај „глатката крива“ кај табелите во Microsoft Excel.
2 Преглед на случаи
2.1 Линеарни Безјеови криви
Ако ги имаме точките P<sub>0</sub> и P<sub>1</sub>, линеарната Безјеова крива е едноставно права линија помеѓу тие две точки. Кривата е дадена со
:<math>\mathbf{B}(t)=\mathbf{P}_0 + t(\mathbf{P}_1-\mathbf{P}_0)=(1-t)\mathbf{P}_0 + t\mathbf{P}_1 \mbox{ , } t \in [0,1]</math>
и е истоветна со линеарната интерполација.
2.2 Квадратни Безјеови криви
Квадратна Безјеова крива е патеката што ја исцртува функцијата B(''t''), со зададени точки P<sub>0</sub>, P<sub>1</sub> и P<sub>2</sub>,
:<math>\mathbf{B}(t) = (1 - t)^{2}\mathbf{P}_0 + 2(1 - t)t\mathbf{P}_1 + t^{2}\mathbf{P}_2 \mbox{ , } t \in [0,1].</math>
Заминува од P<sub>0</sub> во правец на P<sub>1</sub>, па се P<sub>2</sub> in the direction from P<sub>1</sub>. Со други зборови, обете тангенти на P<sub>0</sub> и P<sub>2</sub> минуваат низ P<sub>1</sub>. Ова непосредно може да се види во изведеното од Безјеовата крива:
:<math>\mathbf{B}'(t) = 2 (1 - t) (\mathbf{P}_1 - \mathbf{P}_0) + 2 t (\mathbf{P}_2 - \mathbf{P}_1) \,.</math>
Квадратната Безјеова крива е воедно и параболична отсечка.
2.3 Кубни Безјеови криви
Четирите точки P<sub>0</sub>, P<sub>1</sub>, P<sub>2</sub> и P<sub>3</sub> на рамнината или во тридимензионален простор дефинираат кубна Безјеова крива.
Кривата почнува во P<sub>0</sub>, оди кон P<sub>1</sub> и завршува во P<sub>3</sub> доаѓајќи од кај P<sub>2</sub>. Обично не минува низ P<sub>1</sub> или P<sub>2</sub>; овие точки служат само како показатели на насоката. Растојанието помеѓу P<sub>0</sub> и P<sub>1</sub> определува колку „колку долго“ кривата се движи во една насока P<sub>2</sub> пред да се сврти кон P<sub>3</sub>.
Параметарскиот облик на кривата е:
:<math>\mathbf{B}(t)=(1-t)^3\mathbf{P}_0+3(1-t)^2t\mathbf{P}_1+3(1-t)t^2\mathbf{P}_2+t^3\mathbf{P}_3 \mbox{ , } t \in [0,1].</math>
За некои задавања на P<sub>1</sub> и P<sub>2</sub>, кривата може да се пресече самата себеси, или да содржи зашилување.
3 Воопштување
Безјеовата крива од степен ''n'' може да се воопшти на следниов начин. Ако ги имаме точките P<sub>0</sub>, P<sub>1</sub>,..., P<sub>''n''</sub>, Безјеовата крива е
:<math>
\begin{align}
\mathbf{B}(t) & = \sum_{i=0}^n {n\choose i}(1-t)^{n-i}t^i\mathbf{P}_i \\
& = (1-t)^n\mathbf{P}_0 + {n\choose 1}(1-t)^{n-1}t\mathbf{P}_1 + \cdots \\
& {} \quad \cdots + {n\choose n-1}(1-t)t^{n-1}\mathbf{P}_{n-1} + t^n\mathbf{P}_n,\quad t \in [0,1],
\end{align}
</math>
каде <math>\scriptstyle {n \choose i}</math> е биномниот коефициент.
На пример, за ''n'' = 5:
:<math>
\begin{align}
\mathbf{B}(t) & = (1-t)^5\mathbf{P}_0 + 5t(1-t)^4\mathbf{P}_1 + 10t^2(1-t)^3 \mathbf{P}_2 \\
& {} \quad + 10t^3 (1-t)^2 \mathbf{P}_3 + 5t^4(1-t) \mathbf{P}_4 + t^5 \mathbf{P}_5,\quad t \in [0,1].
\end{align}
</math>
Формулата може да се изрази рекурзивно вака:
Нека <math>\mathbf{B}_{\mathbf{P}_0\mathbf{P}_1\ldots\mathbf{P}_n}</math> означува Безјеовата крива определена од точките P<sub>0</sub>, P<sub>1</sub>, ..., P<sub>n</sub>. Тогаш
:<math>\mathbf{B}(t) = \mathbf{B}_{\mathbf{P}_0\mathbf{P}_1\ldots\mathbf{P}_n}(t) = (1-t)\mathbf{B}_{\mathbf{P}_0\mathbf{P}_1\ldots\mathbf{P}_{n-1(t) + t\mathbf{B}_{\mathbf{P}_1\mathbf{P}_2\ldots\mathbf{P}_n}(t)</math>
Со други зборови, Безјеовата крива од степен ''n'' е линеарна интерполација between две Безјеови криви од степен (''n''&minus; 1).
3.1 Терминологија
Овие параметарски криви имаат своја придружна терминологија. Имаме
:<math>\mathbf{B}(t) = \sum_{i=0}^n \mathbf{b}_{i,n}(t)\mathbf{P}_i,\quad t\in[0,1]</math>
каде полиномите
:<math>\mathbf{b}_{i,n}(t) = {n\choose i} t^i (1-t)^{n-i},\quad i=0,\ldots n</math>
се нарекуваат Бернштајнови полиноми од степен ''n'', с ''t''<sup>0</sup> = 1 и (1 &minus;''t'')<sup>0</sup> = 1. Биномниот коефициент, <math>\scriptstyle {n \choose i}</math> може поинаку да се запише и како
:<math>^n\mathbf{C}_i = {n \choose i} = \frac{n!}{i!(n-i)!}.</math>
Точките P<sub>''i''</sub> се нарекуваат „контролни точки“ за Безјеовата крива. Многуаголникот што се добива со поврзувањето на Безјеовите точки со линии, започнувајќи од P<sub>0</sub> и завршувајќи во P<sub>''n''</sub>, се нарекува „Безјеов многуаголник“ (или „контролен многуаголник“). Испакнатата обвивка на Безјеовиот многуаголник содржи Безјеова крива.
* Кривата почнува во P<sub>0</sub> и завршува во P<sub>''n''</sub>; ова е таканареченото својство „интерполација на крајната точка“.
* Кривата е права линија ако и само ако сите контролни точки се колинеарни.
* Почетокот (крајот) на кривата е танегнтна на првиот (последниот) дел на Безјеовиот многуаголник.
* Кривата може во било која точка да се подели на две поткриви, или пак на произволен број поткриви, од кои секоја е исто така Безјеова крива.
* Некои криви што изгледаат просто, како кружницата, не можат точно да се опишат со Безјеова или расцепкана Безјеова крива; иако четириделна кубна Безјеова крива е приближна на кружница, со максимална радијална грешка помала од , која секоја внатрешна контролна точка (или точка вон линијата) го претставува растојанието <math>\textstyle\frac{4\left(\sqrt {21\right)}{3}</math> хоризонтално и вертикално од надворешна контролна точка на единица кружница. Поопшто, ''n''-делна кубна Безјеова крива може да е приближна на кружница, кога секоја внатрешна контролна точка го претставува растојанието <math>\textstyle\frac{4}{3}\tan(t/4)</math> од надворешната контролна точка на единица кружница, каде ''t'' изнесува 360/''n'' степени, а ''n'' > 2.
* Кривата на утврдена одделеченост од дадена Безјеова крива, наречена „паралелна крива“, не може точно да се обликува со Безјеова крива (освен во некои тривијални случаи). Меѓутоа, постои евристички методи што обично овозможуваат достатна приближна пресметка за практични цели.
*Секоја квадратна Безјеова крива is also a кубна Безјеова крива, а поопшто, секоја Безјеова крива од степен ''n'' е воедно и крива од степен ''m'' за секое ''m'' > ''n''. Поподробно, една крива од степен ''n'' со контролни точки P<sub>0</sub>, …, P<sub>''n''</sub> е истоветна (вклучувајќи ја параметризацијата) на кривата од степен ''n'' + 1 со контролни точки P'<sub>0</sub>, …, P'<sub>''n'' + 1</sub>, каде <math>\mathbf P'_k=\tfrac{k}{n+1}\mathbf P_{k-1}+\left(1-\tfrac{k}{n+1}\right)\mathbf P_k</math>.
4 Конструирање на Безјеови криви
4.1 Линеарни криви
]
Анимација на една линеарна Безјеова крива, ''t'' во [0,1]
Елементот ''t'' во функцијата за линеарна Безјеова крива изразува колку е оддалечено B(''t'') од P<sub>0</sub> to P<sub>1</sub>. На пример, кога ''t=0,25'', B(''t'') е на четвртина пат од точката P<sub>0</sub> до точката P<sub>1</sub>. Бидејќи ''t'' се движи од 0 до 1, B(''t'') опишува права линија од P<sub>0</sub> до P<sub>1</sub>.
4.2 Квадратни криви
За квадратни Безјеови криви можеме да конструираме меѓуточки Q<sub>0</sub> и Q<sub>1</sub>, така што ''t'' ќе се движи 0 до 1:
* Точката Q<sub>0</sub> се движи од P<sub>0</sub> до P<sub>1</sub> и опипува линеарна Безјеова крива.
* Точката Q<sub>1</sub> се движи од P<sub>1</sub> до P<sub>2</sub> и опишува линеарна Безјеова крива.
* Точката B(''t'') се движи од Q<sub>0</sub> до Q<sub>1</sub> и опишува квадратна Безјеова крива.
]
Конструкција на квадратна Безјеова крива, Анимација на една квадратна Безјеова крива, ''t'' во [0,1]
4.3 Криви од виш ред
Ако сакаме да добиеме крива од повисок ред, ќе ни требаат дотолку повеќе меѓуточки. За кубна крива можеме да ги конструираме меѓуточките Q<sub>0</sub>, Q<sub>1</sub> и Q<sub>2</sub> што опишуваат линеарни Безјеови криви, и точки R<sub>0</sub> и R<sub>1</sub> што опишуваат квадратни Безјеови криви:
]
Конструкција на кубна Безјеова крива, Анимација на една кубна Безјеова крива, ''t'' во [0,1]
За криви од четврти ред можеме да конструираме меѓуточки Q<sub>0</sub>, Q<sub>1</sub>, Q<sub>2</sub> и Q<sub>3</sub> што опишуваат линеарни Безјеови криви, точки R<sub>0</sub>, R<sub>1</sub> и R<sub>2</sub> што опишуваат квадратни Безјеови криви, и точки S<sub>0</sub> и S<sub>1</sub> што ги опишуваат кубните Безјеови криви:
]
Конструкција на квадратна Безјеова крива, Анимација на една квадратна Безјеова крива, ''t'' во [0,1]
(Погледајте и конструкција на Безјеова крива од петти ред.)
5 Повишување на степенот
Безјеова крива од степен ''n'' може да се претвори во Безјеова крива од степен ''n'' + 1 со ист облик. Ова е корисна можност ако програмот поддржува само Безјеови криви од извесен степен. На пример, можете да нацртате квадратна Безјеова крива со Cairo, кој поддржува само кубни Безјеовиѕ криви.
За да добиеме крива од повисок степен, го применуваме равенството <math>\mathbf{B}(t) = (1-t)\mathbf{B}(t) + t\mathbf{B}(t)</math>. Секој дел <math>\mathbf{b}_{i,n}(t)\mathbf{P}_i</math> се множи со (1 &minus;''t'') или ''t'', зголемувајќи го степенот за еден. Еве пример за повишување на степенот од 2 на 3.
:<math>
\begin{align}
& {} \quad (1 - t)^{2}\mathbf{P}_0 + 2(1 - t)t\mathbf{P}_1 + t^{2}\mathbf{P}_2 \\
& = (1 - t)^{3}\mathbf{P}_0 + (1 - t)^{2}t\mathbf{P}_0 + 2(1 - t)^{2}t\mathbf{P}_1 \\
& {} \qquad + 2(1 - t)t^{2}\mathbf{P}_1 + (1 - t)t^{2}\mathbf{P}_2 + t^{3}\mathbf{P}_2 \\
& = (1 - t)^{3}\mathbf{P}_0
+ 3(1 - t)^{2}t\frac{\mathbf{P}_0 + 2\mathbf{P}_1}{3}
+ 3(1 - t)t^{2}\frac{2\mathbf{P}_1 + \mathbf{P}_2}{3}
+ t^{3}\mathbf{P}_2
\end{align}
</math>
За произволно ''n'', ги применуваме равенствата
:<math>{n+1 \choose i}(1-t)\mathbf{b}_{i,n} = {n \choose i} \mathbf{b}_{i,n+1},
\quad (1-t)\mathbf{b}_{i,n} = \frac{n+1-i}{n+1} \mathbf{b}_{i,n+1}</math>:<math>{n+1 \choose i+1} t\mathbf{b}_{i,n} = {n \choose i} \mathbf{b}_{i+1,n+1},
\quad t\mathbf{b}_{i,n} = \frac{i+1}{n+1} \mathbf{b}_{i+1,n+1}</math>:<math>
\begin{align}
\mathbf{B}(t) & = (1-t)\sum_{i=0}^n \mathbf{b}_{i,n}(t)\mathbf{P}_i
+ t\sum_{i=0}^n \mathbf{b}_{i,n}(t)\mathbf{P}_i \\
& = \sum_{i=0}^n \frac{n+1-i}{n+1}\mathbf{b}_{i,n+1}(t)\mathbf{P}_i
+ \sum_{i=0}^n \frac{i+1}{n+1}\mathbf{b}_{i+1,n+1}(t)\mathbf{P}_i \\
& = \sum_{i=0}^{n+1} \left(\frac{i}{n+1}\mathbf{P}_{i-1} + \frac{n+1-i}{n+1}\mathbf{P}_i\right) \mathbf{b}_{i,n+1}(t)
= \sum_{i=0}^{n+1} \mathbf{b}_{i,n+1}(t)\mathbf{P'}_i
\end{align}
</math>
воведувајќи произволно <math>\mathbf{P}_{-1}</math> и <math>\mathbf{P}_{n+1}</math>.
Затоа новите контролни точки се :<math>\mathbf{P'}_i = \frac{i}{n+1}\mathbf{P}_{i-1} + \frac{n+1-i}{n+1}\mathbf{P}_i,\quad i=0,\ldots, n+1.</math>
6 Полиномен облик
Понекогаш е пожелно Безјеовата крива да се изрази како полином наместо збир од посложени Бернштајнови полиноми. Се применува биномна теорема врз дефиницијата на кривата, се врши извесен извесен прераспоред, па добиваме:
:<math>
\mathbf{B}(t) = \sum_{j = 0}^n {t^j \mathbf{C}_j}
</math>
каде
:<math>
\mathbf{C}_j = \frac{n!}{(n - j)!} \sum_{i = 0}^j \frac{(-1)^{i + j} \mathbf{P}_i}{i! (j - i)!} =
\prod_{m = 0}^{j - 1} (n - m) \sum_{i = 0}^j \frac{(-1)^{i + j} \mathbf{P}_i}{i! (j - i)!}
.</math>
Ова може да е практично ако <math>\mathbf{C}_j</math> може да се пресметка пред многу повишувања на <math>\mathbf{B}(t)</math>. Меѓутоа треба да се биде претпазлив, бидејќи кривите од виш ред може да немаат бројчена стабилност (ако ова се случи, треба да се примени де Кастелжоовиот алгоритам). Забележете дека празниот производ изнесува 1.
7 Рационални Безјеови криви
Рационалната Безјеова крива додава прилагодливи пондерации за поточни приближни пресметки на произволни облици. Броителот е понерирана Безјеова крива од Бернштајнов облик, а именителот е пондериран збир од Бернштајнови полиноми. Рационалните Безјеови криви, меѓу другото, се користат и за точно претставување на делови од конусни пресеци.
Ако имаме ''n'' + 1 контролни точки P<sub>''i''</sub>, рационалната Безјеова крива може да се опише со:
:<math>
\mathbf{B}(t) =
\frac{
\sum_{i=0}^n b_{i,n}(t) \mathbf{P}_{i}w_i
}
{
\sum_{i=0}^n b_{i,n}(t) w_i
}
</math>
or simply
:<math>
\mathbf{B}(t) =
\frac{
\sum_{i=0}^n {n \choose i} t^i (1-t)^{n-i}\mathbf{P}_{i}w_i
}
{
\sum_{i=0}^n {n \choose i} t^i (1-t)^{n-i}w_i
}.
</math>
8 Поврзано
*NURBS
*B-сплајн
9 Наводи
*Paul Bourke: ''Bézier Surfaces (in 3D)'',
*Donald Knuth: ''Metafont: the Program'', Addison-Wesley 1986, стр. 123–131.
*Dr Thomas Sederberg, BYU ''Bézier curves'',
* J.D. Foley ''et al.'': ''Computer Graphics: Principles and Practice in C'' (II изд., Addison Wesley, 1992)
9.1 Македонски
* - Маргарита Кон - Поповска на Институтот за информатика (ПМФ)
* Универзитет „ФОН“
9.2 Англиски
** - Џон Х. Метјуз
* - Java