Bézier görbe

A Wikipédiából, a szabad enciklopédiából
Harmadfokú Bézier görbe

A Bézier görbe a számítógépes grafikában gyakran használt parametrikus görbe. A Bézier görbe több dimenzióra való általánosítását Bézier felületnek nevezik, ezeknek speciális esete a Bézier háromszög.

A vektorgrafikában a Bézier görbéket szabadon alakítható sima görbék modellezésére használják. A képszerkesztő programok, mint például az Inkscape, Adobe Photoshop vagy a GIMP a görbe vonalak rajzolásához egymáshoz kapcsolt Bézier görbék sorozatát használják. Ezeket a görbéket nem korlátozza a raszterképek felbontása és interaktívan alakíthatóak. A Bézier görbéket a számítógépes animációban a mozgások vezérlésének eszközeként is használják olyan programok, mint például az Adobe Flash, Adobe After Effects, Microsoft Expression Blend, Blender, Maya és az Autodesk 3D Studio Max.

Bézier görbéket az idő dimenziójában is használják különösen az animációkban és az interfész tervezésben, azaz Bézier görbéket lehet használni a képernyőn végbemenő mozgások sebességének az idő függvényében megadására ahelyett, hogy fázisképenként egyszerűen néhány képpontnyi elmozdulást írnának elő.

A Bézier görbékről 1962-ben Pierre Bézier francia mérnök sok publikációja jelent meg, aki a gépkocsi karosszériák tervezésénél használta azokat. A görbéket 1959-ben Paul de Casteljau találta fel, aki a Bézier görbék előállításának numerikusan stabil módszerét, a róla elnevezett de Casteljau algoritmust dolgozta ki .

Alkalmazás[szerkesztés | forrásszöveg szerkesztése]

Számítógépes grafika[szerkesztés | forrásszöveg szerkesztése]

A Bézier görbéket széles körben alkalmazzák a számítógépes grafikában sima görbe vonalak modellezésére. A görbék interaktív módszerrel is könnyen igazíthatók kontroll pontjaik mozgatásával. Affin transzformációjuk, mint például a transzláció és a rotáció, könnyen elvégezhető kontroll pontjaik megfelelő transzformációjával.

Általában másod- és harmadfokú Bézier görbéket használnak, a magasabb fokszámú görbék előállítása túlságosan sok számítást igényel. A bonyolultabb alakú vonalak közelítő alakját alacsonyabb fokszámú Bézier görbékből állítják össze. A csatlakozási pontokon a görbe simaságát az biztosítja, ha a közös pont és a hozzájuk közelebb eső kontroll pontok egy egyenesen fekszenek.

A Bézier görbe raszterré alakításának legegyszerűbb módja az, ha sok közelfekvő pontját meghatározzák, majd ezeket közelítő egyenesekkel összekötik. Ennek a módszernek a hibája, hogy nem biztosítható, hogy a raszterkép mindenütt elegendően simának látszódjék, ha a pontok túlságosan távol helyezkedhetnek el egymástól. Emiatt sokszor túlságosan sok pontot generál az ilyen algoritmus az egyeneshez közel álló görbék esetében. Szokásos módszer a rekurzív felosztásos eljárás, melynek során az algoritmus ellenőrző pontokat vizsgál meg, hogy a közelítő egyeneshez eléggé közel fekszenek-e, és ha nem a két pont között további pontot jelöl ki, majd megismétli az eljárást.

Animáció[szerkesztés | forrásszöveg szerkesztése]

Animációnál a Bézier görbéket a például mozgások leírására használják. A felhasználó kijelöli a kívánt útvonalat, az alkalmazás pedig előállítja az objektum mozgásának megfelelő képkockákat. A módszer térbeli mozgásokra is alkalmazható.

Betűk[szerkesztés | forrásszöveg szerkesztése]

A TrueType betűkészlet másodfokú Bézier görbékből összeállított Bézier splineokat használ a betűk megjelenítéséhez.

