3. Bezier görbe

3.1. A de Casteljau-algoritmus

A de Casteljau-algoritmus elemi lépésének vizsgálatához tekintsük a \(\textbf{b}_0\), \(\textbf{b}_1\) és \(\textbf{b}_2\) pontokat! Válasszunk egy tetszőleges \(t \in [0, 1]\) valós értéket!

  • Osszuk fel a \(\textbf{b}_0\) és \(\textbf{b}_1\) pontok közötti szakaszt \(t : (1 - t)\) arányban! Jelöljük az így kapott pontot \(\textbf{b}_0^1(t)\) formában!

  • Hasonlóképpen osszuk fel a \(\textbf{b}_1\) és \(\textbf{b}_2\) pontok közötti szakaszt! Jelöljük ezt \(\textbf{b}_1^1(t)\)-vel!

  • Osszuk fel a \(\textbf{b}_0^1(t)\) és \(\textbf{b}_1^1(t)\) közötti szakaszt, és jelöljük \(\textbf{b}_0^2(t)\)-vel!

Ezzel az eljárással egy görbét tudunk leírni, melyhez a segédpontokat a

\[\begin{split}\begin{align} \textbf{b}_0^1(t) &= (1 - t) \textbf{b}_0 + t \textbf{b}_1, \\ \textbf{b}_1^1(t) &= (1 - t) \textbf{b}_1 + t \textbf{b}_2 \\ \end{align}\end{split}\]

formában számíthatjuk ki, magának a görbének a pontjait pedig a

\[\textbf{b}_0^2(t) = (1 - t)\textbf{b}_0^1(t) + t \textbf{b}_1^1(t)\]

alakban, vagy közvetlenül az eredeti pontokból a

\[\textbf{b}_0^2(t) = (1 - t)^2 \textbf{b}_0 + 2t (1 - t)\textbf{b}_1 + t^2 \textbf{b}_2\]

formában.

\(\rhd\) Vizsgáljuk meg, hogy milyen pontokat kapunk, hogy ha a \(t\) a \([0, 1]\) intervallumon kívülre esik!

Vegyük észre, hogy az előbbiekben bemutatott felosztási módszert

  • tetszőleges számú pontra,

  • tetszőleges dimenziós térben

tudjuk alkalmazni! Ez a rekurzív eljárást nevezzük de Casteljau algoritmusnak.

\(\rhd\) Ábrázoljuk a görbe egy pontjának a meghatározását 4 pont esetén (egy szabadon választott \(t\) paraméterrel)!

\(\rhd\) Ábrázoljuk a pontok származtatási (számítási) viszonyait az előző esethez!

Megjegyzés

3.2. A Bernstein polinom

Az \(i\)-edik \(n\)-edfokú Bernstein polinomot az alábbi formában definiáljuk:

\[B_i^n(t) = \binom{n}{i} t^i (1 - t)^{n - i}, \quad i = 0, 1, \ldots, n.\]

Definíció szerint továbbá

\[B_0^0(t) = 1, \quad B_i^n(t) = 0, \text{ha } i \notin [0, n].\]

\(\rhd\) Ábrázoljuk az \(n\)-edfokú Bernstein polinomokat (a \(t \in [0, 1]\) intervallum felett)!

A Bernstein polinom tulajdonságai:

  • \(B_i^n(t) \geq 0\), ha \(t \in [0, 1]\),

  • \(B_i^n(t) = (1 - t)B_i^{n-1}(t) + t B_{i-1}^{n-1}(t), \forall t \in [0, 1]\) (rekurzív tulajdonság),

  • egységfelbontást alkotnak/normalizáltak:

\[\sum_{i=0}^n B_i^n(t) = (t + (1 - t))^n = 1, \quad \forall t \in [0, 1],\]
  • a deriváltjaik alacsonyabb fokú Bernstein polinomokkal felírhatók:

