7. További felület típusok

7.1. Coons foltok

A spline-okhoz hasonlóan a felületek esetében is adódik a lehetőség, hogy a teljes felület leírását kisebb részek összekapcsolásával oldjuk meg. Ezeket foltoknak nevezzük, amelyek jellemzően egy téglalap vagy háromszög alakú paramétertartományból kerülnek leképzésre, így végeredményben görbe ívekből összeállított négyszöget vagy háromszöget kaphatunk.

A Coons foltok esetében görbe oldalú négyszögeket szeretnénk előállítani. Ehhez tekintsük az \(u \in [0, 1]\) és \(v \in [0, 1]\) tartományokat. (Ezt jelölhetjük az \((u, v) \in [0, 1] \times [0, 1]\), vagy rövidebben az \((u, v) \in [0, 1]^2\) formában.)

Tekintsük az \(\textbf{a}_1(u), \textbf{a}_2(u), \textbf{b}_1(v), \textbf{b}_2(v)\) görbéket! Keressük azt az \(\textbf{s}(u, v)\) felületet, amelyre teljesülnek az alábbi feltételek:

\[\begin{split}\begin{align} \textbf{s}(u, 0) &= \textbf{a}_1(u), \\ \textbf{s}(u, 1) &= \textbf{a}_2(u), \\ \textbf{s}(0, v) &= \textbf{b}_1(v), \\ \textbf{s}(1, v) &= \textbf{b}_2(v). \\ \end{align}\end{split}\]

7.1.1. Bilineárisan súlyozott Coons folt

Az \(\textbf{a}_1\) és \(\textbf{a}_2\) görbékkel, illetve a \(\textbf{b}_1\) és \(\textbf{b}_2\) görbékkel két vonalfelületet is elő tudunk állítani:

\[\begin{split}\begin{align} \textbf{l}_{a}(u, v) &= (1 - v)\textbf{a}_1(u) + v \textbf{a}_2(u), \\ \textbf{l}_{b}(u, v) &= (1 - u)\textbf{b}_1(v) + u \textbf{b}_2(v). \\ \end{align}\end{split}\]

Egyszerűen látható, hogy az \(\textbf{l}_{a}(u, v)\) felület csak az \(\textbf{a}_1(u)\) és \(\textbf{a}_2(u)\) görbékre fog biztosan illeszkedni, míg az \(\textbf{l}_{b}(u, v)\) felület csak a \(\textbf{b}_1(v)\) és \(\textbf{b}_2(v)\) görbékre.

Tekintsük a csúcspontok bilineáris kombinációját, amelyet például az alábbi formában számolhatunk:

\[\begin{split}\textbf{l}_{ab}(u, v) = \begin{bmatrix} (1 - u) & u \\ \end{bmatrix} \begin{bmatrix} \textbf{s}(0, 0) & \textbf{s}(0, 1) \\ \textbf{s}(1, 0) & \textbf{s}(1, 1) \\ \end{bmatrix} \begin{bmatrix} 1 - v \\ v \\ \end{bmatrix}.\end{split}\]

Ennek a segítségével a Coons foltot az alábbi formában kapjuk:

\[\textbf{s}(u, v) = \textbf{l}_{a}(u, v) + \textbf{l}_{b}(u, v) - \textbf{l}_{ab}(u, v).\]

Megjegyzés

A bilineárisan súlyozott Coons folt esetében a bilineáris az előállítási módra vonatkozik. Maga az \(\textbf{l}_{ab}(u, v)\) az, ami a csúcspontok bilineáris súlyozásával áll elő, mint felület. Egyszerűen látható, hogy így a bilineáris felületek a Coons foltok egyenes szakaszokkal leírt speciális esetei.

7.1.2. Bikubikus Coons folt

A bilineáris súlyozás esetében a folthoz a határoló görbéket adtuk meg. Előfordulhat azonban, hogy (például más felületdarabokhoz való illesztés miatt) a görbék mentén az érintővektorokat is rögzíteni szeretnénk. Ez a határoló görbéken a keresztirányú deriváltak megadását jelenti.

A folt szélein az érintőket, mint függvényt adhatjuk meg. Legyenek adottak

  • az \(\textbf{a}_1(u)\), \(\textbf{a}_2(u)\), \(\textbf{b}_1(v)\), \(\textbf{b}_2(v)\) határoló görbék,

  • az \(\textbf{a}_{1v}(u)\), \(\textbf{a}_{2v}(u)\), \(\textbf{b}_{1u}(v)\), \(\textbf{b}_{2u}(v)\) keresztirányú deriváltakat leíró függvények,

  • az \(\textbf{s}_{uv}(0, 0)\), \(\textbf{s}_{uv}(0, 1)\), \(\textbf{s}_{uv}(1, 0)\), \(\textbf{s}_{uv}(1, 1)\) twist vektorok.

