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

Од Википедија, слободната енциклопедија
Прејди на: содржини, барај
Кубна Безијеова крива

Безијеовата крива (погрешно наречена „Безиерова крива“) — параметарска крива која наоѓа честа примена во сметачката графика и сродните полиња. Воопштувањата на Безијеовите криви во повисоки димензии се нарекуваат Безијеови површини, чиј посебен случај е Безијеовиот триаголник.

Кај векторската графика, Безијеовите криви се користат за моделирање на глатки криви чиј размер може да се менува до бесконечност. „Патеките“, како што се нарекуваат во програмите за работа (манипулација) со слики[бел 1] се комбинации од сврзани Безијеови криви. Патеките не се ограничени од растеризираните слики и можат да се менуваат интуитивно. Безијеовите криви се користат и во анимацијата, како алатка за контрола на движењето.[бел 2]

Безијеовите криви наоѓаат примена и кај временските одредници, особено за анимации и во изработката на посредници. На пример, со Безијеова крива можеме да ја назначиме брзината на еден објект со текот на времето, како икона што се преместува од А до Б, наместо да преместуваме утврден број на пиксели по чекор. Кога аниматорите или уредувачите на посредници зборуваат за „физиката“ или „чувството“ во работата, тие всушност споменуваат извесна Безијеова крива што ја контролира брзината на даденото движење со текот на времето.

Безијеовите криви ги популаризирал францускиот инженер Пјер Безије во 1962, кога почнал да ги применува при обликувањето на автомобилски каросерии. Овие криви прв ги осмислил Пол де Кастелжо користејќи де Кастелжоов алгоритам, кој е бројчено стабилен метод за вреднување на Безијеови криви.

Примена[уреди]

Сметачка графика[уреди]

Исцртана Безијеова крива со своите контролни точки

Безијеовите криви наоѓаат широка примена во сметачката графика за моделирање на глатки криви. Бидејќи кривата е целосно опфатена во конвексна обвивка на нејзините контролни точки, точките можат да се прикажат графичк и да се користат за интуитивно манипулирање на кривата. Кривата може да се менува со афините трансформации како транслацијата и ротацијата со нивна примена врз соодветните контролни точки.

Најзатапени се квадратните и кубните Безијеови криви. Кривите од повисок степен се потешки за вреднување. Кога има потреба од посложени облици, се земаат Безијеови криви од ниж ред и се поврзуваат. Ова се нарекува „патека“ кај стандардите за векторска графика (како SVG) и програмите за работење со неа (како Adobe Illustrator и Inkscape). За да се обезбеди сигурна глаткост, контрочната точка во којашто се среќаваат две криви мора да лежи на линијата помеѓу две контрочни точки од секоја страна.

Најпростиот метод на претворање (растеризирање) една Безијеова крива со вчитување е нејзино вреднување во голем број на збиени точки и претворање на приближната низа од отсечки. Меѓутоа ова не гарантира дека растеризираниот извод ќе изгледа доволно гладок, бидејќи точките може да бидат премногу оддалечени една од друга. Може да се јави и обратен случај, кајшто може да има премногу точки во деловите на кривата што се речиси прави. Постои и чест адаптивен метод на рекурзивна поделба, каде се проверуваат контролните точки на кривата за да се утврди дали кривата дава приближен извод на отсечка до прецизнос со мала толеранција. Ако е незадоволителна, кривата параметарски се одделува на две отсечки, 0 ≤ t ≤ 0,5 и 0,5 ≤ t ≤ 1, и истата постапка се применува на секоја половина. Постојат и нерекурзивни методи на разликување, но треба да се обрати големо внимание при анализата на јавувањата на грешки. Постојат и аналитички методи, каде вчитана линија ја пресекуваме со сплајн и наоѓаме корени на кубни полиноми (за кубни сплајнови), па потоа работиме со повеќе вакви корени.

Анимација[уреди]