A korszerű képmegjelenítő rendszerek, mint a PostScript, Asymptote és a Metafont harmadfokú Bézier görbékből álló Bézier splineokkal rajzolja fel a betűket.

Különböző fokszámú görbék[szerkesztés | forrásszöveg szerkesztése]

Lineáris Bézier görbe[szerkesztés | forrásszöveg szerkesztése]

Adott a P0 és P1 pont, a lineáris Bézier görbe egyszerűen a két pontot összekötő egyenes szakasz. A görbét a

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

függvény írja le és ekvivalens a lineáris interpolációval.

Másodfokú Bézier görbe[szerkesztés | forrásszöveg szerkesztése]

A másodfokú Bézier görbét három pont: a P0, P1, és P2 határoz meg, és a B(t) függvény írja le:

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

A görbe a P0 ponttól indul a P1 pont irányába, majd elhajlik és a P2 pontban végződik. Más szavakkal mind a P0 mind a P2 pont érintője átmegy a P1 ponton. Ez közvetlenül látható a Bézier görbét leíró függvény deriváltjából:

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

A másodfokú Bézier görbe egyben egy parabola ív is.

Harmadfokú Bézier görbe[szerkesztés | forrásszöveg szerkesztése]

A harmadfokú Bézier görbét (egy síkban fekvő vagy térbeli elhelyezkedésű) négy pont: P0, P1, P2 és P3 definiál. A görbe a P0 pontból indul a P1 irányába és a P3 pontba érkezik a P2 irányából. Általában nem halad át a P1 vagy P2 ponton, ezek csak az irányokról adnak információt. A P0 és P1 pont közötti távolság azt határozza meg, hogy "milyen hosszan" halad a P2 irányába, mielőtt a P3 pont felé fordul. A görbe parametrikus egyenlete:

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

A P1 és P2 bizonyos elhelyezkedése önmagát metsző vagy csúcsos görbét eredményezhet.

Általánosítás[szerkesztés | forrásszöveg szerkesztése]

Az n-edfokú Bézier görbe a következőképpen általánosítható. Legyen n+1 pont: P0, P1,..., Pn, a Bézier görbe egyenlete:


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

ahol \scriptstyle {n \choose i} a binomiális együttható.

Például n = 5 esetre:


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

Ez az összefüggés az alábbi rekurzív formulával fejezhető ki: Jelölje \mathbf{B}_{\mathbf{P}_0\mathbf{P}_1\ldots\mathbf{P}_n} a P0, P1, ..., Pn pontokkal meghatározott Bézier görbét. Ezzel

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

Más szavakkal az n-edfokú Bézier görbe két (n – 1)-edfokú Bézier görbe közötti lineáris interpoláció.

Negyedfokú Bernstein polinomok a [0, 1] intervallumon.

Tulajdonságai[szerkesztés | forrásszöveg szerkesztése]

A parametrikus görbékhez néhány fogalom kapcsolódik. A Bézier görbe egyenlete

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

ahol a

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

polinomok az úgynevezett n-edfokú Bernstein polinomok, ahol t0 = 1 és (1 –; t)0 = 1.

Az \scriptstyle {n \choose i} binomiális együttható alternatív jelölése

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

A Pi pontokat a Bézier görbeéhez tartozó kontroll pontoknak hívják. A görbéhez tartozó keret a kontroll pontok egyenesekkel való összekötésével kialakított tört vonalsorozat.

  • A görbe a P0 pontnál kezdődik és a Pn pontnál ér véget. Ezt a módszert végpont interpolációnak hívják.
  • A görbe akkor és csakis akkor egyenes vonal, ha a kontroll pontok egy egyenesen fekszenek.
  • A görbe kezdőpontjának (végpontjának) érintője a keret első (utolsó) szakasza.
  • A görbét bármely pontjánál két részgörbére lehet vágni, mindkettő szintén Bézier-görbe.
  • Néhány egyszerűnek látszó görbe (például a kör) nem helyettesíthető pontosan Bézier görbével vagy szakaszaival, bár négy harmadfokú Bézier görbével közelített kör a pontos alakzattól mindössze egy ezredrésznyire tér el a kontroll pontok megfelelő felvételével.
  • Egy Bézier görbéhez rajzolt egyenközű ("párhuzamos") görbét néhány kivételtől eltekintve nem lehet Bézier görbével pontosan leírni.

