5. Racionális görbék

  • Egységes leírási módra való törekvés

  • NURBS - Non-Uniform Rational B-Spline

5.1. Racionális Bézier görbe

A racionális Bézier görbe az eddig vizsgált Bézier görbe egy lehetséges általánosítása.

5.1.1. Definíció

Legyenek adottak

  • a \(\{\textbf{b}_i\}_{i=0}^n\) kontrollpontok, és

  • a \(\{w_i\}_{i=0}^n\) nemnegatív súlyértékek (\(\sum_{i=0}^n w_i \neq 0\)).

Az \(n\)-edfokú racionális Bézier-görbét az alábbi formában definiáljuk:

\[\textbf{b}(t) = \sum_{i=0}^n \dfrac{w_i B_i^n(t)}{\sum_{j=0}^n w_j B_j^n(t)} \textbf{b}_i, \quad t \in [0, 1].\]

5.1.2. A görbe tulajdonságai

Amennyiben csak nemnegatív súlyokat engedünk meg, akkor a racionális Bézier görbe a kontrollpontok konvex burkán belül marad.

Bizonyítás

Vizsgáljuk meg a görbe felírásában az alapfüggvényeket:

\[\dfrac{w_i B_i^n(t)}{\sum_{j=0}^n w_j B_j^n(t)}, \quad t \in [0, 1], i = 0, 1, \ldots, n.\]
  • Látható, hogy a kifejezés nemnegatív.

  • Az \(i \in [0, n]\) indexek feletti összegzésükkor látható, hogy a nevező azonos, a számláló pedig meg fog egyezni a nevezővel, így összegben 1-et fog eredményezni.

Így tehát garantált, hogy konvex kombinációról van szó, vagyis a görbe pontjai a kontrollpontok konvex burkán belül fognak maradni. \(\square\)

További tulajdonságok:

  • Hogy ha a kontrollpontok sorrendjét (a pontokhoz tartozó súlyokat megtartva) fordított sorrendben vesszük, akkor is ugyanazt a racionális Bézier görbét kapjuk.

  • A görbe globálisan változtatható.

  • A végpontokban interpolál.

  • A végpontokban a görbe érintője egybeesik a végpont és az a melletti kontrollponton áthaladó egyenessel.

  • A görbét bármely sík (2 dimenzióban egyenes) legfeljebb annyi pontban metszi, mint a kontrollpoligonját. (Hullámzáscsökkentő tulajdonság)

  • A görbe a paraméterének affin transzformációjára nézve invariáns.

  • A görbe a kontrollpontjainak projektív transzformációjára nézve zárt.

5.1.3. Kúpszeletek leírása

Egy kúpnak a metszete az alábbi alakzatot eredményezheti:

  • parabola,

  • ellipszis,

  • hiperbola.

A másodfokú Bézier-görbe parabolaívet ad, így ezt már ismertnek tekinthetjük.

Tekintsük a \(w_0 = 1, w_2 = 1\) esetet! A \(w_1\) megválasztásától függően kaphatjuk az említett 3 görbe típus valamelyikét. Végeredményben azt kapjuk, hogy

  • \(0 < w_1 < 1\) esetén ellipszis,

  • \(w_1 = 1\) esetén parabola,

  • \(w_1 > 1\) esetén hiperbola

amit kapunk.

5.1.4. Racionális de Casteljau-algoritmus

A de Casteljau algoritmust kisebb módosítással használhatjuk racionális Bézier-görbék pontjainak a kiszámítására is. A közbülső pontok meghatározásához a súlyokat \(t\) paraméter függvényében kell tudnunk változtatni. Ez az \(r\)-edik lépésre nézve konkrétan az alábbit jelenti:

\[w_i^r(t) = (1 - t)w_i^{r-1}(t) + t w_{i+1}^{r-1}(t).\]

Ezeket a súlyokat aztán a közbülső pontok kiszámításához a

\[\textbf{b}_i^r(t) = (1-t)\dfrac{w_i^{r-1}(t)}{w_i^r(t)}{w_i^r(t)}\textbf{b}_i^{r-1} + t\dfrac{w_{i+1}^{r-1}(t)}{w_i^r(t)}\textbf{b}_{i+1}^{r-1}(t),\]

ahol

\[r = 1, \ldots, n, i = 0, 1, \ldots, n - r,\]

továbbá az \(r = 0\) lépésben

\[w_i^0 = w_i, \textbf{b}_i^0 = \textbf{b}_i, \quad i = 0, 1, \ldots, n.\]

A görbe pontját a \(\textbf{b}(t) = \textbf{b}_0^n(t)\) alakban kapjuk (ahol \(t \in [0, 1]\)).

Megjegyzés

Ez az algoritmus is alkalmas a görbe kettévágására.

5.2. Racionális B-spline görbe

Ezt nevezik NURBS (Non-Uniform Rational B-Spline) görbének. Valójában inkább nem feltétlenül uniform görbék halmazáról van szó, mivel a súlyokat megválaszthatjuk azonosnak is.

