Bézierova křivka

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
Pří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 modifikaovat její tvar. Pomocí Bézierovy křivky lze takéo 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[editovat | editovat zdroj]

Příklad užití Racionální Bézierovy křivky
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, tak musí vybrat příslušný řídící 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áha“ - 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.

Definice[editovat | editovat zdroj]

Skládání Bézierových křivek

Bézierova křivka n-tého stupně pro n+1 zadaných kontrolních bodů, které tvoří tzv. řídící polygon, je pro t \in < 0,1 > 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 < 0) \or (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[editovat | editovat zdroj]

  • 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ýše 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. 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).
  • 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). Bézierova plocha může být popsána také dvěma na sebe kolmými Bézierovými křivkami.

Použití[editovat | editovat zdroj]

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ř. PostScript Type 1 a CFF-OpenType).

Příklady[editovat | editovat zdroj]

Lineární Bézierovy křivky (n = 1)[editovat | editovat zdroj]

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 <0,1>
\end{align}.

Kvadratické Bézierovy křivky (n = 2)[editovat | editovat zdroj]

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 <0,1>
\end{align}.

Kubické Bézierovy křivky (n = 3)[editovat | editovat zdroj]

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. 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. 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 <0,1>
\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 <0,1>
\end{align}

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku Bézierkurve na německé Wikipedii.