Valasek Gábor valasek@inf.elte.hu Eötvös Loránd Tudományegyetem Informatikai Kar 2014/2015. őszi félév
Tartalom 1 Motiváció Görbék Hermite interpoláció Catmull-Rom spline Kochanek-Bartels spline Műveletek görbékkel Subdivision görbék Felületek Doo-Sabin Bézier háromszögek 2 Topológia tárolása Szárnyas-él adatszerkezet Fél-él adatszerkezet
Motiváció Tartalom 1 Motiváció Görbék Hermite interpoláció Catmull-Rom spline Kochanek-Bartels spline Műveletek görbékkel Subdivision görbék Felületek Doo-Sabin Bézier háromszögek 2 Topológia tárolása Szárnyas-él adatszerkezet Fél-él adatszerkezet
Motiváció Láttuk hogyan kell egyszerű geometriai elemeket (pont, szakasz, háromszög) megjeleníteni a képernyőn Hogyan tároljuk az összetett geometriákat? Mivel írhatnánk le egy bonyolult alakzatot hatékonyan a számítógépen?
Motiváció
Motiváció
Motiváció
Görbék Tartalom 1 Motiváció Görbék Hermite interpoláció Catmull-Rom spline Kochanek-Bartels spline Műveletek görbékkel Subdivision görbék Felületek Doo-Sabin Bézier háromszögek 2 Topológia tárolása Szárnyas-él adatszerkezet Fél-él adatszerkezet
Görbék Görbék leírása Az görbéket ponthalmazoknak tekintjük. Hogyan adjuk meg ezeket a halmazokat? explicit: y = f (x) [ ] x(t) parametrikus: p(t) =, t R y(t) implicit: x 2 + y 2 9 = 0
Görbék Lineáris interpoláció Legyen adott két pont, a, b R 3. A két ponton átmenő egyenes parametrikus egyenlete: ahol t R. p(t) = (1 t)a + tb, Ha t [0, 1], akkor az a, b pontokat összekötő egyenes szakaszt kapjuk.
Görbék Lineáris interpoláció Ez a legegyszerűbb görbe a két pont között Hogyan lesz ebből szép görbe? Szép valami szépen, folytonosan változó
Görbék Szépség - parametrikus folytonosság C 0 : a görbében/felületben nincsenek lyukak, nem szakad meg sehol C 1 : a derivált is folytonosan változik (DE: a derivált paraméterezéstől függ!) C 2 : a görbe/felület második deriváltjai is folytonosan változnak
Görbék Szépség - deriváltak [ ] x(t) Ne feledjük, parametrikus görbe p(t) = alakú y(t) [ x Tehát a deriváltak p (t) = ] [ (t) x y, p (t) (t) = ] (t) y stb. (t) alakúak [ t Példa: mi a deriváltja a p(t) = 2 ] + t t 3 görbének a t = 0 és t = 1 pontokban? Példa: mi lesz az első és második deriváltgörbéje (hodográfja) a p(t) = (1 t)a + tb görbének?
Görbék Parametrikus folytonosság Legyen adott két parametrikus görbe, r(t), s(t) : [0, 1] E 3, amelyeknek van egy közös pontja, azaz pl. r(1) = s(0) = p. Ekkor a két görbe a p-ben C 0 r(1) = s(0) C 1 C 0 r (1) = s (0) C 2 C 1 r (1) = s (0) C n C n 1 r (n) (1) = s (n) (0)
Görbék Parametrikus folytonosság
Görbék Parametrikus folytonosság
Görbék Parametrikus folytonosság
Görbék Törött vonal Adottak p i R 3, i = 0,..., n pontok és mindegyik p i, p i+1, i = 0,..., n 1 pontpárt kössünk össze egy szakasszal! Legyenek t 0 t 1... t n R paraméterek a p i pontokhoz hozzárendelve Ekkor az eredmény törött vonal felírható egyetlen paraméterrel is: ha a t [t 0, t n ] paraméter aktuális értékére t [t i, t i+1 ] igaz, akkor a hozzátartozó pont t i+1 t p i + t t i p i+1 t i+1 t i t i+1 t i Ez egy interpoláló megközelítés, azaz a reprezentációt képező ponthalmaz összes elemén áthalad a reprezentált görbe
Görbék Törött vonal Ha egy sima görbét szeretnénk ábrázolni, akkor szakaszokkal kell közelítenünk (lényegében: tesszellálni)
Görbék Törött vonal Ha egy sima görbét szeretnénk ábrázolni, akkor szakaszokkal kell közelítenünk (lényegében: tesszellálni)
Görbék Polinomiális görbék Ha C 0 -nál magasabb fokú garantált (!) folytonosságot akarunk, akkor próbálkozhatunk polinomokkal A p 0,..., p n pontokra illeszthető egy n-edfokú polinom A jól ismert hatványbázisban ez p(t) = n [ ] [ ] [ ] i=0 a it i, t R 1 0 1 alakú (pl.: p(t) = t 2 2 + t + ) 1 1 De mi lenne a geometriai értelmezése az a i R 3 együtthatóknak? Mit ábrázolnak? másik bázist keressünk inkább, ahol a reprezentációt képező elemeknek szemléletesebb jelentése van De előtte oldjuk még meg a feladatot!
Görbék Polinomiális görbék Legyenek adottak p 0,..., p n E 3 pontok és t 0 < t 1 <.. < t n R paraméterértékek Keressük azt az n-edfokú p(t) = n i=0 a it i, t R parametrikus görbét, amely az adott pontokat interpolálja az előírt paraméterértékeknél, azaz amelyre p(t i ) = p i, i = 0, 1,.., n
Görbék Polinomiális görbék Megoldandó tehát az 1 t 0 t0 2.. t n 0 a 0 1 t 1 t1 2.. t1 n a 1 p 0............ =.. 1 t n tn 2.. tn n p a n n }{{}}{{}}{{} b V a lineáris egyenletrendszer, az ismeretlen a 0,.., a n R 3 együtthatókra Ha det(v ) 0, akkor van megoldás De vegyük észre: V egy Vandermonde mátrix determinánsa nem nulla (mivel nincs i j, hogy t i = t j ) A keresett együtthatók tehát a = V 1 b
Görbék Polinomiális görbék - parabola példa Tehát ha például egy parabolával szeretném a t = 0, 1, 2 pontokban interpolálni a p 0, p 1, p 2 pontokat, akkor 1 0 0 1 1 1 1 2 4 egyenletet kell megoldanom Azaz a keresett együtthatók a 0 a 1 a 2 = p 0 p 1 p 2 a 0 1 0 0 a 1 = 3 2 2 1 2 a 2 1 1 2 1 2 A parabola pedig p(t) = a 2 t 2 + a 1 t + a 0 p 0 p 1 p 2
Hermite interpoláció Tartalom 1 Motiváció Görbék Hermite interpoláció Catmull-Rom spline Kochanek-Bartels spline Műveletek görbékkel Subdivision görbék Felületek Doo-Sabin Bézier háromszögek 2 Topológia tárolása Szárnyas-él adatszerkezet Fél-él adatszerkezet
Hermite interpoláció Harmadfokú Hermite interpoláció A görbénk tárolásához bizonyos pontokban jegyezzük fel a görbe pozícióját és egy bejárásához tartozó sebesség, gyorsulás stb.... vektorát (azaz legyenek adottak x(t i ), x (t i ), x (t i ),...) pont és derivált adatok, i = 0, 1,...) Keressünk egy olyan bázist, amibe ezeket a fenti adatokat koordinátaként beírva az adott szinten a beírt adatot kapjuk vissza
Hermite interpoláció Harmadfokú Hermite interpoláció Két pont között, [0, 1]-re megfogalmazza, keressük a p(t) = H 0 0 (t)p 0 + H 1 0 (t)m 0 + H 0 1 (t)p 1 + H 1 1 (t)m 1 alakú parametrikus görbét amelyre p(0) = p 0 p(1) = p 1 p (0) = m 0 p (1) = m 1
Hermite interpoláció Harmadfokú Hermite bázisfüggvények p(t) = H 0 0 (t)p 0 + H 1 0 (t)m 0 + H 0 1 (t)p 1 + H 1 1 (t)m 1 Keressük harmadfokú, egész polinomként az ismeretlen H j i (t) bázisfüggvényeket, azaz legyen H j i (t) = a ijt 3 + b ij t 2 + c ij t + d ij Azt akarjuk, hogy p(0) = p 0, p(1) = p 1, p (0) = m 0, p (1) = m 1 teljesüljenek Ekkor megoldandó a ij, b ij, c ij, d ij, i, j = 0, 1-re H0 0(0) = 1 H1 0 (0) = 0 H0 1 (0) = 0 H1 1 (0) = 0 (H0 0) (0) = 0 (H0 1) (0) = 1 (H1 0) (0) = 0 (H1 1) (0) = 0 H0 0(1) = 0 H1 0 (1) = 0 H0 1 (1) = 1 H1 1 (1) = 0 (H0 0) (1) = 0 (H0 1) (1) = 0 (H1 0) (1) = 0 (H1 1) (1) = 1
Hermite interpoláció Harmadfokú Hermite bázis A harmadfokú bázisunk ekkor a következő lesz: H 0 0 (t) = 2t3 3t 2 + 1 H 1 0 (t) = t3 2t 2 + t H 0 1 (t) = 2t3 + 3t 2 H 1 1 (t) = t3 t 2 Ha van n + 1 bejövő adatunk, akkor minden pár közé szerkesztve egy-egy görbét az összeillesztésből kapott n harmadfokú szegmensből álló spline C 1 lesz
Hermite interpoláció Harmadfokú Hermite bázis
Hermite interpoláció Kitérő - geometriai folytonosság A szemünknek nem csak az lesz folytonos, ami parametrikusan is az Nem teljesen szabatos matematikai definíciókat következnek A geometriai folytonosságnál paraméterezéstől független folytonossági megkötéseket teszünk: G 0 : a görbében/felületben nincsenek lyukak, nem szakad meg sehol G 1 : a csatlakozásoknál ha a deriváltak nem is egyeznek meg, de α > 0 úgy, hogy m i = αm i+1 G 2 : a görbe/felület görbülete folytonos a csatlakozásban is
Hermite interpoláció Geometriai folytonosság - definíció Definíció Legyen adott két reguláris görbe, r(t), s(t), amelyek végpontjaikban megegyeznek: r(1) = s(0) = p. Ekkor a két görbe G n folytonosan csatlakozik a p-ben, ha létezik olyan reguláris átparaméterezése a két görbének, amely szerint C n -ben csatlakoznak a görbék.
Hermite interpoláció Geometriai folytonosság - definíció Definíció Legyen adott két reguláris görbe, r(t), s(t), amelyek végpontjaikban megegyeznek: r(1) = s(0) = p. Ekkor a két görbe G n folytonosan csatlakozik a p-ben, ha létezik olyan orientációtartó reguláris átparaméterezése a két görbének, amely szerint C n -ben csatlakoznak a görbék.
Hermite interpoláció Geometriailag folytonos spline-ok A fenti feltétel ellenőrzésére több módszer is született Részletekért lásd a Geometriai Modellezés és Felület és Testmodellezés tárgyakat Az is fontos észrevétel, hogy ha létezik egy olyan paraméterezés, ami szerint C n a csatlakozás, akkor mindkét görbét ívhossz szerint paraméterezve is C n lesz a csatlakozás Utóbbi észrevétel segítségével átfogalmazható a geometriai folytonosság koordináták pontos egybeesésére... de erről majd máskor
Catmull-Rom spline Tartalom 1 Motiváció Görbék Hermite interpoláció Catmull-Rom spline Kochanek-Bartels spline Műveletek görbékkel Subdivision görbék Felületek Doo-Sabin Bézier háromszögek 2 Topológia tárolása Szárnyas-él adatszerkezet Fél-él adatszerkezet
Catmull-Rom spline Catmull-Rom spline Ne legyen közvetlenül adott a derivált, hanem a pontokból számoljuk őket a következőképp: m i = p i+1 p i 1 t i+1 t i 1 Ezután a megadott p i és a fentiek szerint számított m i adatokra páronként illesszünk Hermite-görbéket
Kochanek-Bartels spline Tartalom 1 Motiváció Görbék Hermite interpoláció Catmull-Rom spline Kochanek-Bartels spline Műveletek görbékkel Subdivision görbék Felületek Doo-Sabin Bézier háromszögek 2 Topológia tárolása Szárnyas-él adatszerkezet Fél-él adatszerkezet
Kochanek-Bartels spline Kochanek-Bartels spline A Catmull-Rom spline-hoz hasonlóan itt is számított adat lesz a tangens, de most három paraméter is adott hozzá: T : tension, T [ 1, 1] B: bias, B [ 1, 1] C: folytonosság (simaság), C [ 1, 1] A Catmull-Rom spline-t kapjuk, ha T = B = C = 0
Kochanek-Bartels spline Kochanek-Bartels spline A fentiek felhasználásával az i-edik szegmens két végpontjának derivált-értékei legyenek (1 T )(1 + B)(1 + C) m i = (p i p i 1 ) 2 (1 T )(1 B)(1 C) + (p i+1 p i ) 2 (1 T )(1 + B)(1 C) m i+1 = (p i+1 p i ) 2 (1 T )(1 B)(1 + C) + (p i+2 p i+1 ) 2
Kochanek-Bartels spline Bézier-görbe kitérő- de Casteljau algoritmus
Kochanek-Bartels spline Bézier-görbe kitérő- de Casteljau algoritmus
Kochanek-Bartels spline Bézier-görbe kitérő- de Casteljau algoritmus
Kochanek-Bartels spline Bézier-görbe ( n Használjuk a Bernstein-bázist: Bi n (t) := i A b 0,..., b n R 3 kontrollpontok által meghatározott n-edfokú Bézier-görbe ekkor ) t i (1 t) n i b(t) = n Bi n (t)b i, i=0 ahol t [0, 1]. HF: n i=0 Bn i (t) = 1 teljesül, t [0, 1] A görbe nagyjából követi a vezérlőpontok poligonjának az alakját, de nem halad át mindegyiken! Ez egy approximáló séma További részletek: Geometriai Modellezés MSc, Analízis (Stone-Weierstrass approximációs tétel)
Kochanek-Bartels spline Bézier-görbe Egyetlen kontrollpont módosítása az egész görbére hat Bernstein-bázis néhány n-re: B 1 0 (t) = 1 t, B1 1 (t) = t
Kochanek-Bartels spline Bézier-görbe Egyetlen kontrollpont módosítása az egész görbére hat Bernstein-bázis néhány n-re: B0 1(t) = 1 t, B1 1 (t) = t lineáris interpoláció! B0 2(t) = (1 t)2, B1 2(t) = 2t(1 t), B2 2 (t) = t 2 n = 3: HF Lényegében összemossuk a kontrollpontjainkat egymással a fenti függvényekkel súlyozva őket, ezzel megmondva, hogy egy adott t [0, 1] paraméterértéknél melyik kontrollpont mennyire játszik fontos szerepet a görbe alakjának meghatározásában
Kochanek-Bartels spline Bézier-görbe tulajdonságok A Bézier görbe áthalad a két végponton (b 0 és b n pontokon) A Bézier görbe alakja változatlan marad, ha [0, 1] helyett [a, b] fölött rajzolom fel, azaz a b( t a b a ), t [a, b] ugyanaz a görbe (mint ponthalmaz), mint a b(t), t [0, 1] Azaz a Bézier görbe invariáns az affin paramétertranszformációkra Vegyük észre: az Hermite görbe nem invariáns ezekre!
Kochanek-Bartels spline Bézier-görbe - bázisfüggvények Hogyan érdemes kiértékelni a bázisfüggvényeket? A de Casteljau algoritmus csak lineáris interpolációkat használ Ha a bázisfüggvényeket akarjuk használni, akkor nem kell őket egyesével kiszámolni - egy egyszerű algoritmussal elő tudjuk állítani egy adott t-ben az összes Bernstein polinom értékét Ehhez a Bernstein polinomok rekurzív felírását használjuk fel: Bi n (t) = (1 t) B n 1 i (t) + t B n 1 i 1 (t), ahol definíció szerint legyen B n i (t) = 0, ha i < 0 vagy ha i > n
Kochanek-Bartels spline Bézier-görbe - bázisfüggvények
Kochanek-Bartels spline Bézier-görbe - bázisfüggvények
Kochanek-Bartels spline Bézier-görbe - bázisfüggvények A l l B e r n s t e i n ( n, t, B) { B [ 0 ] = 1; t1 = 1 t ; f o r ( j = 1; j <= n ; ++ j ) { saved = 0; f o r ( k =0; k<j ; ++k ) { temp = B [ k ] ; B [ k ] = saved + t1 temp ; saved = t temp ; } B [ j ] = saved ; }
Kochanek-Bartels spline Bézier-görbe - bázisfüggvények
Kochanek-Bartels spline Interpoláció vagy approximáció? Interpoláció: a görbének át kell haladnia a vezérlőpontokon
Kochanek-Bartels spline Interpoláció vagy approximáció? Approximáció: a görbének csak közelítenie kell a vezérlőpontokat
Kochanek-Bartels spline Sok vezérlőpont esete A vezérlőpontok számával együtt nő a fokszám egy idő után lehet meg kell elégednünk az approximációval, de az sem lesz jó A magas fokszámú polinomok erősen hullámozhatnak Runge-problémája: az f (x) = 1 függvény (piros) 1+25x 2 közelítése során ötödfokú (kék) és kilencedfokú (zöld) polinomokkal
Kochanek-Bartels spline Sok vezérlőpont esete
Kochanek-Bartels spline Spline görbék Ne egyetlen polinommal próbáljuk interpolálni vagy approximálni az adatpontjainkat (vezérlőpontjainkat)! Használjunk összetett görbét, amely alacsonyabb fokszámú szegmensekből áll Így kiküszöböhető a magas fokszámmal járó oszcilláció, illetve a kontrollpontok módosításának kihatása az egész görbére, de a polinomiális szegmensek folytonos csatlakozására külön figyelni kell És még sok minden másra is, de... Részletek: NumAnal - BSc.; Geometriai Modellezés, Felület és Testmodellezés - MSc.
Kochanek-Bartels spline Spline görbék
Műveletek görbékkel Tartalom 1 Motiváció Görbék Hermite interpoláció Catmull-Rom spline Kochanek-Bartels spline Műveletek görbékkel Subdivision görbék Felületek Doo-Sabin Bézier háromszögek 2 Topológia tárolása Szárnyas-él adatszerkezet Fél-él adatszerkezet
Műveletek görbékkel Ívhossz Legyen t [a, b], ekkor s [a, b]-re az ívhossz s(k) = k a r (t) dt Az ívhossz szerint paraméterezett görbékre p (t) = 1
Műveletek görbékkel Legközelebbi pont Adott egy p(t) : [a, b]e 2 görbe és egy tetszőleges x E 2 pont a síkon. Keressük azt a t [a, b] paraméterértéket, amelyre t = argmin t [a,b] d(p(t), x)
Műveletek görbékkel Legközelebbi pont A feladat ekvivalens azzal, hogy keressük azt a t [a, b]-t, amelyre d 2 (p(t), x) = x p(t), x p(t) minimális, amit deriválva adódik, hogy a minimumhelyen kell, hogy teljesüljön. x p(t ), p (t ) = 0,
Műveletek görbékkel Legközelebbi pont Így a legközelebbi pont paraméterértéke, ha (a, b)-n belüli, akkor gyöke lesz az f (t) = q p(t), p (t) egyenletnek. Viszont semmiképpen se felejtsük megnézni a végpontokat is! A megoldás Newton-Raphson-nal x n+1 = x n f (x n) f (x n ) x p(x n ), p (x n ) = x n x p(x n ), p (x n ) p (x n ), p, n = 1, 2,... (x n )
Műveletek görbékkel Legközelebbi pont Newton-Raphson módszerrel Mikor termináljunk? Ha f (x n ) < ɛ?
Műveletek görbékkel Legközelebbi pont Newton-Raphson módszerrel Mikor termináljunk? Ha f (x n ) < ɛ? Paraméterezéstől függő! Ha M = max{ p (t) : t I}, N = max{ x p(t) : t I}, akkor a t ɛ NM t után bármely x 0 I az utolsó becslés is lesz, hiszen x p( ɛt ɛt ), (p( NM NM )) = ɛ NM ɛ NM x p( ɛt NM ), p ( ɛt NM ) x p( ɛt NM ) p ( ɛt NM ) ɛ NM = ɛ. NM
Műveletek görbékkel Legközelebbi pont Newton-Raphson módszerrel Mikor termináljunk? Ha s(x n ) s(x n 1 )) < ɛ?
Műveletek görbékkel Legközelebbi pont Newton-Raphson módszerrel Mikor termináljunk? Ha s(x n ) s(x n 1 )) < ɛ? Paraméterezéstől független! Elég számításigényes is tud lenni És igazából azt méri, hogy mennyire lépett kicsit az új finomítás az előzőtől, azaz a gyökkeresés lelassulását figyeli
Műveletek görbékkel Legközelebbi pont Newton-Raphson módszerrel Mikor termináljunk? Ha p(x n ) p(x n 1 )) < ɛ?
Műveletek görbékkel Legközelebbi pont Newton-Raphson módszerrel Mikor termináljunk? Ha p(x n ) p(x n 1 )) < ɛ? Paraméterezéstől is függ De nagyon olcsó kiértékelni Hasonlót mér, mint az előző
Műveletek görbékkel Legközelebbi pont Newton-Raphson módszerrel Mikor termináljunk? Ha x n x n 1 < ɛ?
Műveletek görbékkel Legközelebbi pont Newton-Raphson módszerrel Mikor termináljunk? Ha x n x n 1 < ɛ? Paraméterezéstől függ Legolcsóbb kiértékelni Ugyanúgy a gyökkeresés sebességének lassulását méri
Műveletek görbékkel Legközelebbi pont Newton-Raphson módszerrel Mikor termináljunk? Ha π 2 (x p(x n), p (x n )) < ɛ?
Műveletek görbékkel Legközelebbi pont Newton-Raphson módszerrel Mikor termináljunk? Ha π 2 (x p(x n), p (x n )) < ɛ? Paraméterezéstől független, geometriai feltétel Pontosan azt méri, amit szerettünk volna: az x-be mutató vektorra legyen merőleges az x n -beli tangensegyenes!
Műveletek görbékkel Kisérő triéder Adott p(t) : [0, 1] R 3 parametrikus görbe, ekkor t(t) = [p (t)] 0 : tangens b(t) = [p (t) p (t)] 0 : binormális n(t) = b(t) t(t): főnormális Feladat: kisérő triéder kirajzolása!
Műveletek görbékkel Egyenletes sebességű bejárás Feladat: Newton-Raphson iterációval segítségével helyezz el 5, egymástól a görbén mérve egyenlő távolságra lévő pontot! Emlékeztető: f (x) = 0 megoldását keressük úgy, hogy kiindulva egy x 0 D f pontból iteratívan minden lépésben x n+1 = x n f (xn) f (x n) becsléssel közeledünk a megoldáshoz Ugyanígy: milyen messze van a kattintás helye a görbétől (mi a legközelebbi pontja) és mi a legközelebbi ponthoz tartozó paraméterérték?
Műveletek görbékkel Görbület Tegyük fel, hogy a görbénk ívhossz szerinti paraméterezéssel adott, azaz p (s) = 1 Ekkor p merőleges p -re ( p 2 = p, p = 1 deriválásából trivi) Ilyenkor t(s) = p (s) és n(s) = [p (s)] 0. Ekkor az egység érintővektor változásának normálisra vett előjeles merőleges vetülete azt mondja meg, hogy mennyire görbül a pálya az adott paraméterértéknél: κ(s) = t (s), n(s) A fenti κ a görbe s paraméterhez tartozó görbülete, illetve ha κ 0, akkor ρ(s) = 1/κ(s) a görbületi sugara
Műveletek görbékkel Görbület Amennyiben nem ívhossz szerint van paraméterezve a görbénk, a következő képlettel számítható a görbület: κ(t) = p (t) p (t) p(t) 3 Biz.: ld. diffgeo Síkban: előjeles görbület is értelmezhető, az a b = a x b y a y b x értelmezéssel, abszolút értéket elhagyva a számlálóban.
Műveletek görbékkel Görbület Feladat: színezzük a görbét a görbülete alapján! Feladat: miközben bejárjuk a görbét, minden pontjához rajzoljuk be a görbületi körét! (Ennek középpontja: p(t) + ρ(t)n(t)
Subdivision görbék Tartalom 1 Motiváció Görbék Hermite interpoláció Catmull-Rom spline Kochanek-Bartels spline Műveletek görbékkel Subdivision görbék Felületek Doo-Sabin Bézier háromszögek 2 Topológia tárolása Szárnyas-él adatszerkezet Fél-él adatszerkezet
Subdivision görbék Subdivision görbék Egy ötlet: az eddigiek során rögtön egy polinomot állítottunk elő a kontrollpontjainkból (lényegében: a kontrollpontok által meghatározott kontroll-poligonból) Megjelenítés során viszont úgyis szakaszokkal kell közelíteni!
Subdivision görbék Subdivision görbék Egy ötlet: az eddigiek során rögtön egy polinomot állítottunk elő a kontrollpontjainkból (lényegében: a kontrollpontok által meghatározott kontroll-poligonból) Megjelenítés során viszont úgyis szakaszokkal kell közelíteni! dolgozzunk magán a kontroll-poligonon! A subdivision, vagy rekurzív felosztással definiált sémák a kiinduló ponthalmazunkat (kontrolpontok halmazát) rekurzívan sűrítik, egyre finomabb lineáris közelítést is adva (legtöbbször)
Subdivision görbék Subdivision görbék A kiinduló ponthalmaz által meghatározott görbének a rekurzív sürítést határgörbéjét ( végtelen sok finomítás utáni pontok halmazát) tekintjük Nagy kifejezőerő (például a Chaikin saroklevágási algoritmus egy másodfokú B-spline görbét ad), de görbéknél lehet hatékonyabban is számolni sok esetben
Subdivision görbék Subdivision görbék - Chaikin saroklevágási algoritmus Legyen az aktuális vezérlőpont halmazunk {p i R 3 } n i=0 Az iterációs lépés során az új vezérlőpont halmazunk {q i, r i R 3 } n 1 i=0 lesz, ahol q i = 3 4 p i + 1 4 p i+1 r i = 1 4 p i + 3 4 p i+1
Subdivision görbék Subdivision görbék - Chaikin saroklevágási algoritmus Legyen az aktuális vezérlőpont halmazunk {p i R 3 } n i=0 Az iterációs lépés során az új vezérlőpont halmazunk {q i, r i R 3 } n 1 i=0 lesz, ahol q i = 3 4 p i + 1 4 p i+1 r i = 1 4 p i + 3 4 p i+1
Subdivision görbék Subdivision görbék - Chaikin saroklevágási algoritmus Legyen az aktuális vezérlőpont halmazunk {p i R 3 } n i=0 Az iterációs lépés során az új vezérlőpont halmazunk {q i, r i R 3 } n 1 i=0 lesz, ahol q i = 3 4 p i + 1 4 p i+1 r i = 1 4 p i + 3 4 p i+1
Subdivision görbék Subdivision görbék - Chaikin saroklevágási algoritmus Legyen az aktuális vezérlőpont halmazunk {p i R 3 } n i=0 Az iterációs lépés során az új vezérlőpont halmazunk {q i, r i R 3 } n 1 i=0 lesz, ahol q i = 3 4 p i + 1 4 p i+1 r i = 1 4 p i + 3 4 p i+1
Subdivision görbék Subdivision görbék - Chaikin saroklevágási algoritmus
Subdivision görbék Subdivision görbék - Chaikin saroklevágási algoritmus
Subdivision görbék Subdivision görbék - Chaikin saroklevágási algoritmus
Subdivision görbék Subdivision görbék - Chaikin saroklevágási algoritmus
Felületek Tartalom 1 Motiváció Görbék Hermite interpoláció Catmull-Rom spline Kochanek-Bartels spline Műveletek görbékkel Subdivision görbék Felületek Doo-Sabin Bézier háromszögek 2 Topológia tárolása Szárnyas-él adatszerkezet Fél-él adatszerkezet
Felületek Bilineáris felület Adott négy kontrollpont, p 1, p 2, p 3, p 4 R 3 Három lineáris interpolációval egy egyszerű felületület kapunk: ahol s, t [0, 1]. b(s, t) = (1 t)((1 s)p 1 + sp 3 ) + t((1 s)p 2 + sp 4 ) Lényegében: két szakaszt írtunk be a t szerinti lineáris interpoláció képletébe
Felületek Bilineáris felület
Felületek Bézier felület A b ij R 3, i = 0,.., n, j = 0,.., m kontrollpoligon által meghatározott n m-edfokú Bézier-felület alakú, ahol u, v [0, 1]. m n b(u, v) = Bi n (u)bj m j=0 i=0 (v)b ij
Felületek Spline felület Alacsonyabb fokszámú felületdarabokat, felületfoltokat (patch-cseket) illesztünk egymáshoz Csatlakozások folytonosságára figyelni kell Több erről: Geometriai Modellezés, Felület és Testmodellezés - MSc.
Felületek Subdivision felületek Hasonló a görbékhez, de most a kontroll-poligonon dolgozunk, azt finomítjuk lépésenként Az animációs iparban óriási jelentősége van (Pixar stb.) Tekinthetjük a síklap alapú modellezés és a B-spline iskola közti hídnak modellezői szemmel Több: Haladó Grafika, Geometriai Modellezés - MSc.
Felületek Subdivision felületek - Doo-Sabin
Felületek Subdivision felületek - Catmull-Clark 2001: Oscar Catmull-nak for significant advancements to the field of motion picture rendering as exemplified in Pixar s RenderMan
Felületek Subdivision felületek - Catmull-Clark 2001: Oscar Catmull-nak for significant advancements to the field of motion picture rendering as exemplified in Pixar s RenderMan
Felületek Fogalmak - séma mesh-típusa A legtöbb subdivision séma valamilyen reguláris felosztási/finomítási sémán alapszik Amikor egy séma mesh-ének típusáról beszélünk erre az őssémára gondolunk A síkban regulárisan elhelyezett pontokat szabályos háromszögekkel, négyzetekkel, vagy szabályos hatszögekkel fedhetjük le Ennek megfelelően nevezünk egy sémát háromszög-, négyszög- vagy hatszög-alapúnak (gyakorlatban utóbbi ritka)
Felületek Mesh-típus Vigyázzunk: szép (teljes oldalakban illeszkedő), 6-reguláris háromszög vagy szép, 4-reguláris négyszöghálóval nem lehet bármit lefedni degenerált esetek nélkül! A fenti reguláris topológiákkal a végtelen síklap, vagy a végtelen hengerpalást, vagy pedig a tórusz topológiájának megfelelő felületek írhatóak fel
Felületek Mesh-típus - Möbius
Felületek Mesh-típus - Klein-kancsó
Felületek Fogalmak - face-split (primál) A mesh-típusának megfelelő lapok mindegyikét négyfelé osztjuk Az előző lépés mesh-ének csúcspontjait megőrizzük (de módosíthatjuk a pozíciójukat - ha változtatás nélkül vesszük át a pontokat, akkor interpoláló sémáról beszélünk) Új csúcspontokat szúrunk be minden élre (kettéosztva ezzel őket) Négyszög alapú sémáknál a lapból is származtatunk egy új csúcspontot
Felületek Fogalmak - vertex-split (duál) Ilyenkor minden csúcspontból keletkezik egy új csúcs az összes, eredeti csúcsra illeszkedő lap mentén A régi lapból új lap származik közvetlenül Az élek mentén új lapok születnek (az élek végpontjaiból az él által szétválasztott két lapra születő új csúcspontokat összekötve) A régi csúcspontok helyett egy új lap születik, a csúcsból született új csúcspontokkal
Felületek Fogalmak - face- és vertex-split Reguláris négyszöghálón mindkét esetben 4-reguláris lesz az új háló is tartja a topológiát Figyeljünk: reguláris háromszöghálóknál vertex-split után hatszögeket kapunk!
Felületek Fogalmak - face- és vertex-split Reguláris négyszöghálón mindkét esetben 4-reguláris lesz az új háló is tartja a topológiát Figyeljünk: reguláris háromszöghálóknál vertex-split után hatszögeket kapunk!
Felületek Face-split 4-reguláris mesh-en
Felületek Face-split 6-reguláris mesh-en
Felületek Vertex-split 4-reguláris mesh-en
Doo-Sabin Tartalom 1 Motiváció Görbék Hermite interpoláció Catmull-Rom spline Kochanek-Bartels spline Műveletek görbékkel Subdivision görbék Felületek Doo-Sabin Bézier háromszögek 2 Topológia tárolása Szárnyas-él adatszerkezet Fél-él adatszerkezet
Doo-Sabin Doo-Sabin Eredeti cikk: http://trac2.assembla.com/ DooSabinSurfaces/export/12/trunk/docs/Doo% 201978%20Subdivision%20algorithm.pdf Rövid leírás: http://www.cs.unc.edu/ dm/unc/ COMP258/LECTURES/Doo-Sabin.pdf
Doo-Sabin Doo-Sabin
Doo-Sabin Doo-Sabin
Doo-Sabin Doo-Sabin - új pontok számítása
Doo-Sabin Doo-Sabin - új pontok számítása
Doo-Sabin Doo-Sabin - lapokból származó lapok
Doo-Sabin Doo-Sabin - Élekből származó lapok
Doo-Sabin Doo-Sabin - Csúcsokból származó lapok
Bézier háromszögek Tartalom 1 Motiváció Görbék Hermite interpoláció Catmull-Rom spline Kochanek-Bartels spline Műveletek görbékkel Subdivision görbék Felületek Doo-Sabin Bézier háromszögek 2 Topológia tárolása Szárnyas-él adatszerkezet Fél-él adatszerkezet
Bézier háromszögek Bézier háromszögek de Casteljau a Bézier görbéket felületekre is kiterjesztette, méghozzá először háromszög alapú értelmezési tartományra Viszont mivel a Citroen nem engedte publikálni eredményeit, ezért nem csak a Bézier görbéket, hanem a háromszögeket is tőle függetlenül felfedezte több kutató is (például Sabin Bernstein bázisban írt fel háromoldalú parametrikus felületeket)
Bézier háromszögek de Casteljau algoritmus Bézier háromszögekre Természetes általánosítása a görbékre felírt de Casteljau algoritmusnak Kontrollpoligon helyett háromszög alakú kontrollponthálón végzett, egymás utáni lineáris interpolációk sorozata
Bézier háromszögek de Casteljau algoritmus Bézier háromszögekre
Bézier háromszögek de Casteljau algoritmus Bézier háromszögekre Az n-edfokú Bézier háromszögnek 1 2 (n + 1)(n + 2) kontrollpontja van Az egyszerűség kedvéért áttérünk multiindexekre: jelölje b ijk kontrollpontot b i (tehát az index is vektor), ahol mindig i 1 = i + j + k = n Legyenek továbbá e 1 = (1, 0, 0), e 2 = (0, 1, 0), e 3 = (0, 0, 1)
Bézier háromszögek de Casteljau algoritmus Bézier háromszögekre Adott b i E 3 kontrollpontok háromszög hálója, i 1 = n, és a sík egy pontjának u = (u, v, w) baricentrikus koordinátái Legyen a b 0 i (u) = b i és b r i (u) = ubr 1 i+e 1 + vb r 1 i+e 2 + wb r 1 i+e 3 ahol r = 1,.., n és i 1 = n r. Ekkor a Bézier háromszög u-hoz tartozó pontja b(u) = b n 0 (u)
Bézier háromszögek Bézier háromszögekre példa - lineáris eset
Bézier háromszögek Bézier háromszögekre példa - lineáris eset
Bézier háromszögek Bézier háromszögekre példa - lineáris eset
Bézier háromszögek Bézier háromszögekre példa - lineáris eset
Bézier háromszögek Bézier háromszögekre példa - lineáris eset b 1 000 (u) = ub0 100 + vb0 010 + wb0 001 = ub 100 + vb 010 + wb 001
Bézier háromszögek Bézier háromszögekre példa - harmadfokú eset
Bézier háromszögek Bézier háromszögekre példa - harmadfokú eset
Bézier háromszögek Bézier háromszögekre példa - harmadfokú eset
Bézier háromszögek Bézier háromszögekre példa - harmadfokú eset
Bézier háromszögek Bézier háromszögek tulajdonságai - de Casteljau alapján Affin invariancia - hiszen csak lineáris interpolációkat használunk Affin paramétertranszformációkra is invariáns - mert maguk a baricentrikus koordináták is azok Konvex héj, amennyiben 0 u, v, w 1 - ekkor nemcsak baricentrikus, hanem konvex lineáris kombinációkat végzünk egymás után A peremgörbék a kontrollháromszög külső élein lévő kontrollpontok (azaz olyan b i -k, amelyekre i = 0 j = 0 k = 0) által meghatározott n-edfokú Bézier görbék
Bézier háromszögek Bernstein polinomok baricentrikus bázis felett Az n-edfokú, kétváltozós Bernstein polinom, baricentrikus koordánátákkal ( ) n Bi n = u i v j w k = n! i i!j!k! ui v j w k, i 1 = n, ahol ( n i) -t szokás trinomiális együtthatóknak is hívni
Bézier háromszögek Harmadfokú Bézier háromszögek - kontrollpont súlyok
Bézier háromszögek Bézier háromszögek Bernstein bázisban A görbéknél látottakhoz hasonlóan bizonyítható (indukció + Bernstein polinomok rekurzív definíciója alapján) a következő állítás: b r i = b i+j Bj r (u), i 1 = n r j 1 =r Azaz a de Casteljau algoritmus közbülső pontjai hasonlóan fejezhetőek ki Bernstein polinomokkal a Bézier háromszögek esetén is, mint a görbéknél
Bézier háromszögek Deriváltak Bézier háromszögeknél iránymenti deriváltakat kell használni Legyen u 1, u 2 a Bézier háromszög értelmezési tartományának két pontjához tartozó baricentrikus koordináták Legyen d = (d, e, f ) = u 2 u 1 Ekkor a b(u) Bézier háromszög d irányban vett iránymenti deriváltja az u pontban D d b(u) = d b u (u) + e b v (u) + f b w (u) ahol b u (u), b v (u), b w (u) a baricentrikus koordináták szerinti parciális deriváltjai a Bézier háromszögnek.
Bézier háromszögek Deriváltak A parciális deriváltakra közvetlen számítással adódik, hogy b u (u) = u n! i!j!k! ui v j w k b i = n = n = n i 1 =n i 1 =n i 1 =n 1 i 1 =n 1 (n 1)! (i 1)!j!k! ui 1 v j w k b i (n 1)! u i v j w k b i+1,j,k i!j!k! b i+e1 B n 1 i (u)
Bézier háromszögek Deriváltak A parciális deriváltak tehát b u (u) = n b v (u) = n b v (u) = n i 1 =n 1 i 1 =n 1 i 1 =n 1 b i+e1 B n 1 i (u) b i+e2 B n 1 i (u) b i+e3 B n 1 i (u) az iránymenti derivált pedig így ( ) D d b(u) = n dbi+e1 + eb i+e2 + f b i+e3 B n 1 i (u) i 1 =n 1
Bézier háromszögek Blossom háromszögek Az egymásba ágyazott baricentrikus kombinációkban nem kell mindig ugyanazt az u kiértékelési pontot használni Így kapjuk (a görbékhez hasonlóan) a Bézier háromszögek multiaffin kifejtését, azaz a háromszög blossomokat: b[u 1,.., u n ], ahol tehát a de Casteljau algoritmus i-edik lépésében u i szerint értékeljük ki az aktuális kontrollpont háromszöget
Bézier háromszögek Blossom háromszögek Könnyen belátható, hogy b i = b[e <i> 1, e <j> 2, e <k> 3 ], i 1 = n Továbbá a de Casteljau átmeneti pontjai felírhatóak b r i = b[u <r>, e <i> 1, e <j> 2, e <k> 3 ], i + j + k + r = n Ha a Bézier háromszög az értelmezési tartomány f 1, f 2, f 3 pontjai feletti részéhez tartozó kontrollpontokat akarjuk kiszámítani, akkor a következő adódik: c i = b[f <i> 1, f <j> 2, f <k> 3 ]
Bézier háromszögek Bézier háromszög felosztása belső pontra Ábra: Scott Shaefer
Bézier háromszögek Bézier háromszög felosztása belső pontra Ábra: Scott Shaefer
Bézier háromszögek Bézier háromszög felosztása belső pontra Ábra: Scott Shaefer
Bézier háromszögek Bézier háromszög felosztása belső pontra Ábra: Scott Shaefer
Bézier háromszögek Bézier háromszög felosztása belső pontra Ábra: Scott Shaefer
Bézier háromszögek Bézier háromszög felosztása belső pontra Ábra: Scott Shaefer
Bézier háromszögek Bézier háromszög felosztása belső pontra Ábra: Scott Shaefer
Bézier háromszögek Deriváltak blossom-mal A d iránymenti derivált a blossom-mal a következőképpen fejezhető ki: D d b(u) = nb[d, u <n 1> ] Az r-edik derivált pedig D r d b(u) = n! (n r)! b[d<r>, u <n r> ] A vegyes parciális deriváltaknak a változó irányok menti deriválás felel meg D r,s d 1,d 2 b(u) = n! (n r s)! b[d<r> 1, d <s> 2, u <n r s> ]
Bézier háromszögek Deriváltak A d 1 = (1, 0, 0) (0, 0, 1) = (1, 0, 1) és d 2 = (0, 1, 0) (0, 0, 1) = (0, 1, 1) irányokban vett első és második deriváltakra a u = (0, 0, 1) sarokban a következő adódik: D d1 (u) = n(b 1,0,n 1 b 0,0,n ) D d2 (u) = n(b 0,1,n 1 b 0,0,n ) D 2 d 1 (u) = n(n 1) ( (b 2,0,n 2 b 1,0,n 1 ) (b 1,0,n 1 b 0,0,n ) ) D d1,d 2 (u) = n(n 1) ( (b 1,1,n 2 b 1,0,n 1 ) (b 0,1,n 1 b 0,0,n ) ) D 2 d 2 (u) = n(n 1) ( (b 0,2,n 2 b 0,1,n 1 ) (b 0,1,n 1 b 0,0,n ) )
Bézier háromszögek Fokszámemelés Egy n-edfokú Bézier háromszöget szeretnénk n + 1-edfokú Bézier háromszöggel felírni: b i Bi n (u) = b (1) (u) i 1 =n i 1 =n+1 i B n+1 i Ekkor az n + 1-edfokú Bézier háromszög kontrollpontjaira adódik b (1) i = 1 ( ) ibi+e1 + jb n + 1 i+e2 + kb i+e3
Bézier háromszögek Háromszögek folytonos csatlakozása Legyen adott két Bézier háromszög, amelyek értelmezési háromszög-tartományai egy közös élben találkoznak Ekkor egy értelmezési tartomány síkjában található egyenes, amely áthalad a két háromszög-tartományon, mindkét Bézier háromszög felületén egy-egy felületi görbe lesz - a két felületi görbéből pedig egy összetett görbét kapunk Ha minden egyenesből, a fenti módon kapott, összetett felületi görbe C r, akkor a két Bézier háromszög csatlakozása a közös oldal mentén is C r
Bézier háromszögek Háromszögek folytonos csatlakozása d = v 1 a + v 2 b + v 3 c
Bézier háromszögek Háromszögek folytonos csatlakozása Tudjuk, hogy egy adott Bézier háromszögnek le tudjuk írni egy darabját egy, az értelmezési tartomány síkjabeli másik háromszög fölötti részének, a c i = b[f <i> 1, f <j> 2, f <k> 3 ] képlettel Ekkor, ha például a közös paramétervonal az u = 0, a fenti képlettel tudjuk, hogy mikor lesz a két szomszédos b(u), c(u) Bézier háromszög egy közös felületnek a két, C r -ben csatlakozó darabja: c ρ,j,k = b ρ j 0 (v) ahol ρ = 0,.., r, j 0 1 = n ρ, a v pedig a c(u) bázisháromszögének azon csúcsának koordinátái a b(u) bázisháromszögében, amelyik nem közös. A fenti egy szükséges és elégséges feltétel a C r csatlakozásra
Bézier háromszögek Bézier háromszögek folytonos csatlakozása
Bézier háromszögek Bézier háromszögek folytonos csatlakozása
Bézier háromszögek Bézier háromszögek folytonos csatlakozása
Bézier háromszögek Bézier háromszögek folytonos csatlakozása
Bézier háromszögek Bézier háromszögek folytonos csatlakozása - b 0,j,k, j + k = n kontrollpontok
Bézier háromszögek Bézier háromszögek folytonos csatlakozása - b 1,j,k, j + k = n 1 kontrollpontok
Bézier háromszögek Háromszögek folytonos csatlakozása Az r = 0 esetben a fenti azt jelenti, hogy a közös határon található kontrollpontoknak meg kell egyezniük: c 0,j,k = b 0 0,j,k (v) = b 0,j,k, j + k = n A C 1 csatlakozás feltételéül, ha C 0 már teljesül, a következő adódik: c 1,j,k = v 1 b 1,j,k + v 2 b 0,j+1,k + v 3 b 0,j,k+1, j + k = n 1 azaz a c(u) határtól eggyel beljebb található kontrollpontrétegének kontrollpontjai a b(u) csatlakozó háromszögéhez tartozó három kontrollpont baricentrikus kombinációi
Bézier háromszögek Háromszögek folytonos csatlakozása Tehát C 1 csatlakozik a két Bézier háromszög, ha a két élben osztozó háromszög egy síkba esik és mindkettő a bázisháromszögük (paramétertérbeli háromszög) affin képe Fontos: nem elég, hogy egy síkba essenek!
Szárnyas-él adatszerkezet Tartalom 1 Motiváció Görbék Hermite interpoláció Catmull-Rom spline Kochanek-Bartels spline Műveletek görbékkel Subdivision görbék Felületek Doo-Sabin Bézier háromszögek 2 Topológia tárolása Szárnyas-él adatszerkezet Fél-él adatszerkezet
Szárnyas-él adatszerkezet Szomszédsági viszonyok Néha kellenek a szomszédok, pl. felület-felosztásoknál, degenerált primitívek kisz?résekor, egyes felhasználói inputok kezelésekor stb.
Szárnyas-él adatszerkezet Szomszédsági viszonyok Néha kellenek a szomszédok, pl. felület-felosztásoknál, degenerált primitívek kisz?résekor, egyes felhasználói inputok kezelésekor stb. Ismertek a csúcsok számítható mi, minek a szomszédja!
Szárnyas-él adatszerkezet Szomszédsági viszonyok Néha kellenek a szomszédok, pl. felület-felosztásoknál, degenerált primitívek kisz?résekor, egyes felhasználói inputok kezelésekor stb. Ismertek a csúcsok számítható mi, minek a szomszédja! Egy csúcsban tetsz?leges számú poligon találkozhat dinamikus adatszerkezet kéne
Szárnyas-él adatszerkezet Szomszédsági viszonyok Néha kellenek a szomszédok, pl. felület-felosztásoknál, degenerált primitívek kisz?résekor, egyes felhasználói inputok kezelésekor stb. Ismertek a csúcsok számítható mi, minek a szomszédja! Egy csúcsban tetsz?leges számú poligon találkozhat dinamikus adatszerkezet kéne Jobb megoldás: Szárnyas-él (winged-edge) adatszerkezet!
Szárnyas-él adatszerkezet Szárnyas-él adatszerkezet Az alakzatokat határukkal leíró (B-rep) (boundary representation) reprezentáció egyik gyakran használt topológiatároló adatszerkezete manifold poliéderek esetén Tárolás során csúcsokat, éleket és lapokat különböztet meg Az élek szempontjából tároljuk a felületet Minden élhez fix számú adat tartozik Segítségével pl. gyorsan körbe lehet járni egy poligon éleit, közben megkapva minden szomszédot
Szárnyas-él adatszerkezet Szárnyas-él adatszerkezet Minden lapot egy élsorozat határol - minden laphoz tároljunk egy, az élsorozatához tartozó tetsz?leges élre mutató pointert A csúcspontok élekhez illeszkednek (vagy bel?le indul ki, vagy? a célja) - tároljuk valamelyiket a csúcsokhoz!
Szárnyas-él adatszerkezet Egyetlen él adatai Egy él két csúcsot köt össze - tároljuk ezeket az élben Egy él legfeljebb két laphoz tartozhat - az egyik a baloldali, a másik a jobboldali lap lesz, ezekre mutató pointereket (vagy indexeket) tárolunk A fenti két lapon egyúttal egy-egy élsorozat (az adott lapot alkotó élsorozat) része is az adott él - mindkét élsorozatban tároljuk a rákövetkez?jét és megel?z?jét az adott élnek az adott lap bejárási irányának megfelel?en (!)
Szárnyas-él adatszerkezet Egyetlen él adatai 2*él csúcs lap balra jobbra start vég bal jobb el?z? köv. el?z? köv. a B A 0 1 c b d e
Szárnyas-él adatszerkezet Egyéb táblázatok Csúcsok táblája csúcs ID csúcsból induló él Lapok táblája lap ID lap egy éle
Szárnyas-él adatszerkezet Példa: tetraéder Shirley, Fundamentals of Computer Graphics
Szárnyas-él adatszerkezet Pl.: Egy lap összes szomszéd lapjának felsorolása def allneighbours ( face, edges, v e r t i c e s, faces ) : startedge = faces [ face ] edge = startedge i f edges [ startedge ]. f a c e L e f t == face : while edges [ edge ]. succleft!= startedge : p r i n t edges [ edge ]. faceright edge = edges [ edge ]. succleft else : while edges [ edge ]. succright!= startedge : p r i n t edges [ edge ]. f a c e L e f t edge = edges [ edge ]. succright
Szárnyas-él adatszerkezet Pl.: Egy lap összes szomszéd lapjának felsorolása Azaz: induljunk el az adott lap reprezentáns éléb?l (amit tárolunk a laphoz) Ha ennek az élnek a baloldali lapja az adott lap: iteráljunk végig a baloldali éllistán és írjuk ki a jobboldali lapokat (a baloldali a lekérdezést kiváltó lap) Különben a jobboldali lap az adott lap, iteráljunk végig a jobboldali lap éllistáján Az iteráció érjen véget, amint visszaérünk az adott lap reprezentáns élébe
Szárnyas-él adatszerkezet Pl.: Egy adott csúcsot tartalmazó összes lap felsorolása def allfaces ( vertex, edges, v e r t i c e s, faces ) : startedge = v e r t i c e s [ v e r t e x ] edge = startedge done = False while not done : i f edges [ edge ]. v e r t S t a r t == v e rtex : p r i n t edges [ edge ]. f a c e L e f t edge = edges [ edge ]. p r e dleft else : p r i n t edges [ edge ]. faceright edge = edges [ edge ]. predright
Fél-él adatszerkezet Tartalom 1 Motiváció Görbék Hermite interpoláció Catmull-Rom spline Kochanek-Bartels spline Műveletek görbékkel Subdivision görbék Felületek Doo-Sabin Bézier háromszögek 2 Topológia tárolása Szárnyas-él adatszerkezet Fél-él adatszerkezet
Fél-él adatszerkezet Fél-él adatszerkezet A winged-edge élét vegyük szét két fél-élre! lényegében az élek lapra vett vetületével dolgozunk! A fél-élhez csak egy lap tartozhat + meg kell jegyeznünk a testvér fél-élét (az adott él másik oldali lapra vett vetületét) A reprezentáció központi eleme a fél-él
Fél-él adatszerkezet Half-edge
Fél-él adatszerkezet Half-edge
Fél-él adatszerkezet Fél-él adatszerkezet Szigorú értelemben véve egy fél-élhez pontosan egy csúcs, él és lap tartozik (de gyakorlatban ennél többet tárolni hasznos lehet) A következ?t tároljuk egy fél-élben: az fél-él cél csúcspontja (vertex), a fél-él testvére (sym), a fél-él lapja (face) és a lapot körbefogó fél-élsorozatban a rákövetkez?je (next) A lapokhoz egy tetsz?leges alkotó fél-él pointerét jegyezzük fel A csúcspontokhoz egy befutó fél-élt HE sym sym = HE, HE next sym vertex = HE vertex stb.
Fél-él adatszerkezet Pl.: Adott lap körbejárása def faceloop (HE ) : loop = HE do : p r i n t HE loop = HE. next while loop!= HE