Bézierova křivka
Author
Albert FloresPříklad užití Bézierovy křivky Bézierova křivka, nesprávným pravopisem Beziérova křivka, pojmenovaná po francouzském inženýru Pierru Bézierovi, je jednou z mnoha parametrických křivek. Umožňuje interaktivně vytvářet křivku a modifikovat její tvar. Pomocí Bézierovy křivky lze také reprezentovat i interpolační křivky (existují například algoritmy na převod mezi interpolačními spline kubikami a B-spline kubikami resp. Bézier kubikami).
Racionální Bézierova křivka
Příklad užití racionální Bézierovy křivky +moregif|thumb'>Vliv váhy na tvar racionální Bézierovy křivky. Jedná se o zobecnění Bézierových křivek. Pokud chce uživatel modifikovat tvar Bézierovy křivky, musí vybrat příslušný řídicí bod a změnit jeho polohu. To nemusí být vždy jednoduché a vyžaduje to jistou zkušenost. Tento problém se podstatně komplikuje v třírozměrném prostoru. Přirozenou se potom jeví metoda, která každému bodu řídicího polygonu přiřadí „váhu“ - reálné číslo, jehož změnou se mění tvar křivky. Největším přínosem racionálních Bézierových křivek je možnost manipulace s tvarem křivky bez nutnosti měnit polohy bodů řídicího polygonu.
Křivka má rovnici
: C(t) = \frac {\sum_{i=1}^n{w_iP_iB_{i,n}(t)}} {\sum_{i=1}^n{w_iB_{i,n}(t)}}
kde P_i jsou řídící body a w_i jsou příslušné váhy.
Definice
Bézierova křivka n-tého stupně pro n+1 zadaných kontrolních bodů, které tvoří tzv. řídicí polygon, je pro t \in definována jako
:C(t)= \sum_{i=0}^n B_{i,n}(t) P_i ,
přičemž B_{i,n}(t) je i-tý Bernsteinův polynom n-tého stupně:
:B_{i,n}(t)= \binom n i t^i (1-t)^{n-i}
Bernsteinovy polynomy tvoří bázi vektorového prostoru polynomu a splňují rekurentní vzorec:
B_{i,n}(t) = (1-t) \cdot B_{i,n-1}(t) + t \cdot B_{i-1,n-1}(t),
navíc B_{i,n} = 0 \ \forall \ (i n), dále B_{0,0}=1. Je tak umožněn stabilní číselný rekurzivní výpočet hodnoty Bézierovy křivky pomocí Casteljauova algoritmu:
:\begin{align}C_i^0(t) & = P_i \\ C_i^j(t) & = (1-t)C_i^{j-1}(t) + tC_{i+1}^{j-1}(t) \begin{cases} j=1,...,n \\ i=0,...,n-j. \end{cases}\end{align}
Vlastnosti
Křivka se nachází uvnitř konvexní obálky svého řídicího mnohoúhelníku. Z toho plyne, že Bernsteinovy polynomy stupně n jsou rozkladem jedné: *: 1 = \sum_{i=0}^n B_{i,n}(t) \ \ \ t \in
* Křivka prochází přesně koncovými body P0 a Pn: *: \begin{align} C(0) \ & = \ \sum_{i=0}^n \binom n i 0^i(1-0)^{n-i} P_i = P_0 \\ C(1) \ & = \ P_n \end{align}
* Tečny v koncových bodech jsou: *: C'(0) =n \cdot (P_1 - P_0) *: C'(1) = n \cdot (P_n - P_{n-1})
* Jedna přímka protíná Bézierovu křivku nanejvýš tolikrát, kolikrát jí protíná její kontrolní polygon (křivka má omezené kolísání).
* Bézierova křivka je invariantní vůči lineární transformaci (posunutí, změna měřítka, otáčení, atd. ), což znamená, že transformovaný řídící polygon dá stejný výsledek, jako když transformujeme každý bod z vygenerované křivky. +more Obecná Bézierova křivka, na rozdíl od racionální Bézierovy nebo NURBS křivky, není invariantní k perspektivnímu promítání.
* Leží-li všechny kontrolní body na jedné přímce, pak se Bézierova křivka stává úsečkou (výhoda oproti interpolaci polynomu).
Napojení dvou kubických křivek (vlevo) a kubické a kvadratické křivky (vpravo). +more * Vliv kontrolního bodu na křivku je globální. Tzn. posune-li se jeden bod, změní se celá křivka. Proto se v praxi nejčastěji používají tzv. splines, složené pracovní křivky daného stupně, které do sebe kontinuálně přecházejí.
* Jako zobecněnou formu Bézierovy křivky lze použít Bézierovu plochu. Bézierova plocha (n,m)-tého řádu je plocha ve formě *: C(u, v) = \sum_{i=0}^n \sum_{j=0}^m P_{i,j} B_{i,n}(u) B_{j,m}(v) :s kontrolními body Pi,j a s Bersteinovým polynomem Bi,n(u) a Bj,m(v). +more Bézierova plocha může být popsána také dvěma na sebe kolmými Bézierovými křivkami.
Použití
V počítačové grafice se Bézierovy křivky používají k definování křivek a ploch v rámci CAD, při vektorových grafikách (např. SVG) a k popsání písma (např. +more PostScript Type 1 a CFF-OpenType).
Příklady
===Lineární Bézierovy křivky (n = 1)=== Lineární Bézierova křivka.
Dva kontrolní body P0 a P1 určují lineární Bézierovu křivku, která odpovídá úsečce mezi těmito dvěma body.
Křivka je specifikována jako: :\begin{align} C(t) \ & =\ \sum_{i=0}^1 t^i (1-t)^{1-i} P_i \\ \ & =\ (1-t)P_0 + t P_1 \mbox{ , } t \in \end{align}.
===Kvadratické Bézierovy křivky (n = 2)=== Kvadratická Bézierova křivka.
Kvadratická Bézierova křivka je dráha, která je popsána funkcí C(t) pro body P0, P1 a P2:
:\begin{align} C(t) \ & =\ \sum_{i=0}^2 \binom 2 i t^i (1-t)^{2-i} P_i \\ \ & =\ (1 - t)^{2}P_0 + 2t(1 - t)P_1 + t^{2}P_2 \mbox{ , } t \in \end{align}.
===Kubické Bézierovy křivky (n = 3)=== Kubická Bézierova křivka.
Kubické Bézierovy křivky mají velký význam pro praxi, protože jsou skládány z menších dílů, kde můžeme jednoduše definovat spojitost v řídících (koncových) bodech jednotlivých segmentů. Další výhodou je omezený vliv změny polohy jednoho bodu na tvar celé křivky. +more Pro rasterizaci Beziérovy křivky se většinou používá adaptivní algoritmus de Casteljau.
Čtyři body (P0, P1, P2 a P3) určují kubickou Bézierovu křivku. Křivka začíná v bodě P0 a pokračuje směrem P1 a dále směrem na P2 a P3. +more Obecně křivka skrz body P1 a P2 neprochází - tyto body určují pouze tvar křivky, přičemž P1 určuje směr, kterým křivka z bodu P0 vychází. P2 určuje směr, kterým se křivka přibližuje k bodu P3. Vzdálenost mezi body P0, P1 a mezi body P2, P3 určuje „jak dlouho“ se křivka pohybuje ve směru kontrolního bodu P1 a P2, před tím než se stočí ve směru bodu P3.
:\begin{align} C(t) \ & = \ \sum_{i=0}^3 \binom 3 i t^i (1-t)^{3-i} P_i \\ & = \ (1-t)^3P_0+3t(1-t)^2P_1+3t^2(1-t)P_2+t^3P_3 \\ & = \ (-P_0 + 3P_1 -3P_2 + P_3) t^3 + (3P_0 - 6P_1 + 3P_2) t^2 + (-3P_0 + 3P_1) t + P_0 \\ & = \ \underbrace{\begin{pmatrix} t^3 & t^2 & t & 1 \end{pmatrix}}_{radkovy \ vektor} \underbrace{\begin{pmatrix} -1 & 3 & -3 & 1 \\ 3 & -6& 3 & 0 \\ -3 & 3 & 0 & 0 \\ 1 & 0 & 0 & 0 \end{pmatrix}}_{bazova\ matice} \underbrace{\begin{pmatrix} P_0 \\ P_1 \\ P_2 \\ P_3 \end{pmatrix}}_{sloupcovy\ vektor} \quad, t \in \end{align}.
Pro každý parametr t Bézierovy křivky může být určen tečný vektor odvozením z výchozí rovnosti. Přitom je délka vektoru měřítkem pro rychlost „postupu“ na křivce.
:\begin{align} \dot C(t) \ &= \ (-P_0 + 3P_1 -3P_2 + P_3) 3t^2 + (3P_0 - 6P_1 + 3P_2) 2t + (-3P_0 + 3P_1) \\ &= \ \begin{pmatrix} 3t^2 & 2t & 1 \end{pmatrix} \begin{pmatrix} -1 & 3 & -3 & 1 \\ 3 & -6 & 3 & 0 \\ -3 & 3 & 0 & 0 \end{pmatrix} \begin{pmatrix} P_0 \\ P_1 \\ P_2 \\ P_3 \end{pmatrix} \quad, t \in \end{align}
Odkazy
Reference
Související články
Geometrie * Křivka * Vektorová grafika * Pierre Bézier