\[\left( B_i^n(t) \right)' = n(B_{i-1}^{n-1}(t) - B_{i}^{n-1}(t)),\]
  • \(\text{argmax}_t B_i^n(t) = \dfrac{i}{n}, \forall i \in [0, n]\).

3.3. A Bézier görbe paraméteres alakja

A de Casteljau algoritmus a Bézier görbe pontjait eredményezi. Ennek paraméteres alakja a Bernstein polinomok segítségével felírva:

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

A görbe számításához használt pontokat kontrollpontoknak vagy Bézier-pontoknak hívjuk.

3.4. Kapcsolat a de Casteljau algoritmussal

A de Casteljau algoritmusnál használt pontokat Bernstein polinomokkal a következőképpen írhatjuk föl:

\[\textbf{b}_i^r(t) = \sum_{j=0}^r \textbf{b}_{j+i} B_j^r(t),\]

ahol

\[r \in [0, n], i \in [0, n - r], \forall t \in [0, 1].\]

3.5. A Bézier görbe tulajdonságai

Zárt az affin transzformációkra.

  • A kontrollpontok transzformációjával kapott görbe megegyezik a pontonként transzformált görbével.

  • Ez praktikusan azt jelenti, hogy a görbe transzformálásához elegendő a kontrollpontokat transzformálni, majd abból kiszámítani a görbe pontjait.

  • A tulajdonság az arányos osztások következménye.

\(\rhd\) Hogyan definiálhatjuk a konvexitást?

\(\rhd\) Mit nevezünk konvex buroknak?

A Bézier görbe pontjai mindig a kontrollpontjainak a konvex burkában van.

  • Az állítás a de Casteljau algoritmus következménye.

  • Ez egyúttal garancia arra vonatkozóan is, hogy így a görbe nem fog hirtelen kiugrásokat tartalmazni (mint amilyenek a Lagrange interpolációnál előfordulhatnak).

A Bézier-görbe a paramétertartomány affin transzformációjára nézve invariáns.

  • Használhatunk tetszőleges \(t = (u - a) / (b - a), u \in [a, b]\) paraméterezést. A görbe alakja nem fog változni.

  • A pontok ugyan nem változnak meg, az érintővektorok (és így a bejárás sebessége) viszont igen.

  • Szintén a de Casteljau algoritmus következménye.

A Bézier görbe az első és az utolsó kontrollpontján áthalad (azokban interpolál).

A kontrollpontok bejárási sorrendjét megfordítva is ugyanazt a görbét kapjuk.

Globálisan változtatható. Minden kontrollpont hatással van a teljes görbe alakjára.

  • Mivel a \(t = i / n\) paraméternél a \(B_i^n\) polinom van a legnagyobb hatással a görbére, ezért lehet következtetni az alakváltozásra. Emiatt pszeudó-lokálisan változtatható görbének is szokták nevezni.

A görbe csak akkor lesz egyenes, hogy ha a kontrollpontok egy egyenesre esnek (más szóval kollineárisak).

3.6. A görbe deriváltja

A Bézier görbe deriváltjára vonatkozó felírási módok például az alábbiak.

\[\begin{split}\begin{align} \dot{\textbf{b}}(t) &= n \sum_{i=0}^n \textbf{b}_i (B_{i-1}^{n-1}(t) - B_i^{n-1}(t)) \\ &= n \sum_{i=1}^n \textbf{b}_i B_{i-1}^{n-1}(t) - n \sum_{i=0}^{n-1} \textbf{b}_i B_i^{n-1}(t)) \\ &= n \sum_{i=0}^{n-1} \textbf{b}_{i+1} B_i^{n-1}(t) - n \sum_{i=0}^{n-1} \textbf{b}_i B_i^{n-1}(t) \\ &= n \sum_{i=0}^{n-1}(\textbf{b}_{i+1} - \textbf{b}_i) B_i^{n-1}(t) \end{align}\end{split}\]

tetszőleges \(\forall t \in [0, 1]\) esetén.

3.6.1. Hodográf

Láthatjuk, hogy a Bézier görbe deriváltja (hodográfja) egy \((n-1)\)-edfokú Bézier-görbe.

  • Az eredeti kontrollpontokból képezzük a \(\Delta \textbf{b}_i = \textbf{b}_{i+1} - \textbf{b}_i\) vektorokat!

  • Vegyük ezek \(n\)-szeresét!

  • Toljuk ezeket az origóba!

  • A derivált az így kapott (\(n\) számú kontrollponthoz tartozó \((n-1)\)-edfokú) Bézier görbe lesz.