Кај програмите за анимација како Adobe Flash и Synfig, Безијеовите криви служат за општо исцртување, на пример на движењето. Корисникот ја исцртува саканата патека со Безијеови криви, а програмот ги создава кадрите што му требаат на објектот за да се движи долж зададената патека. Кај 3Д анимациите, Безијеови криви служат за определување на тридимензонални патеки и дводимензионални криви за интерполација на клучните кадри.

Фонтови[уреди]

Фонтовите од семејството TrueType користат Безијеови сплајнови составени од квадратни Безијеови криви.

Современите системи за ликовно уредување како PostScript, Asymptote и Metafont користат безијеови сплајнови составени од кубни Безијеови криви за исцртување на закривени облици. Овој алгоритам наоѓа примена и кај „глатката крива“ кај табелите во Microsoft Excel.[1]

Преглед на случаи[уреди]

Линеарни Безијеови криви[уреди]

Ако ги имаме точките P0 и P1, линеарната Безијеова крива е едноставно права линија помеѓу тие две точки. Кривата е дадена со

\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]

и е истоветна со линеарната интерполација.

Квадратни Безијеови криви[уреди]

Квадратна Безијеова крива е патеката што ја исцртува функцијата B(t), со зададени точки P0, P1 и P2,

\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].

Заминува од P0 во правец на P1, па се P2 in the direction from P1. Со други зборови, обете тангенти на P0 и P2 минуваат низ P1. Ова непосредно може да се види во изведеното од Безијеовата крива:

\mathbf{B}'(t) = 2 (1 - t) (\mathbf{P}_1 - \mathbf{P}_0) + 2 t (\mathbf{P}_2 - \mathbf{P}_1) \,.

Квадратната Безијеова крива е воедно и параболична отсечка.

Кубни Безијеови криви[уреди]

Четирите точки P0, P1, P2 и P3 на рамнината или во тридимензионален простор дефинираат кубна Безијеова крива. Кривата почнува во P0, оди кон P1 и завршува во P3 доаѓајќи од кај P2. Обично не минува низ P1 или P2; овие точки служат само како показатели на насоката. Растојанието помеѓу P0 и P1 определува колку „колку долго“ кривата се движи во една насока P2 пред да се сврти кон P3.

Параметарскиот облик на кривата е:

\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].

За некои задавања на P1 и P2, кривата може да се пресече самата себеси, или да содржи зашилување.

Воопштување[уреди]

Безијеовата крива од степен n can be воопшти на следниов начин. Ако ги имаме точките P0, P1,..., Pn, Безијеовата крива е


\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}

каде \scriptstyle {n \choose i} е биномниот коефициент.

На пример, за n = 5:


\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}

Формулата може да се изрази рекурзивно вака: Нека \mathbf{B}_{\mathbf{P}_0\mathbf{P}_1\ldots\mathbf{P}_n} означува Безијеовата крива определена од точките P0, P1, ..., Pn. Тогаш

\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)

Со други зборови, Безијеовата крива од степен n е линеарна интерполација between две Безијеови криви од степен (n − 1).

Терминологија[уреди]

Овие параметарски криви имаат своја придружна терминологија. Имаме

\mathbf{B}(t) = \sum_{i=0}^n \mathbf{b}_{i,n}(t)\mathbf{P}_i,\quad t\in[0,1]

каде полиномите

\mathbf{b}_{i,n}(t) = {n\choose i} t^i (1-t)^{n-i},\quad i=0,\ldots n

се нарекуваат Бернштајнови полиноми од степен n, с t0 = 1 и (1 − t)0 = 1. Биномниот коефициент, \scriptstyle {n \choose i} може поинаку да се запише и како

^n\mathbf{C}_i = {n \choose i} = \frac{n!}{i!(n-i)!}.