A megoldandó feladat, hogy találjunk egy olyan \(\textbf{s}(u, v)\) felületet, amely teljesíti az alábbiakat:

  • \(\textbf{s}(u, 0) = \textbf{a}_1(u)\), \(\textbf{s}(u, 1) = \textbf{a}_2(u)\), \(\textbf{s}(0, v) = \textbf{b}_1(v)\), \(\textbf{s}(1, v) = \textbf{b}_2(v)\),

  • \(\textbf{s}_v(u, 0) = \textbf{a}_{1v}(u)\), \(\textbf{s}_v(u, 1) = \textbf{a}_{2v}(u)\), \(\textbf{s}_u(0, v) = \textbf{b}_{1u}(v)\), \(\textbf{s}_u(1, v) = \textbf{b}_{2u}(v)\),

bármely \(u, v \in [0, 1]\) esetén.

A probléma megoldása annyiban különbözik a bilineáris súlyozásos foltokétól, hogy itt nem egyenes szakaszokat használunk, hanem Hermit íveket, így a folt széleinél figyelembe tudjuk venni a keresztirányú érintőket.

7.1.3. Hermite-féle bikubikus folt

A bikubikus foltoknak egy speciális eseteként tekinthetjük a Hermite-féle bikubikus foltokat. Ennél a határoló görbéket Hermite íveknek válasszuk meg. A folttal kapcsolatos elvárások megegyeznek. Tulajdonképpen a konkrét görbe ismeretében adódnak lehetőségek a számítások konkretizálására, egyszerűsítésére.

Megjegyzés

Foltok összekapcsolása esetén külön problémát jelent a twist vektorok meghatározása úgy, hogy azok az illeszkedési pontokban megegyezzenek.

7.2. Bézier-felület

A felületek görbék tenzori szorzataként való előállításánál nem konkretizáltuk, hogy milyen típusú görbékről van szó. Amennyiben ezek Bézier-görbék, akkor Bézier-felületeket kapunk.

7.2.1. Definíció

Legyenek adottak a \(\{\textbf{b}_{ij}\}_{i=0,j=0}^{n,m}\) kontrollpontok (összességében a belőlük alkotott kontrollháló). Az \((n, m)\)-fokú Bézier-felületet az alábbi felírással kapjuk:

\[\textbf{s}(u, v) = \sum_{i=0}^{n} \sum_{j=0}^m \textbf{b}_{ij} B_i^n(u) B_j^m(v), \quad (u, v) \in [0, 1]^2.\]

7.2.2. Tulajdonságok

  • Mindegy, hogy a kontrollháló poligonjain milyen irányból haladunk végig, ugyanazt a Bézier-felületet fogjuk kapni. (Szimmetria tulajdonság)

  • A határoló görbék illeszkednek a felületre, de a kontrollháló többi pontja általában nem. (Approximációs jelleg)

  • A felület bármely pontjához tartozó paramétervonalak Bézier-görbék (\(n\)-ed és \(m\)-ed fokúak).

  • A felület pontját a de Casteljau algoritmussal számíthatjuk. Sorrendet tekintve mindegy, hogy az \(u\) vagy a \(v\) paraméterű görbéből indulunk ki, ugyanazt a felületi pontot fogjuk kapni. A számítási igény viszont különbözni fog (hogy ha \(n \neq m\)).

  • A felületet a de Casteljau algoritmus segítségével a paramétervonalainál kettévághatjuk.

  • A felület a kontrollhálójának affin transzformációjával szemben invariáns.

  • A felület a kontrollháló pontjainak (egyszerűbben a kontrollpontoknak) a konvex burkában van. Ez tekinthető annak a következményének, hogy a felület pontjait a kontrollpontok konvex kombinációjaként kaphatjuk meg.

  • A felület invariáns a paramétertartomány affin transzformációjára.

A Bézier-felület esetében is tudjuk alkalmazni a Bézier-görbéknél megismert fokszámnövelési módszert.

7.2.3. A de Casteljau algoritmus térben

A szakaszok esetében egy paraméterünk van, így az arányos osztást egyszerűen az \(u : (1 - u)\) felosztással meg tudtuk tenni.

Térben, háromszög esetében baricentrikus koordinátákat tudunk használni. Így, az eredeti de Casteljau algoritmust felületekre is tudjuk általánosítani, amellyel Bézier háromszögeket tudunk leírni.

7.3. B-spline felületek

Felületeket tenzori szorzatként B-spline görbék felhasználásával is létre tudunk hozni.

7.3.1. Definíció