A hodográf segítségével vizsgálhatjuk a görbe tulajdonságait.

  • Hogy ha a hodográf átmegy az origón, akkor van olyan (elfajuló) pontja az eredeti görbének, amelynél az érintő nullvkektor.

  • Hogy ha a hodográfnak van az origón átmenő érintője amely inflexiós pontja, akkor az eredeti görbének van nulla görbületű pontja.

  • Hogy ha a hodográfnak van az origón átmenő érintője (amely nem szinguláris pont), akkor az eredeti görbének van inflexiós pontja.

3.6.2. Kapcsolat a de Casteljau algoritmussal

Vezessünk be a csúcspontok különbségére vonatkozóan egy külön jelölést!

\[\begin{split}\begin{align} &\Delta^0 \textbf{b}_i = \textbf{b}_i, \\ &\Delta^1 \textbf{b}_i = \textbf{b}_{i+1} - \textbf{b}_i, \\ &\Delta^2 \textbf{b}_i = \textbf{b}_{i+2} - 2 \textbf{b}_{i+1} + \textbf{b}_i, \\ &\ldots \\ &\Delta^r \textbf{b}_i = \sum_{k=0}^r \binom{r}{k} (-1)^{r-k} \textbf{b}_{i+k}. \end{align}\end{split}\]

A de Casteljau algoritmusnál használt \(\textbf{b}_i^k\) pontok segítségével a Bézier-görbe \(r\)-edik deriváltja felírható, mint

\[\dfrac{\mathrm{d}^r}{\mathrm{d}t^r} \textbf{b}(t) = \dfrac{\mathrm{d}^r}{\mathrm{d}t^r} \textbf{b}_0^n(t) = \dfrac{n!}{(n-r)!} \Delta^r \textbf{b}_0^{n-r}(t), \quad \forall t \in [0, 1].\]

Ez alapján láthatjuk, hogy

  • \(\textbf{b}_0^n\) a görbének a pontja,

  • \((\textbf{b}_0^{n-1}, \textbf{b}_1^{n-1})\) az értintőt határozza meg,

  • \((\textbf{b}_0^{n-2}, \textbf{b}_1^{n-2}, \textbf{b}_2^{n-2})\) a simulósíkot határozza meg.

3.7. A görbe kettévágása

Tekintsünk egy \(n\)-edfokú Bézier-görbét: \(\textbf{b}^n(t), t \in [0, 1]\)! Válasszunk egy tetszőleges \(c \in (0, 1)\) értéket! A megoldandó probléma, hogy hogyan találhatunk olyan \(n\)-edfokú, \(t \in [0, 1]\) intervallumon értelmezett Bézier-görbét, amely \(\textbf{b}^n(t), t \in [0, c]\) ívvel egyezik meg.

Jelöljük a keresett görbét \(\textbf{c}^n(u)\) alakban! A paramétere legyen \(u = t / c\) formában adott. Azon kontrollpontokat szeretnénk meghatározni, amelyekre teljesül majd, hogy

\[\textbf{b}^n(t) = \textbf{c}^n(u(t)) = \textbf{c}^n \left( \dfrac{t}{c} \right), \forall t \in [0, c].\]

A megoldást a de Casteljau algoritmus segítségével kaphatjuk meg. Szimmetria okok miatt egyidejűleg a kettévágással kapott mindkét görbét közel azonos módon határozhatjuk meg.

Jelöljük a de Casteljau algoritmusban szereplő közbülső pontokat általánosan \(\textbf{b}_i^j\) formában (ahol \((i + j) \in [0, n]\)).

A \([0, c]\) intervallumhoz tartozó görbe kontrollpontjai:

\[\textbf{b}_0^0, \textbf{b}_0^1(c), \textbf{b}_0^2(c), \ldots, \textbf{b}_0^{n-1}(c), \textbf{b}_0^n(c),\]