Точките Pi се нарекуваат „контролни точки“ за Безијеовата крива. Многуаголникот што се добива со поврзувањето на Безијеовите точки со линии, започнувајќи од P0 и завршувајќи во Pn, се нарекува „Безијеов многуаголник“ (или „контролен многуаголник“). Конвексната обвивка на Безијеовиот многуаголник содржи Безијеова крива.

  • Кривата почнува во P0 и завршува во Pn; ова е таканареченото својство „интерполација на крајната точка“.
  • Кривата е права линија ако и само ако сите контролни точки се колинеарни.
  • Почетокот (крајот) на кривата е танегнтна на првиот (последниот) дел на Безијеовиот многуаголник.
  • Кривата може во било која точка да се подели на две поткриви, или пак на произволен број поткриви, од кои секоја е исто така Безијеова крива.
  • Некои криви што изгледаат просто, како кружницата, не можат точно да се опишат со Безијеова или расцепкана Безијеова крива; иако четириделна кубна Безијеова крива е приближна на кружница, со максимална радијална грешка помала од 11000, која секоја внатрешна контролна точка (или точка вон линијата) го претставува растојанието \textstyle\frac{4\left(\sqrt {2}-1\right)}{3} хоризонтално и вертикално од надворешна контролна точка на единица кружница. Поопшто, n-делна кубна Безијеова крива може да е приближна на кружница, кога секоја внатрешна контролна точка го претставува растојанието \textstyle\frac{4}{3}\tan(t/4) од надворешната контролна точка на единица кружница, каде t изнесува 360/n степени, а n > 2.
  • Кривата на утврдена одделеченост од дадена Безијеова крива, наречена „паралелна крива“, не може точно да се обликува со Безијеова крива (освен во некои тривијални случаи). Меѓутоа, постои хевристички методи што обично овозможуваат достатна приближна пресметка за практични цели.
  • Секоја квадратна Безијеова крива is also a кубна Безијеова крива, а поопшто, секоја Безијеова крива од степен n е воедно и крива од степен m за секое m > n. Поподробно, една крива од степен n со контролни точки P0, …, Pn е истоветна (вклучувајќи ја параметризацијата) на кривата од степен n + 1 со контролни точки P'0, …, P'n + 1, каде \mathbf P'_k=\tfrac{k}{n+1}\mathbf P_{k-1}+\left(1-\tfrac{k}{n+1}\right)\mathbf P_k.

Конструирање на Безијеови криви[уреди]

Линеарни криви[уреди]

Анимација на линеарна Безијеова крива, t во [0,1]
Анимација на една линеарна Безијеова крива, t во [0,1]

Елементот t во функцијата за линеарна Безијеова крива изразува колку е оддалечено B(t) од P0 to P1. На пример, кога t=0,25, B(t) е на четвртина пат од точката P0 до точката P1. Бидејќи t се движи од 0 до 1, B(t) опишува права линија од P0 до P1.

Квадратни криви[уреди]

За квадратни Безијеови криви можеме да конструираме меѓуточки Q0 и Q1, така што t ќе се движи 0 до 1:

  • Точката Q0 се движи од P0 до P1 и опипува линеарна Безијеова крива.
  • Точката Q1 се движи од P1 до P2 и опишува линеарна Безијеова крива.
  • Точката B(t) се движи од Q0 до Q1 и опишува квадратна Безијеова крива.
Конструкција на квадратна Безијеова крива Анимација на една квадратна Безијеова крива, t во [0,1]
Конструкција на квадратна Безијеова крива Анимација на една квадратна Безијеова крива, t во [0,1]

Криви од виш ред[уреди]

Ако сакаме да добиеме крива од повисок ред, ќе ни требаат дотолку повеќе меѓуточки. За кубна крива можеме да ги конструираме меѓуточките Q0, Q1 и Q2 што опишуваат линеарни Безијеови криви, и точки R0 и R1 што опишуваат квадратни Безијеови криви:

Конструкција на кубна Безијеова крива Анимација на една кубна Безијеова крива, t во [0,1]
Конструкција на кубна Безијеова крива Анимација на една кубна Безијеова крива, t во [0,1]

