Bézier-görbe

A Wikipédiából, a szabad enciklopédiából
(Bézier görbe szócikkből átirányítva)
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.

A 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észtervezé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 való 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 kontrollpontjaik mozgatásával. Affin transzformációjuk, mint például a transzláció és a rotáció, könnyen elvégezhető kontrollpontjaik 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ő kontrollpontok egy egyenesen fekszenek.

A Bézier-görbe raszterré alakításának legegyszerűbb módja az, ha sok közel fekvő 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 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örbéhez tartozó kontrollpontoknak hívják. A görbéhez tartozó keret a kontrollpontok 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 kontrollpontok 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 kontrollpontok 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 Harmadfokú 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ú, az S0 és S1 pont pedig 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ámemelé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 kontrollpontok[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úpszeletszakaszok 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.