Legyenek adottak

  • a \(\{\textbf{d}_{ij}\}_{i=0,j=0}^{n,m}\) kontrollpontok (de Boor-pontok),

  • az \(N_i^k\) (\(i\)-edik \((k-1)\)-edfokú) és az \(N_j^L\) (\(j\)-edik \((l-1)\)-edfokú) normalizált B-spline alapfüggvények,

  • az \(u_0 \leq u_1 \leq \cdots \leq u_{n+k}\) és \(v_0 \leq v_1 \leq \cdots v_{m+l}\) csomóértékek, ahol \(1 < k \leq (n + 1)\) és \(1 < l \leq (m + 1)\).

A B-spline felületet az

\[\textbf{s}(u, v) = \sum_{i=0}^{n} \sum_{j=0}^m \textbf{d}_{ij} N_i^n(u) N_j^m(v)\]

alakban definiálhatjuk, ahol \((u, v) \in [u_{k-1}, u_{n+1}] \times [v_{l-1}, v_{m+1}]\).

7.3.2. Tulajdonságok

  • A felület paramétervonalai B-spline görbék.

  • A felület lokálisan módosítható. A \(\textbf{d}_{ij}\) kontrollpont elmozdítása csak az \((u, v) \in [u_i, u_{i+k}] \times [v_j, v_{j+l}]\) tartomány feletti felületrészre van hatással.

  • A felület egy \((u, v) \in [u_i, u_{i+1}) \times [v_j, v_{j+1})\) pontja a \([\textbf{d}_{rs}]_{r=i-k+1,s=j-l+1}^{i,j}\) kontrollpontjainak konvex burkában van.

  • A felület pontjait a de Boor algoritmus segítségével is meghatározhatjuk. Az iránytól függetlenül ugyanazt a pontot fogjuk kapni, viszont a számítási lépések száma különbözhet.

7.4. Racionális felületek

A felület tenzori szorzatként való előállításához racionális görbéket is használhatunk.

  • Racionális Bézier-görbék alkalmazása esetén racionális Bézier-felületet kapunk.

  • Racionális B-spline görbék alkalmazása esetén racionális B-spline felületet kapunk.

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

  • Mit nevezünk Coons foltnak? Hogyan számítható ennek a bilineáris esete?

  • Definiálja a Bézier felületeket, és adja meg a jellegzetes tulajdonságaikat!

  • Definiálja a B-spline felületeket, és adja meg a jellegzetes tulajdonságaikat!

7.6. Számítási feladatok

Egy bilineárisan súlyozott Coons foltnak adott a 4 határoló görbéje.

  • Vizsgálja meg, hogy a 4 görbe megfelelően illeszkedik-e egymáshoz!

  • Határozza meg a felület pontját egy adott \((u, v)\) paraméternél!

7.7. Programozási feladatok

7.7.1. Coons foltok

  • Implementáljon egy programot, amely segítségével vizsgálhatók a 4 darab Hermit-ívvel körülhatárolt, bilineáris Coons foltok!

7.7.2. Bézier felületek

  • Készítsen egy programot, amely egy \(4 \times 4\)-es kontrollháló alapján megjelenít egy Bézier felületet!

  • Oldja meg, hogy a kontrollháló megjelenítését be- és ki lehessen kapcsolni!

  • Készítsen a programba két csúszkát, amellyel meg lehet adni egy \((u, v)\) párt, és jelenítse meg az ezekhez tartozó paramétervonalakat!

  • Jelenítse meg az \((u, v)\) paraméterekhez tartozó iránymenti deriváltakat és a normálvektort!

  • Adjon közelítést a felület felszínére!

  • Implementálja a fokszámnövelést!

7.8. További feladatok

  • Adjon közelítést Bézier felületek segítségével gömbre!

  • Mutassa be a gömbfelület megadásának néhány lehetséges módját racionális B-spline felületek esetében!

  • Vizsgálja meg a Bézier görbék alkalmazásának lehetőségeit hengeres koordinátarendszer esetében!

  • Vizsgálja meg a B-spline görbék alkalmazásának lehetőségeit gömbi koordinátarendszerben!

  • Tegyük fel, hogy a térben adott nagy mennyiségű pontunk! Készítsen egy algoritmust, amely egy adott \((n, m)\)-edfokú Bézier-felület segítségével közelíti a pontok elhelyezkedését! Végezzen hibabecslést az \(n\) és az \(m\) paraméterek függvényében!

  • Tegyük fel, hogy adott egy \((n, m)\)-edfokú Bézier-felület! Vizsgálja meg, hogy a felület metszi-e önmagát, és jelenítse meg azt a ponthalmazt (a felülettel megjelenítésével együtt), amely a metszetbe tartozik!