Számítógépes geometria Geometriai adatstruktúrák és algoritmusok, görbék Nagy Gyula
Tartalom Alapok Objektumok a térben Adatstruktúrák Algoritmusok Görbék
Geometriai alapok http://krammer.web.elte.hu/eltettk/grafika/jegyzet E fejezet első része a fenti helyen található előadás alapján készült. Ezúton szeretném kifejezni köszönetemet a szerző(k)nek!
Geometriai vektorok http://krammer. web. elte Geometriai vektorok http://krammer.web.elte.hu/eltettk/grafika/jegyzet /Gi41-3-KRTR1-3 alapján az irányított szakaszokat vektoroknak nevezzük. (irányított: egyik végpontját kiválasztjuk kezdőpontnak.) Egy vektor állása: egyenesének állása irányítása: K V, vagy V K iránya: állása és irányítása Egy vektor hossza: a KV távolság; jelölése: |v| V K v
Műveletek geometriai vektorokkal, 2 a b = |a| |b| cos f; szám, 0 f p a b = 0, ha a merőleges b -re, a b > 0, ha 0 f p/2, a b < 0, ha p/2 f p, a × b = ( |a| |b| sin f ) n0; 0 f p; a × b = 0, ha a || b, különben a × b : az a és b síkjára merőleges a, b és a × b jobbos rendszert alkotnak | a × b | = a parallelogramma területe
Műveletek geometriai vektorokkal a = b, ha irányuk és nagyságuk megegyezik, c = a + b : láncszabály, parallelogramma szabály c = a - b : a közös pontból indított b végéből a végébe. 0: nullvektor; hossza 0, iránya akármi (!) l a: állása = a állásával, hossza |l| |a|, irányítása megegyezik, vagy ellenkező. - a: hossza megegyezik, iránya ellentétes a-val.
Geometriai vektorok a DKR-ben P A P pont helyvektora: OP vektor Koordinátás alakja: (px, py, pz) Műveletek: a számhármasok algebrája: (a, b, c) ± (d, e, f) = (a ± d, b ± e, c ± f) (0, 0, 0) a nullvektor l (a, b, c) = (la, lb, lc) skaláris szorzat:(a, b, c) (d, e, f) = (a d + b e + c f) (eredménye szám) vektoriális szorzat: (a, b, c) × (d, e, f) = ( bf-ce, -af + cd, ae - bd ) (eredménye vektor) O
Vektor szorzása mátrixszal Az X pont helyvektora: X = (x, y, z)T nálam oszlopvektor (de a T-t általában elspórolom) X’ = A33 X = a11 a12 a13 x = a21 a22 a23 y a31 a32 a33 z = a11 x + a12 y + a13 z = x’ a21 x + a22 y + a23 z = y’ a31 x + a32 y + a33 z = z’
Mátrix szorzása mátrixszal C33 = A33 B33 = a11 a12 a13 b11 b12 b13 a21 a22 a23 b21 b22 b23 a31 a32 a33 b31 b32 b33 c11 = a11 b11 + a12 b21 + a13 b31 c12 = a11 b12 + a12 b22 + a13 b32 c13 = a11 b13 + a12 b23 + a13 b33 c21 = a21 b11 + a22 b21 + a23 b31 . . . cik = ai1 b1k + ai2 b2k + ai3 b3k = ai* b*k
Mátrix szorzás 3X4 Sort Oszloppal szorzás szorzás szorzás 2X4 2X3
A Descartes-féle, derékszögű koordináta-rendszer Meghatározza: a kezdőpont (origó), a 3 tengely állása és egy térbeli egységpont A pontok: P = [x, y, z]T Kétféle irányítása lehet (szemléletesen): jobbsodrású (jobbos, jobbkezes): a Z végéből nézve … balsodrású (balos, balkezes)
A síkban: Meghatározza: - a kezdőpont (origó), - a 2 tengely állása - és egy térbeli egységpont Pontok: P = [x, y]T (oszlopvektor) Kétféle irányítás lehet jobbsodrású (jobbos, jobbkezes): az órajárással ellentétesen balsodrású (balos, balkezes): az órajárással egyező
A síkbeli polárkoordináta-rendszer A kezdőpont, a polár-tengely, a pozitív elfordulás iránya. P polár-koordinátái: P = (r,f); (0£r), (0£f<2p). polár-koordináták Descartes koordináták: x = r cos f, és y = r sin f Descartes koordináták polár-koordináták:
Gömbkoordináta-rendszer, térbeli polár-koordináták Alapsík, benne PKR és a Z tengely. gömbkoordináták: P = (r, f, q); (0£r), f: a polárszög (0£f<2p, az alapsíkban) q azimut, (0£q£p) henger-koordináták: P = (r, f, z) polár-koordináták derékszögű koordináták: r = r sin q = Öx2+y2, (az alapsíkban) x = r cos f = r sin q cos f; y = r sin f = r sin q sin f, z = r cos f
Pontrendszer tömegközéppontja i=1,2,…,n tömegpontok helyvektora: pi , tömege: mi A pontrendszer tömegközéppontja: M = S ai·pi; ai = mi / S mi a pontok súlyozott összege; 0 < ai < 1 Adott pi alappontok esetén különböző mi (ai) súlyok különböző pontokat határoznak meg. p1,m1 p2,m2 p3,m3 M
Baricentrikus koordináták a0, a1,…,an En ; és bármely n-1 kifeszíti az n dimenziós teret minden x En -hez egyértelműen létezik {l0,l1,…ln} valósak: x = l0 a0 + l1 a1 + … + ln an , és Sli = 1 {li}: az x {ai} -re vonatkozó baricentrikus koordinátái Tömegpontok súlypontja: li > 0 (térben 4, síkban 3, egyenesen 2 alappont) Ha x baricentrikus koordinátái pozitívak, akkor x az {ai} alappontok konvex burkán belül van.
Az egyenes egyenlete a síkban Az egyenes homogén, implicit egyenlete (E2): a·x + b·y + c = 0; a2+b2¹0; egy egyenes megadása: (a,b,c); a2+b2¹0; Homogén koordinátákkal (H2): a·x + b·y + c·w = 0; a2+b2¹0; egy egyenes megadása: [a,b,c] h·[a,b,c]; a2+b2¹0; A homogén egyenlet Hesse-féle normál alakja (E2): a’·x + b’·y + c’=0; a’2+b’2=1; (-1 ≤ a’, b’ ≤ +1;) (a’;b’) az egyenes iránykoszinuszai (x,y,w) [a,b,c]
Az egyenes egyenlete a síkban (2) Az egyenes „iskolai egyenlete” (E2): y = M · x + B; csak ha B ¹ 0 ! Két adott pontján át: (x2-x1) · (y-y1) = (y2-y1) · (x-x1) illetve, ha x1¹x2 : y = ( (y2-y1)/(x2-x1) ) · (x- x1) + y1 = M· (x- x1) + y1 Adott pont, adott irány: b’· (y-y1) = -a’ · (x-x1); illetve, ha b’¹0 : y = M · (x- x1) + y1 ; M = a’/b’
Az egyenes egyenlete a síkban (4) Normálvektoros egyenlet: adott R pontja és n normálvektora (E2); (X - R) · n = 0, azaz: (x - rx)·nx + (y - ry)·ny = 0, illetve: X · n = R · n, azaz: x·nx + y·ny = rx·nx + ry·ny
Az egyenes paraméteres egyenlete (E2,E3) Adott (a síkban, vagy a térben) P0 és P1 pontja: X = P0 + t·(P1 –P0), átrendezve: X = (1-t)·P0 + t· P1, azaz koordinátánként: x = x0 + t·(x1–x0) átrendezve: x=(1-t)x0 + t·x1 …
Az egyenes paraméteres egyenlete (E2,E3) X = (1-t)·P + t·Q t = 0 : a P pont, t = 1 : a Q pont , 0 t 1 : a szakasz pontjai, t 0 : P oldalán kívül, t 1 : Q oldalán kívül egyenlőközű t értékek: egyenlőközű pontok, t és (1-t): baricentrikus koordináták az egyenesen
Félsík megadása (E2) Egyenlőtlenséggel: a·x + b·y + c < 0; a2+b2¹0; R n Egyenlőtlenséggel: a·x + b·y + c < 0; a2+b2¹0; Határ-egyenesével és egy pont a félsíkban A határ-egyenes egy pontja és normálvektora (R, n)
Lássunk a koordináták mögé z = 0; mi ez? Egyenlőség, egyenlet, kié-mié? 0 x + 0 y + 1 z + 0 = 0 sík: akármilyen x, y és z = 0; az XY sík x + z= 0 mi az? HF !
A sík normálvektoros egyenlete (E 3): A sík adott P pontja és n normálvektora: (X - P) · n = 0, illetve: (x-px) · nx+(y-py) · ny+(z-pz) · nz = 0; X · n = P · n, illetve: x·nx+ y·ny+ z·nz = px·nx+ py·ny+ pz·nz
A sík paraméteres egyenlete (E3): A síkot kifeszítő u, v vektor párral és P pontjával: X = P + s · u + t · v, és a koordinátákra: A sík három, nem egy egyenesbe eső P, Q és R pontjával X = Q + s·(P-Q)+ t·(R-Q), vagy: X = (1-s-t)·Q + s·P+t·R x = qx + s·(px-qx)+t·(rx-qx), vagy: x = (1-s-t)·qx +s·px+t·rx y = qy + s·(py-qy)+t·(ry-qy), vagy: y = (1-s-t)·qy +s·py+t·ry z = qz + s·(pz-qz)+t·(rz-qz), vagy: z = (1-s-t)·qz +s·pz+t·rz.
A sík paraméteres egyenlete (E3): X = Q + s·(P-Q)+ t·(R-Q), vagy: X = (1-s-t)·Q + s·P+t·R ha 0 s, t, 1-s-t 1 : a háromszög pontjai, ha közülük egy nulla: a háromszög egyik oldala, ha kettő nulla (és a harmadik 1): egyik csúcsa, ha valamelyik negatív, vagy >1: a pont kívül van. s, t, 1-s-t : baricentrikus koordináták a síkban
Winner of the Computer Graphics Forum 2006 Cover Image Contest Irodalom: http://krammer.web.elte.hu/eltettk/grafika/jegyzet
Objektumok megadása a térben Alkalmazástól függő Megjelenítés függő
Megjelenítés Lapok és a rajtuk levő csúcsok Inkább többször szerepeljen egy él, mint egyszer sem
Az alkalmazás miatt szükség lehet: Módosításokra az adatstruktúrában mozgás elemek felvétele, törlése Az illeszkedés, szomszédosság fontos színezés árnyalás
Él lista Az csúcs megkeresése nehéz A lap megkeresése is nehéz Minden laptól pointerek az élekre: Minden élhez két lap és két csúcs tartozik. Az csúcs megkeresése nehéz A lap megkeresése is nehéz
Láncolt listák D 3 a e 1 c 2 C f d A b B 4 Csúcs él lap él A a 1 a B b élek csúcsok lapok Bal járat Jobb járat láb fej bal jobb elő utó a A D 3 1 e f b c B 4 d 2 C B 4 Csúcs él lap él A a 1 a B b 2 c C d 3 a D e 4 b
Láncolt lista a 1 A b c B f 4 d
Adott pont része-e egy konvex poliédernek? Mindegyik lapra megnézzük, hogy melyik oldalán van a pont. Ha mindegyikre a belső ( poliédert a tartalmazó) félterében van akkor igen. Mit csinál a gép? Számol.
Hol van a pont? Ha minden lapra teljesül akkor benne van A lapon három egymást követő pontból, vektoriális szorzással a normál vektor előállítása Ellenőrzés: a normál vektor és a lap egy pontjából a keresett pontaba mutató vektor skaláris szorzata negatív A1 n A2 A3 P ((A3-A2) (A1-A2))(P- A2)0
Konvex burok Konvexitás Csomagkötöző Oszd meg és uralkodj
Konvex burok Legyen Pi véges számú ponthalmaz konvex burka a legkisebb olyan konvex sokszög, amely még tartalmazza a Pi ponthalmazt.
Konvexitás konvex A K sokszög konvex ha bármely két pontjának összekötő szakasza is a hozzátartozik Nem konvex
Csomagkötöző algoritmus Legkevésbé meredek élt választjuk az aktuális pontból Pontok sorszámai balról jobbra növekednek
Bonyolultság N a pontok száma, K a pontok száma a burkon Bármely pontból amelyik már a konvex burkon található meg kell vizsgálni az összes többihez tartozó meredekséget. Ez N eset. KN lépés biztosan elég. Legrosszabb eset ha minden pont burkon van, és rossz sorrendben.
Oszd meg és uralkodj Két részre osztjuk a pontrendszert Felső Alsó B A
Görbék Folytonos Érintkezik is A görbülete is azonos
Harmadfokú görbék P(t)=at3+bt2+ct+d P’(t) =3at2+2bt+c Szeretnénk ha négy pont adná meg a görbét: Az első és az utolsó pont illeszkedjen a görbére Az első és az az utolsó szakasz érintő A t paraméter 0-tól 1-ig fut, ez alatt P bejárja a görbét A feltételekből P(t)meghatározható a pontok helyvektoraival a harmadokú Bezier görbék általános alakját kapjuk: P(t)=(1-t)3P1 +3t(1-t)2P2+ 3t2(1-t)P3 + t3P4 P3 P2 P4 P1
Bezier görbék
Bezier görbék tulajdonságai Az első és az utolsó kontroll pont illeszkedik Első és az az utolsó szakasz érintő A kontroll pontok konvex burkában van Könnyű megjelenítés
Konstrukció M12 P1 P2 M012 M0123 M123 M01 M23 P0 P3
Konstrukció P1 P2 P0 P3
de Casteljau Algoritmus Hasonló algoritmus a görbe leírására t=(0.25, 0.33) M12 P2 P1 M23 M01 t=0.25 P0 P3
Irodalom 3D objects representation and data structure Dr Nicolas Holzschuche-mail: holzschu@cs.uct.ac.za Modified by Longin Jan Latecki: latecki@temple.edu