vagy röviden \(\textbf{c}_i = \textbf{b}_0^i(c)\).

A \([c, 1]\) intervallumhoz tartozó görbe kontrollpontjai:

\[\textbf{b}_n^0, \textbf{b}_{n-1}^1(c), \textbf{b}_{n-2}^2(c), \ldots, \textbf{b}_1^{n-1}(c), \textbf{b}_0^n(c),\]

vagy röviden \(\textbf{c}_i = \textbf{b}_{n-i}^i(c)\).

\(\rhd\) Ábrázoljuk egy negyedfokú görbén az összefüggést!

Megjegyzés

Mivel a kettévágás során számított kontrollpontok az eredeti görbe kontrollpontjainak a konvex burkában vannak, ezért

  • a két új görbe konvex burka az eredeti konvex burok valódi része lesz, és

  • az eljárás egyúttal mutatja a Bézier-görbe hullámzáscsökkentő tulajdonságát.

3.8. Hullámzáscsökkentés

A Bézier görbét egy sík legfeljebb annyi pontban metszi, mint a kontrollpoligonját.

Megjegyzés

Az egyenest az állításban, mint a sík egy alacsonyabb dimenziós esetét tekintjük.

Az állítás a de Casteljau algoritmussal bizonyítható, mivel a kontrollpoligon tulajdonképpen a görbéhez konvergál, így nem jelenhet meg új metszéspont.

3.9. Bézier-spline

A polinomok fokszámának alacsonyan tartása, és a lokális vezérelhetőség a Bézier-görbék használata kapcsán is fontos szempont lehet. A problémát ez esetben is az alacsonyabb fokszámú polinomos görbék egymáshoz illesztésével oldhatjuk meg.

A Bézier-spline-ok használatához az azokat felépítő Bézier-görbék kapcsolódási módjait kell megvizsgálnunk. Az egyszerűség kedvéért tekintsünk csak két görbét:

  • \(\textbf{a}(u), u \in [u_0, u_1]\), és

  • \(\textbf{b}(u), u \in [u_1, u_2]\).

Ezek kontrollpontjai rendre \(\{\textbf{a}_i\}_{i=0}^n\) és \(\{\textbf{b}_i\}_{i=0}^n\).

A kapcsolódás mértékének a leírásához egyaránt használjuk a \(C^k\) és \(G^k\) jelöléseket, ahol \(k \in \mathbb{N}_0\).

  • \(C^k\) esetében azt várjuk el, hogy a \(k\)-adik deriváltak teljes mértékben megegyezzenek.

  • \(G^k\) esetében elegendő, hogy ha a \(k\)-adik deriváltak iránya megegyezik.

\(C^1\) kapcsolódás esetében például az érintővektoroknak meg kell egyezniük, míg \(G^1\) kapcsolódás esetében elegendő, hogy ha az érintőegyenesek megegyeznek.

3.9.1. Nulladrendű kapcsolódás

\(C^0\) kapcsolódás esetén annyit szeretnénk csak elérni, hogy az

\[\textbf{a}(u_1) = \textbf{b}(u_1)\]

teljesüljön. Ehhez elegendő, hogy \(\textbf{a}_n = \textbf{b}_0\) teljesüljön.

3.9.2. Elsőrendben folytonos kapcsolódás

A \(G^1\) kapcsolódáshoz az

\[\textbf{a}_{n-1}, \textbf{a}_n = \textbf{b}_0, \textbf{b}_1\]

kontrollpontoknak egy egyenesre kell esniük.

A \(C^1\) kapcsolódáshoz a kollinearitáson kívül még teljesülnie kell az alábbi aránynak:

\[\lVert \textbf{a}_n - \textbf{a}_{n-1} \rVert : \lVert \textbf{b}_1 - \textbf{b}_0 \rVert = (u_1 - u_0) : (u_2 - u_1).\]

3.9.3. Másodrendben folytonos kapcsolódás

A \(G^2\) kapcsolódáshoz az

\[\textbf{a}_{n-2}, \textbf{a}_{n-1}, \textbf{a}_n = \textbf{b}_0, \textbf{b}_1, \textbf{b}_2\]