Bézier görbék szerkesztése[szerkesztés | forrásszöveg szerkesztése]

Animation of a linear Bézier curve, t in [0,1]
Lineáris Bézier görbe animációja, 0 ≤ t ≤1

Lineáris görbe[szerkesztés | forrásszöveg szerkesztése]

A t paraméter a lineáris Bézier görbe esetén szemléletesen a B(t) távolságát jelenti a P0 ponttól a P1 irányában. Például t=0,25 esetén a B(t) a P0 ponttól P1 pontig terjedő távolság negyed részét tette meg. A B(t) egyenest ír le a P0 pont és a P1 pont között.

Másodfokú görbe[szerkesztés | forrásszöveg szerkesztése]

A másodfokú Bézier görbéknél a Q0 és Q1 segédpontot a t paraméter függvényében így lehet szerkeszteni: (t 0 és 1 között változik)

  • A Q0 pont helyzete P0 ponttól P1 pontig változik, miközben lineáris Bézier görbét ír le.
  • A Q1 pont helyzete P1 ponttól P2 pontig változik, miközben lineáris Bézier görbét ír le.
  • A B(t) pont helyzete Q0 ponttól Q1 pontig változik, miközben másodfokú Bézier görbét ír le.
Construction of a quadratic Bézier curve Animation of a quadratic Bézier curve, t in [0,1]
Másodfokú Bézier görbe szerkesztése Másodfokú Bézier görbe animációja, 0 ≤ t ≤ 1

Magasabb fokszámú görbék[szerkesztés | forrásszöveg szerkesztése]

Magasabb fokszámú görbékhez több közbenső pont szükséges. Harmadfokú görbéhez Q0, Q1, és Q2 közbenső pontot lehet szerkeszteni, ezek lineáris Bézier görbéket határoznak meg, az R0 és R1 pont pedig másodfokú Bézier görbét ír le:

Construction of a cubic Bézier curve Animation of a cubic Bézier curve, t in [0,1]
Harmadfokú Bézier görbe szerkesztése Harnmadfokú Bézier görbe animációja, 0 ≤ t ≤ 1

Negyedfokú görbéhez a Q0, Q1, Q2 és Q3 pont lineáris, az R0, R1 és R2 pont másodfokú és az S0 és S1 pont harmadfokú Bézier görbét határoz meg:

Construction of a quartic Bézier curve Animation of a quartic Bézier curve, t in [0,1]
Negyedfokú Bézier görbe szerkesztése Negyedfokú Bézier görbe animációja, 0 ≤ t ≤ 1

Fokszám emelés[szerkesztés | forrásszöveg szerkesztése]

Az n-edfokú Bézier görbét ugyanolyan alakú n + 1 görbévé lehet alakítani. Ez akkor hasznos, ha az adott szoftver csak bizonyos fokszámú Bézier görbéket támogat. Például rajzolható negyedfokú Bézier görbe a Cairo programmal is, holott az csak harmadfokú Bézier görbét használ.

A fokszám emeléshez az \mathbf{B}(t) = (1-t)\mathbf{B}(t) + t\mathbf{B}(t) egyenletből lehet kiindulni. Minden \mathbf{b}_{i,n}(t)\mathbf{P}_i tagot megszorozva (1 – t) vagy t szorzóval a fokszám eggyel emelkedik. Az alábbi példa a másodfokú görbe harmadfokúvá alakítását mutatja be:


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

Tetszőleges n fokszámra az alábbiak írhatók:

