Kisautók, rugalmas kötelek, bogarak és bodobácsok

bezier_icon

Egy kis rémisztő matematika azoknak, akik szeretik. Vagy már régebben dolgoznak vektoros ábrákkal, de sosem értették, mi is van mögötte…

Az egyenes szakaszt elsőfokú Bézier görbével reprezentáljuk. A következő függvénnyel kiszámítva minden pont koordinátáját, egyszerűen végigmegyünk a két csomópont (P0 ésP1)közötti legrövidebb szakaszon1.

B(t) = (1 – t) P0 + t P1 , ahol 0 ≤ t ≤ 1

240px-Bezier_1_big

1. ábra: Elsőfokú Bézier görbe (egyenes szakasz)

A másodfokú Bézier görbe egy parabolaív. Másodfokú függvényének képlete:

B(t) = (1 – t)2 P0 + 2(1 – t)t P1 + t2P2 , ahol 0 ≤ t ≤ 1

240px-Bezier_2_big

2. ábra: A másodfokú vagy kvadratikus Bézier görbe

Az első csomópont, az iránypont és a második csomópont egy háromszöget alkotnak. Az iránypont a görbe – útvonal – két csomópontjába húzott érintőinek metszéspontja.

A görbét a következőképpen képezhetjük: Indítsunk egyszerre egy kiskocsit az első csomópontból az iránypont felé, egy másik kiskocsit az iránypontból a második csomópont felé. A két kocsi között feszítsünk ki légvonalban egy rugalmas kötelet, ezen ugyanazon időben induljon el egy bogár az egyik kocsitól a másikig. Adott idő alatt mindhármójuknak célba kell érni. A két kocsi egyenes pályán halad. A bogár viszont egy parabolaív alakú pályát jár be a síkban, miközben ő úgy érzi, hogy mindig egyenesen halad a kötélen.

Ilyen kvadratikus, másodfokú Bézier görbéket használnak a True Type fontok, betűtípusok leírásához vagy az MS Paint program íveinek szerkesztéséhez.

A harmadfokú vagy köbös Bézier görbe a legáltalánosabb, minden vektorgrafikus program által használt megvalósítása a pontok közötti útvonalak leírásának. Klasszikus formája: két csomópont az útvonal végén, két iránypont mindegyik csomóponthoz kapcsolva, melyeket összekötve csomópontjukkal, megkapjuk a csomóponthoz húzott érintőt. Az iránypont távolsága csomóponttól itt a görbülettel arányos.

Az előbbi mechanikus hasonlatunkkal: A kezdő csomópontból indítunk autót az első iránypontba, az első iránypontból a második iránypontba, a második iránypontból pedig a záró csomópontba. Egyszerre három autót. Minden autónak ugyanannyi ideje van elérni a célját. Feszítsünk ki újra rugalmas köteleket az első-második és a második-harmadik autó közé. A korábbi módszerrel indítsunk el két bogarat a kifeszített kötélpályákon. Hogy a képzeletünket még inkább megterheljük, a két bogár között is feszítsünk ki egy kötelet, amelyen az egyik bogártól a másikig szaladjon át egy bodobács. A bogaraknak és a bodobácsnak is célba kell érni, míg az autók beérnek. A bodobács így az első csomópontból a másodikba jut, miközben egy görbe útvonalat ír le.

A bodobács által leírt pálya függvénye ebben az esetben:

B(t) = (1 – t)3 P0 + 3(1 – t)2t P1 + 3(1 – t)2t P2+ t3P3 , ahol 0 ≤ t ≤ 1

Bezier_3_big

3. ábra: A harmadfokú vagy köbös Bézier görbe

A köbös Bézier görbéket ebben a formában használják a vektorgrafikus programokban. Az ábrát kicsit leegyszerűsítve megkapjuk az útvonalvégi két csomópontot és az iránypontokat, melyek meghatározzák a görbületet.

Ha tovább növeljük a Bézier görbék fokszámát, olyan görbéket kapunk, melyeknél a két végponthoz, csomóponthoz kettőnél több iránypont is tartozik. A végpontok között e módszerrel egészen bonyolult, kacskaringózó görbéket is le tudunk írni. A gyakorlatban ezek a összetettebb görbék mindig visszavezethetők több szegmensű, harmadfokú Bézier görbékre. Főleg térbeli modellező programoknál használják ezeket az n-edfokú görbéket, úgynevezett „spline”-okat, vagy NURBS2 görbéket.

1Kitűnő animációkat találunk a Wikipedia Bézier görbe szócikkében: http://hu.wikipedia.org/wiki/B%C3%A9zier_g%C3%B6rbe illetve e helyen http://www.jasondavies.com/animated-bezier/ [2013. 02. 21]

2NURBS: nem egységes racionális B-spline. 3D-s tervező, animációs programokban organikus formák létrehozására szolgáló görbe vagy felület. Magas szintű NURBS modellező például az Autodesk Maya.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

This blog is kept spam free by WP-SpamFree.