kontrollpontoknak egy síkba kell esniük. (Ez a sík a kapcsolódási pontbeli simulósík.)

A \(C^1\) kapcsolódáshoz nézzük meg, hogy milyen pontban metszik egymást a \(\textbf{a}_{n-2}\textbf{a}_{n-1}\) és a \(\textbf{b}_{1}\textbf{b}_{2}\) szakaszokhoz tartozó egyenesek! Jelöljük ezt \(\textbf{m}\)-mel!

Ezekre teljesülnie kell, hogy

\[\dfrac{\lVert \textbf{m} - \textbf{a}_{n-1} \rVert}{\lVert \textbf{a}_{n-1} - \textbf{a}_{n-2} \rVert} = \dfrac{u_2 - u_1}{u_1 - u_0}, \quad \dfrac{\lVert \textbf{m} - \textbf{b}_{1} \rVert}{\lVert \textbf{b}_{1} - \textbf{b}_{2} \rVert} = \dfrac{u_1 - u_0}{u_2 - u_1}.\]

Megjegyzés

A kapcsolódás folytonosságának a vizsgálata természetesen magasabb rendű esetekre is vizsgálható.

3.10. Fokszámnövelés

Praktikus lehet, hogy ha egy \(n\)-edfokú Bézier-görbéhez meg tudjuk határozni azt az \((n+1)\)-edfokú Bézier-görbét, amely ugyanazt a görbét írja le.

Tekintsünk egy \(\textbf{b}_0, \textbf{b}_1, \textbf{b}_2, \ldots, \textbf{b}_n\) kontrollpontokkal adott Bézier-görbét! Keressük azon \(\textbf{b}_0^1, \textbf{b}_1^1, \textbf{b}_2^1, \ldots, \textbf{b}_{n+1}^1\) kontrollpontokat, amelyekre teljesül, hogy

\[\sum_{i=0}^n \textbf{b}_i B_i^n(t) = \sum_{i=0}^{n+1} \textbf{b}_i^1 B_i^{n+1}(t), \quad \forall t \in [0, 1].\]

Ezt megoldva azt kapjuk, hogy

\[\textbf{b}_i^1 = \left( \dfrac{i}{n + 1} \right) \textbf{b}_{i-1} + \left(1 - \dfrac{i}{n + 1} \right) \textbf{b}_{i}.\]

Ez megadható a

\[\textbf{b}_i^1 = \textbf{b}_{i} + \dfrac{i}{n + 1} (\textbf{b}_{i-1} - \textbf{b}_{i})\]

alakban is.

Szemléletesen tehát azt vesszük észre, hogy a fokszámnövelés során az új kontrollpoligont az eredeti kontrollpoligon sarkainak a levágásával kapjuk.

  • Hogy ha a fokszámnövelést tetszőleges sokszor alkalmazzuk, akkor a kontrollpoligonunk a Bézier görbéhez fog tartani.

  • Fokszámot csökkenteni általában nem tudunk (legfeljebb közelíti, alacsonyabb fokszámú görbét megadni).

3.11. Töröttvonalas közelítés

A töröttvonalas közelítésre megjelenítés vagy az ívhossz számítása érdekében lehet például szükségünk.

Használhatunk például egyenközű felosztást a

\[t_i = a + i \dfrac{b - a}{n}\]

választással. A pontosabb közelítés és a hatékonyság érdekében érdemes azonban a görbületet is figyelembe vennünk. Ehhez használhatjuk például a következő algoritmust.

  • Keressük meg a \(\textbf{b}_0\) és a \(\textbf{b}_n\) pontokon átmenő egyenestől a legtávolabb eső kontrollpontot. Ennek az indexét jelöljük \(j\)-vel, a távolságát pedig \(m_j\)-vel!

  • Hogy ha \(m_j \leq \varepsilon\) teljesül, akkor kész vagyunk. A görbe a \(\textbf{b}_0\) és \(\textbf{b}_n\) pontokat összekötő szakasszal helyettesíthető.

  • Hogy ha nem teljesül, akkor osszuk fel a görbét a \(t = j / n\) paraméternél! Rekurzívan folytassuk a kirajzolást az így kapott két görbére!