За криви од четврти ред можеме да конструираме меѓуточки Q0, Q1, Q2 и Q3 што опишуваат линеарни Безијеови криви, точки R0, R1 и R2 што опишуваат квадратни Безијеови криви, и точки S0 и S1 што ги опишуваат кубните Безијеови криви:

Конструкција на квадратна Безијеова крива Анимација на една квадратна Безијеова крива, t во [0,1]
Конструкција на квадратна Безијеова крива Анимација на една квадратна Безијеова крива, t во [0,1]

(Погледајте и конструкција на Безијеова крива од петти ред.)

Повишување на степенот[уреди]

Безијеова крива од степен n може да се претвори во Безијеова крива од степен n + 1 со ист облик. Ова е корисна можност ако програмот поддржува само Безијеови криви од извесен степен. На пример, можете да нацртате квадратна Безијеова крива со Cairo, кој поддржува само кубни Безијеовиѕ криви.

За да добиеме крива од повисок степен, го применуваме равенството \mathbf{B}(t) = (1-t)\mathbf{B}(t) + t\mathbf{B}(t). Секој дел \mathbf{b}_{i,n}(t)\mathbf{P}_i се множи со (1 − t) или t, зголемувајќи го степенот за еден. Еве пример за повишување на степенот од 2 на 3.


\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}

За произволно n, ги применуваме равенствата

{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}
{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}

\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}

воведувајќи произволно \mathbf{P}_{-1} и \mathbf{P}_{n+1}.

Затоа новите контролни точки се [2]

\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.

Полиномен облик[уреди]

Понекогаш е пожелно Безијеоваta крива да се изрази како полином наместо збир од посложени Бернштајнови полиноми. Се применува биномна теорема врз дефиницијата на кривата, се врши извесен извесен прераспоред, па добиваме:


\mathbf{B}(t) = \sum_{j = 0}^n {t^j \mathbf{C}_j}

каде


\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)!}
.

Ова може да е практично ако \mathbf{C}_j може да се пресметка пред многу повишувања на \mathbf{B}(t). Меѓутоа треба да се биде претпазлив, бидејќи кривите од виш ред може да немаат бројчена стабилност (ако ова се случи, треба да се примени де Кастелжоовиот алгоритам). Забележете дека празниот производ изнесува 1.

Рационални Безијеови криви[уреди]

Делови на конусни пресеци точно претставени како рационални Безијеови криви

Рационалната Безијеова крива додава прилагодливи пондерации за поточни приближни пресметки на произволни облици. Броителот е понерирана Безијеова крива од Бернштајнов облик, а именителот е пондериран збир од Бернштајнови полиноми. Рационалните Безијеови криви, меѓу другото, се користат и за точно претставување на делови од конусни пресеци.[3]

Ако имаме n + 1 контролни точки Pi, рационалната Безијеова крива може да се опише со:


\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
}

or simply


\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
}.

Поврзано[уреди]

Белешки[уреди]

  1. Програми за работа со слики како Inkscape, Adobe Photoshop и GIMP.
  2. Во програмите за анимации како Adobe Flash, Adobe After Effects, Microsoft Expression Blend, Blender, Autodesk Maya и Autodesk 3ds max.

Наводи[уреди]

  1. http://www.xlrotor.com/resources/files.shtml
  2. Farin, Gerald (1997), „Curves and surfaces for computer-aided geometric design“ (4 издание), Elsevier Science & Technology Books, ISBN 978 0 12249054 5 
  3. Neil Dodgson (25 септември 2000). „Some Mathematical Elements of Graphics: Rational B-splines“. http://www.cl.cam.ac.uk/teaching/2000/AGraphHCI/SMEG/node5.html. конс. 23 февруари 2009. 

Надворешни врски[уреди]

Македонски[уреди]

Англиски[уреди]


Ова е избрана статија. Стиснете тука за повеќе информации.
Статијата „Безијеова крива“ е избрана статија. Ве повикуваме и Вас да напишете и предложите избрана статија (останати избрани статии).