{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}
A P1 súlyának hatása a racionális Bézier görbe lefutására

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

ahol \mathbf{P}_{-1} és \mathbf{P}_{n+1} tetszőleges.

Az új kontroll pontok[1]:

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

Racionális Bézier görbék[szerkesztés | forrásszöveg szerkesztése]

Kúpszelet szakaszok pontosan megjeleníthetők racionális Bézier görbékkel

A racionális Bézier görbék további súlyokat adnak a függvényekhez abból a célból, hogy pontosabban közelítsék a kívánt alakot. A számláló súlyozott Bernstein-formájú Bézier görbe, a nevező pedig Bernstein polinomok súlyozott összege. A racionális Bézier görbék többek között kúpszelet szakaszok pontos megjelenítésére használhatók[2]

Legyen n + 1 darab Pi kontrollpont, a racionális Bézier görbe egyenlete:


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

vagy egyszerűen


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

Tudnivalók:

  • Bármilyen NURBS görbe hiba nélkül megadható racionális Bézier-görbék seregével is, amik a végpontjaiknál csatlakoznak. (A bizonyításhoz a NURBS csomópontvektorában minden csomópont multiplicitását k-ra kell növelni csomópontbeszúrásokkal, ha k-adfokú a NURBS, és így végül leolvashatóak a k-adfokú Bézier-görbék, amik a kibővített csomópontú NURBS szegmensei lesznek.)
  • Ennél több is elmondható: minden k dimenziós C(t) görbe, ami explicit felírható legfeljebb n-edfokú polinomokkal, felírható n-edfokú Bézier és B-Spline görbeként is, és minden k dimenziós C(t) görbe, ami felírható legfeljebb n-edfokú polinomok hányadosaival, felírható n-edfokú racionális Bézier-görbeként és NURBS-ként is. Helyesebb tehát a Béziert és a NURBS-ot reprezentációnak hívni, hiszen egy adott görbét több különböző módon is reprezentálhatunk, és kiválaszthatjuk a konkrét alkalmazás szempontjából számunkra legelőnyösebb, legkényelmesebb reprezentációt.
  • Racionális Bézier-görbék eltolási görbéje sem adható meg általában hiba nélkül racionális Bézier-görbékkel. Az ok leolvasható az eltolási görbe képletéből. Ha az eltolás értéke d, akkor: 
\mathbf{C}_{offset}(t) = \mathbf{C}(t) + d \cdot norm(t) = (x(t), y(t)) + \frac{d (\dot{y}(t), - \dot{x}(t)) }{\sqrt{\dot{x}(t)^2 + \dot{y}(t)^2}}
    A legnagyobb baj a hányadosban szereplő gyökjellel van, ugyanis, ha a gyökvonás nem végezhető el a deriváltak négyzetösszeg-polinomján szimbolikusan, akkor a helyébe írható Taylor-polinom végtelen számú nemnulla tagot fog tartalmazni. Ezt csak egy végtelen fokszámú racionális Bézier-görbével lehetne hibátlanul megadni. Jó megoldás nincs, ilyenkor az eltolási görbe jó közelítéshez vagy egy lényegesen magasabb fokszámú polinom kell (ami általában nem praktikus), vagy a kontrollpontok számát kell az elvárt hiba függvényében exponenciálisan megnövelni.

Jegyzetek[szerkesztés | forrásszöveg szerkesztése]

  1. Gerald Farin: Curves and surfaces for computer-aided geometric design. Elsevier Science & Technology Books 1997, ISBN 978-0-12-249054-5, 4. kiadás
  2. Neil Dodgson: Some Mathematical Elements of Graphics: Rational B-splines

Források[szerkesztés | forrásszöveg szerkesztése]

Ez a szócikk részben vagy egészben a Bézier curve című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel.

Külső hivatkozások[szerkesztés | forrásszöveg szerkesztése]

Commons
A Wikimédia Commons tartalmaz Bézier görbe témájú médiaállományokat.