Megjegyzés

Zárt görbék esetében a görbét kettévágva (\(t = 0.5\) paraméternél) már tudjuk alkalmazni az algoritmust.

3.12. Interpoláció

Megtehetjük, hogy úgy keressük egy Bézier-görbének a kontrollpontjait, hogy a kapott görbe bizonyos pontokon áthaladjon. Így tehát interpolációs problémák megoldására is használható közvetve az eredendően approximációs görbe.

Tekintsük az interpolációs alapfeladatot a \(\textbf{p}_0, \textbf{p}_1, \textbf{p}_2, \ldots, \textbf{p}_n\) interpolációs pontokkal, és \(0 \leq u_0 < u_1 < \cdots < u_n \leq 1\) paraméter értékekkel!

Keressük azokat a \({\textbf{b}_i}_{i=0}^n\) kontrollpontokat, amelyekre teljesül, hogy

\[\textbf{b}(u_i) = \textbf{p}_i, \quad i \in [0, n].\]

A Bernstein polinomos alakot felhasználva ebből adódik, hogy

\[\textbf{b}(u_i) = \sum_{j=0}^n B_j^n(u_i) \textbf{b}_j = \textbf{p}_i, \quad i \in [0, n].\]

Ezt mátrixos alakra hozva a következő (inhomogén lineáris) egyenletrendszert kapjuk:

\[\begin{split}\begin{bmatrix} B_0^n(u_0) & B_1^n(u_0) & \cdots & B_n^n(u_0) \\ B_0^n(u_1) & B_1^n(u_1) & \cdots & B_n^n(u_1) \\ B_0^n(u_2) & B_1^n(u_2) & \cdots & B_n^n(u_2) \\ \vdots & \vdots & \ddots & \vdots \\ B_0^n(u_n) & B_1^n(u_n) & \cdots & B_n^n(u_n) \\ \end{bmatrix} \cdot \begin{bmatrix} \textbf{b}_0 \\ \textbf{b}_1 \\ \textbf{b}_2 \\ \vdots \\ \textbf{b}_n \\ \end{bmatrix} = \begin{bmatrix} \textbf{p}_0 \\ \textbf{p}_1 \\ \textbf{p}_2 \\ \vdots \\ \textbf{p}_n \\ \end{bmatrix}.\end{split}\]

Feltételezve, hogy az \(u_i\) értékek különbözőek, az egyenletrendszereket (koordinátánként megoldva) mindig lesz egyértelmű megoldásunk.

3.13. Kérdések, elméleti feladatok

  • Mi az a de Casteljau algoritmus? (Mutassa be ábrával, számításokkal szemléltetve!)

  • Definiálja az \(n\)-edfokú Bernstein polinomot! Milyen tulajdonságai vannak?

  • Hogyan írható fel a Bézier görbe paraméteres alakja a Bernstein polinom segítségével?

  • Milyen kapcsolat van a de Casteljau algoritmus és a Bernstein polinomok között?

  • Ismertesse a Bézier görbe tulajdonságait!

  • Mit nevezünk hodográfnak? Hogyan írható ez fel a Bézier görbe esetében?

  • Milyen kapcsolat van a Bézier görbe deriváltja és a de Casteljau algoritmus között?

  • Hogyan tudunk egy Bézier görbét a \(c \in \mathbb{R}\) paraméterénél kettévágni?

  • Hogyan tudunk Bézier görbékből Bézeier-spline-t készíteni? Milyen módon garantálhatóak a nullad-, első- és másodrendű folytonosságok?

  • Hogyan tudjuk egy Bézier görbének növelni a fokszámát?

  • Hogyan érdemes a Bézier görbére töröttvonalas közelítést adni? (Mutassa be az erre vonatkozó algoritmust!)

  • Hogyan tudjuk Bézier görbe segítségével megoldani az interpolációs problémát!

3.14. Számítási feladatok

Megjegyzés

A számításokat 4 tizedesjegy pontossággal végezze!