5.2.1. Definíció

Jelölje

  • \(N_i^k\) az \(i\)-edik \((k-1)\)-edfokú normalizált B-spline alapfüggvényt!

  • Legyenek adottak a \(\{\textbf{d}_i\}_{i=0}^n\) kontrollpontok (vagy más néven de Boor pontok),

  • az \(\{u_i\}_{i=0}^{n+k}\) csomóértékek, és

  • a \(\{w_i\}_{i=0}^n\) nemnegatív súlyok (amelyek nem azonosan nulla értékűek).

A \(k\)-adrendű (vagy más szóval \((k-1)\)-edfokú) racionális B-spline görbét az alábbi módon definiáljuk:

\[\textbf{s}(u) = \sum_{i=0}^n \textbf{d}_i \dfrac{w_i N_i^k(u)}{\sum_{j=0}^n w_j N_j^k(u)}, u \in [u_{k-1}, u_{n+1}], 1 < k \leq n + 1.\]

5.2.2. Tulajdonságai

A B-spline görbék számos tulajdonsága szerencsére a racionális B-spline görbék esetében is megmarad.

  • Hogy ha a végpontokban a multiplicitás \((k - 1)\), akkor a görbe a végpontokban interpolál.

  • Az előbbi esetben teljesül az is, hogy az érintők a végpontokban a görbe végeinél lévő 2 kontrollpont által meghatározott egyenesek lesznek.

  • A görbe lokálisan módosítható.

  • Egy \(\textbf{s}(u)\) görbe \(u \in [u_i, u_{i+1})\) íve (ahol \(i = k - 1, k, \ldots, n\)) a (\(k\) darab \(\{\textbf{d}_j\}_{j=i-k+1}^i\) kontrollpont konvex burkában van, a teljes görbe pedig ezen konvex burkok uniójában.

  • Hullámzáscsökkentő tulajdonság: A görbét bármely sík (2 dimenzióban egyenes) legfeljebb annyi pontban metszi, mint a kontrollpoligonját.

  • Hogy ha a végpontokban a csomóértékek multiplicitása \((k - 1)\), és nincs különböző közbülső csomóérték, akkor Bézier-görbét kapunk.

5.2.3. Racionális de Boor-algoritmus

A de Casteljau algoritmushoz hasonlóan a de Boor-algoritmusnak is van racionális görbékre vonatkozó változata.

5.3. Alkalmazási területek

5.3.1. Skálázható vektorgrafika

Az alapvető elemei:

5.3.1.1. Path parancs

Elvégezhető műveletei:

  • M: Move To

  • L: Line To

  • H: Horizontal

  • V: Vertical

  • Z: Close Path

A kisbetűs változatok a relatívak az utolsó megadott ponthoz képest.

5.3.1.2. Curve parancs

5.3.2. HTML5 Canvas

\(\rhd\) Vizsgáljuk meg, hogy más programozási nyelvek, függvénykönyvtárak esetében hogyan tudunk Bézier görbéket rajzolni!

5.3.3. PostScript

5.3.4. TikZ

5.3.5. WaveFront OBJ formátum

5.3.6. Vektorgrafikus szerkesztők

Megjegyzés

A Bézier görbék nem vektorgrafikus szerkesztőkben is megjelennek, mint például a path eszköz a GIMP esetében.

5.3.7. Betűtípusok tervezése

Font systems:

Apple, font design:

5.4. Kérdések

  • Hogyan definiálható a racionális Bézier görbe?

  • Mi az előnye a racionális Bézier görbének a Bézier görbéhez képest? Milyen tulajdonságokat örököl át?

  • Hogyan írhatunk le kúpszeleteket racionális Bézier görbék segítségével?

  • Hogyan definiálható a racionális B-spline görbe?

  • Milyen tulajdonságai vannak a racionális B-spline görbéknek?

5.5. Programozási feladatok

5.5.1. Racionális Bézier görbe

  • Implementálja a görbét!

  • Oldja meg, hogy a csomóértékeket és a súlyokat is interaktív módon lehessen változtatni!

  • Adjon közelítést a görbe hosszára!

5.5.2. Racionális B-spline görbe

  • Implementálja a görbét!

  • Oldja meg, hogy a csomóértékeket és a súlyokat is interaktív módon lehessen változtatni!

  • Adjon közelítést a görbe hosszára!

5.6. További feladatok

  • Vizsgálja meg, hogy milyen pontossággal lehet közelíteni a racionális Bézier görbéket Bézier görbékkel!

  • Vizsgálja meg, hogy milyen pontossággal lehet közelíteni a racionális B-spline görbéket B-spline görbékkel!

  • Legyen adott egy nagy elemszámú ponthalmaz, amelyre görbét szeretnénk illeszteni. (Feltételezzük, hogy a görbe nem tud minden ponton áthaladni majd.) Oldjuk meg a görbe illesztését, mint optimalizálási feladatot a megfelelő kontrollpontok, csomóértékek és súlyértékek megválasztásával!