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:
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:
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:
Ennek a segítségével a Coons foltot az alábbi formában kapjuk:
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:
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
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!