Tegyük fel, hogy adottak a \(\textbf{p}_0 = (0, 0), \textbf{p}_1 = (2, 5), \textbf{p}_2 = (4, 3), \textbf{p}_3 = (5, -1)\) kontrollpontok.

  • Számítsa ki a Bézier-görbe pontját a \(t = 0.4\) paraméterértéknél de Casteljau algoritmus segítségével!

  • Határozza meg a Bézier-görbe pontját a \(t = 0.2\) paraméternél a Bernstein polinomos paraméteres alak segítségével!

  • Határozza meg a görbe érintőjét a \(t = 0.3\) paraméternél!

  • Írja fel a görbe érintőjének egyenletét és a ponthoz tartozó normálvektort a \(t = 0.4\) pontban!

  • Vágjuk ketté a görbét a \(t = 0.25\) paraméternél! Határozzuk meg mindkét kapott görbének a kontrollpontjait!

  • Számítsuk ki annak az 5-ödfokú görbének a kontrollpontjait, amely ugyanezt a görbét állítja elő!

3.15. Programozási feladatok

3.15.1. A de Casteljau algoritmus

  • Implementáljuk a de Casteljau algoritmust!

  • Rajzoljuk be egy adott pont számítása esetén a segédvonalakat!

  • Oldjuk meg, hogy a kijelölt ponthoz tartozó \(t\) paramétert lehessen módosítani (például csúszkával vagy görgővel)!

3.15.2. Binomiális együtthatók számítása

  • Ábrázoljuk az \(n\)-edfokú Bernstein polinomokat! (Rögzített \(n\) esetén, vagy oldjuk meg, hogy a programban megadható legyen tetszőleges \(n\) érték!)

  • Vizsgáljuk meg a binomiális együttható faktoriálisokkal és rekurzív formulával történő számítási módját!

  • Utóbbinál vizsgáljuk meg a gyorsítótárazás hatását!

  • Készítsünk méréseket és ábrázoljuk a kapott eredményeket!

3.15.3. Görbe kettévágása

  • Készítsünk egy alkalmazást a görbe kettévágásának szemléltetésére!

  • Színekkel különítsük el a kettévágással kapott görbék kontrollpontjait!

  • Oldjuk meg, hogy a kettévágáshoz használt paramétert lehessen megadni/módosítani!

3.15.4. Fokszám növelése

Implementáljunk egy algoritmust, amellyel interaktív módon (a görbe kontrollpontjainak módosíthatóságát megtartva) tudjuk egy Bézier görbének növelni a fokszámát!

3.15.5. Görbe megjelenítése

Implementáljuk a Bézier-görbe megjelenítéséhez azt az algoritmust, amelyik igyekszik minimalizálni a szükséges szakaszok számát a töröttvonalas megjelenítésnél!

3.15.6. Bézier interpoláció

Implementáljunk egy alkalmazást, amely \((n+1)\) pontra megoldja a Bézier interpolációs problémát! Hasonlítsuk össze a Lagrange és a Bézier interpolációs görbéket azonos kontroll pontok esetében!

3.16. További feladatok

  • Vizsgáljuk meg, hogy egy Bézier görbékkel határolt síkidomnak hogyan tudjuk kiszámítani/közelíteni a területét!

  • Vizsgáljuk meg, hogy milyen lehetőségek vannak az Bézier approximáció és interpoláció egyidejű használatára vonatkozóan!

  • Tegyük fel, hogy tetszőleges sok pontra szeretnénk egy \(n\)-edrendű Bézier görbét illeszteni! Vizsgáljuk meg a szóbajöhető approximációs, optimalizálási módszereket!

  • Hasonlítsa össze a konvergencia sebességét a Bézier görbe kettévágása és a fokszámnövelés viszonylatában!

  • Implementáljunk egy alkalmazást, amely egy zárt Bézier görbén belül pattogó pontot jelenít meg!

  • Hogyan tudunk kontrollpontokon áthaladó (interpoláló) \(G^1\) folytonos görbét megadni úgy, hogy az csak egyenes szakaszokból és körívekből áll, ismerjük ezek arányát, és minimális a görbe hossza?