8a. OBJEKOVÉ MEODY VIDIELNOSI Cíl Po prostudování této kaptoly budete znát metody vdtelnost 3D objektů na základě prostorových vlastností těchto objektů tvořt algortmy pro určování vdtelnost hran a stěn 3D objektů Výklad 8a.1. Robertsův algortmus ato metoda je použtelná pro konvexní (vypuklé) plochy a tělesa. Dále jen u ploch a těles, jejchž povrchy jsou rovnné část. Řeší hranovou vdtelnost ve scéně, která obsahuje konvexní objekty - mnohostěny. Algortmus byl publkován v roce 1963. [ Roberts, L.G.: Machne Percepton of ree Dmensonal Solds. MI Lncoln Lab.Rep.., R 315, May 1963.] Obecný postup Robertsova algortmu lze snadněj pochopt z následujícího počítačového programu. Vstup: scéna s konvexním mnohostěny. Výstup: vdtelné hrany {a nevdtelné hrany } for všechny hrany objektů na scéně do begn f hrana je průsečncí dvou nevdtelných hran then Hrana je nevdtelná else begn Vytvoř prázdný seznam vdtelných hran; Ulož hranu do seznamu vdtelných hran; for všechny mnohostěny na scéně do f seznam vdtelných hran není prázdný then for všechny hrany ze seznamu do begn Vyjm hranu ze seznamu vdtelných hran; 138
end; end Otestuj hranu na zakrytí mnohostěnem case výsledek_test of jeden, dva vdtelné úseky: Zařaď tyto úseky do seznamu vdtelných hran nevdtelná hrana: nedělej nc { hrana je vyjmuta ze seznamu vdtelných hran } end {case} end {for } else ext for cyklu pro mnohostěn; f seznam vdtelných hran není prázdný then Vykresl vdtelné hrany ze seznamu Po realzac tohoto programu máme seznam vdtelných a nevdtelných hran pro jednotlvé konvexní objekty. Jestlže průměty vdtelných hran se překrývají, je nutno řešt vdtelnost příslušných hran na základě "zdánlvých" průsečíků těchto překrývajících se průměrů hran. Jestlže budeme předpokládat, že těleso je konvexní a je ohrančeno rovnam, problém se poměrně zjednoduší a je ho možno řešt následujícím způsobem. Každý poloprostor je dán nerovncí:.j. kde v. x 0 [ a, b, c, d ]. [ x, y, z, 1 ] 0. a1, b1, c1,...... V............ an bn cn je matcí, kde každá řádka reprezentuje jednu rovnu ohrančující dané těleso. Dále budeme předpokládat, že rovny jsou orentovány tak, že 139 d 1 v1............ d n vn (8a.1)
v. x 0 (jsou hodnoty vektoru kladné) v. x 0 (alespoň jedna hodnota záporná ) v. x 0 & j v. x 0 s kde x I je lbovolný bod uvntř tělesa, x 0 x S je lbovolný bod vně tělesa, je lbovolný bod na povrchu tělesa. j Jestlže není předem určena orentace rovn a tím poloprostorů, je nutno specfkovat bod X, který je uvntř prostoru. Potom musí platt: v. x 0. Jestlže tomu tak není a je v. x 0 musíme vektor v nahradt vektorem - v.o znamená změnt znaménka u koefcentů a, b, c a d. Protože objekt je konvexní, vntřní bod lze určt jako střed spojnce dvou bodů, které neleží na jedné stěně objektu, ale jsou vrcholy tohoto objektu. Pro body x a y j bude platt x = ( x + x j ) / 2. Jako vntřní bod lze určt střed spojnce vrcholů které leží v různých rovnách. Jestlže předpokládáme - u rovnoběžného promítání - že pozorovatel je v nekonečnu, je možno pozc pozorovatele defnovat vektorem x P = [ 0, 0, -1, 0 ]. ím je dána také pozce testovacího bodu. ento vektor reprezentuje v nehomogenních souřadncích lbovolný bod v rovně z = -, to je lbovolný bod (x,y,- ). Pro rovny, které jsou "odvrácené" od pozorovatele potom platí: v. x 0 je ekvvalentní podmínce c j > 0. j Je zřejmé, že tento vcelku jednoduchý způsob je velm vhodný pro určování vdtelných a nevdtelných ploch u konvexních těles. A tak pak je možno určt vdtelné resp. nevdtelné hrany. Platí: a) průsečnce dvou vdtelných ploch - rovn (hrana společná dvou vdtelných ploch) je vdtelná - pokud není překryta jným tělesem. b) průsečnce dvou nevdtelných ploch - rovn (hrana společná dvou nevdtelných ploch) je nevdtelná. c) průsečnce vdtelné a nevdtelné plochy - rovny 140 s
(hrana společná dvou vdtelné a nevdtelné plochy) je vdtelná a tvoří mez vlastního stínu. Hrany, které tuto mez tvoří jsou tedy vdtelné - pokud nejsou překryty jným tělesem nebo plochou. Pro rovny p 1, p 2, p 3, které mají společný bod - vrchol a jsou reprezentovány vektory v 1,v 2,v 3 bude platt v. x 0 v. x 0 v. x 0 1 2 3 V homogenních souřadncích: B. x = r 1, (8a.2) kde B = [ v 1, v 2, v 3, s ], s = [ 0, 0, 0, 1 ], r = [ 0, 0, 0, d ], kde d > 0 je hodnota měřítka. Vynásobíme-l (8a.2) nverzní matcí B -1 dostaneme X = B -1. r. Posledním sloupcem matce B -1 je dán tedy tento společný bod - vrchol. Dalším krokem této metody je zjštění, zda jednotlvé hrany tělesa nejsou zakryty jným tělesem. Zde není jné východsko, než porovnat každou hranu vzhledem ke všem tělesům na scéně, jestl není promítaná hrana zakryta úplně nebo částečně. K urychlení výpočetního procesu přspěje: a) zjstt mnma a maxma jednotlvých souřadnc - "obalt" tělesa resp. plochy hranoly a tím zjstt, zda-l je možný překrývaný průmět. b) určt nejdříve průměty "obrysů" jednotlvých těles a na základě protínajících resp. neprotínajících se vržených stínů vyelmnovat sporné stuace. Určení průsečíků - ať zdánlvých č skutečných - není trvální záležtost. Vede zpravdla na řešení soustavy lneárních rovnc. Vyjádření hrany tělesa: parametrcky v = s + d. t kde - v je vektor na přímce; - s vektor počátečního bodu úsečky; - d je směrový vektor přímky. Jestlže takováto úsečka není celá vdtelná, je Obr. 8a.1 nutno určt hodnoty parametru t pro něž je 141
vdtelná. Na obrázku je znázorněn postup: Svazek přímek mez pozorovatelem Q vyjádříme pomocí parametru úhlu. o jest Q (, t ) = v + g. = s + d. t + g. pro t < 0, 1 >, Př paralelní projekc platí kde g je směrový vektor mez bodem na úsečce a pozorovatelem; v je vektor úsečky x 1 x 2. g = [ 0, 0, 1, 0 ]. Jestlže potřebujeme určt hodnoty parametrů t, jakožto hodnoty, které určují zakrytou část úsečky, lze použít opět skalárního součnu. Označíme: h = B. Q (, t ) h = B. s + t. B. d + a. B. g pro t < 0, 1 > & 0. a dále označíme lze napsat p = B. s, q = B. d a w = B. g h = p + t. q +.w pro pro t < 0, 1 > & 0. Jestlže bude exstovat takové j, že bude platt h j = p j + t. p j +. w j > 0 pro t < 0, 1 > & 0, potom pro tuto hodnotu j resp. tento bod přímky je zakryt tělesem, které je matcí B reprezentováno. Zbývá tedy vyřešt soustavu nerovnc h j 0 Mezním případem mez vdtelností a nevdtelností bodu je případ, kdy h j = 0, tj. kdy bod leží v rovně. edy j h = 0 & h j = 0, j & j dostaneme soustavu n ( n - 1 ) / 2 rovnc, které je nutno řešt vzhledem k proměnným t a. Je však potřeba navíc (oprot obecnému matematckému řešení) testovat t < 0, 1 > & 0 & h k > 0 k K, j. 142
Budeme-l aplkovat uvedený algortmus na všechny plochy h a h j dostaneme nterval hodnot parametru t, který určuje zakrytou část úsečky. Robertsův algortmus lze rozložt do tří částí. 1. Odstranění nevdtelných hran a povrchů př uvažování samotného konvexního tělesa. 2. Porovnání hrany a ostatních těles a nalezení zakrytých částí. 3. Nalezení hran, které vznknou př eventuálním protnutí dvou těles. Zjstíme je jako průsečnce dvou rovn, které tělesa ohrančují. Přpomeneme: uvedený algortmus platí pouze pro konvexní tělesa. Pro jeho výpočtovou složtost není vhodný pro scény, kde je více těles. Pro tyto složtější případy, kdy na scéně jsou konkávní tělesa jsou vyvnuty vhodnější algortmy. yto modfkace Robertsova algortmu jsou založeny na rozkladě scény na "podscény" a tak je snžována výpočetní náročnost. V následujících příkladech bude ukázáno, jaké prostředky je možno k případné modfkac Robertsova algortmu vdtelnost používat. Určení orentace rovn stěn s ukážeme na následujícím příkladu 1. Příklad 1. Mějme dáno těleso, které je společnou částí poloprostorů zadaných 6-t rovnam: p 1 : x = 1/2, p 2 : x = -1/2 p 3 : y = 1/2, p 4 : y = -1/2 p 5 : z = 1/2, p 6 : z = -1/2. Rovnce rovny p 1 je 2 x - 1 = 0. Matce, která danou krychl určuje tedy bude 2 2 0 0 0 0 0 0 2 2 0 0 V 0 0 0 0 2 2 1 1 1 1 1 1 Určíme vntřní bod. Na příklad x = ( 0.25, 0.25, 0.25 ). V homogenních souřadncích je tento bod určen vektorem x = [ 1, 1, 1, 4 ]. Orentac jednotlvých ploch určíme: p 3 2y -1 = 0 p 4 2y +1 = 0 z y 0 Obr. 8a.1 p 2 2x +1 = 0 p 1 2x -1 = 0 p 6 2z +1 = 0 x p 5 2z -1 = 0 143
2 2 0 0 0 0 1 V. x 0 0 2 2 0 0. 1 2, 6, 2, 6, 2, 6. 0 0 0 0 2 2 1 1 1 1 1 1 1 4 Aby bod x = ( 0.25, 0.25, 0.25 ) byl vntřním bodem, je nutno 1., 3. a 5. řádek matce znásobt konstantou -1. Nebo-l změnt orentac rovn. Po úpravě dostaneme matc, která reprezentuje konvexní těleso (krychl). V 2 2 0 0 0 0 0 0 2 2 0 0 0 0 0 0 2 2 1 1 1 1 1 1 edy: [ 2, 6, 2, 6, 2, 6 ].. Pro jné operace na př. posunutí, matce v homogenních souřadncích má tvar: 1 0 0 3 0 1 0 0 0 0 1 0 0 0 0 1 Matce V' defnující konvexní těleso po posunutí je defnováno takto: 2 2 0 0 0 0 1 0 0 3 0 0 2 2 0 0 0 1 0 0 1 V ' V.. 0 0 0 0 2 2 0 0 1 0 1 1 1 1 1 1 0 0 0 1 Výsledek - matce posunutého tělesa: 2 2 0 0 0 0 0 0 2 2 0 0 V ' 0 0 0 0 2 2 7 5 1 1 1 1 Jestlže nyní otestujeme bod x = ( 0.25, 0.25, 0.25 ), dostaneme V'. x = [ 26, -18, 2, 6, 2, 6 ]. o znamená, že bod x = (0.25, 0.25, 0.25) leží vně daného n-úhelníka. Budeme-l aplkovat posunutí na bod x dostaneme 144
potom x' =. x = [ 13, 1, 1, 4 ], V'. x' = [ 2, 6, 2, 6, 2, 6 ]. Bod x' je vntřním bodem posunutého objektu. Obdobně pro otáčení okolo os o úhel a budou mít transformační matce tvar: Osa y: R y cos 0 sn 0 0 1 0 0 sn 0 cos 0 0 0 0 1 Pro = /4 je 2 / 2 0 2 / 2 0 Ry 0 1 0 0 2 / 2 0 2 / 2 0 0 0 0 1 Matce V'' = V. R 1 y = 2 2 0 0 0 0 0 0 2 2 0 0 0 0 0 0 2 2 1 1 1 1 1 1. R R 1 y 1 y cos 0 sn 0 0 1 0 0 sn 0 cos 0 0 0 0 1 2 2 0 0 2 2 0 0 2 2 0 0 0 0 0 0 2 2 1 1 1 1 1 1 Matce otočeného konvexního tělesa o úhel /4. 2 / 2 0 2 / 2 0 0 1 0 0 2 / 2 0 2 / 2 0 0 0 0 1 2 / 2 0 2 / 2 0 0 1 0 0 2 / 2 0 2 / 2 0 0 0 0 1 Z hledska pozorovatele, který je v bodě [ 0, 0, 1, 0 ] jde vlastně o rovnoběžný průmět, protože pozorovatel je v poloze z = je testovací bod potom určen jako x = [ 0, 0, -1, 0 ] V''. x = 2, 2, 0, 0, 2, 2 o znamená, že stěny 1. a 6. jsou nevdtelné. Dále je možný závěr: průsečnce 1. a 6, stěny taktéž není vdtelná. 145
je-l dáno: Úsečka: U krychle z příkladu 1 určete, zda úsečka s koncovým body x 1 a x 2 je krychlí zakryta, x 1 = [ -2, 0, -2, 1 ] Krychle: 2 2 0 0 0 0 0 0 2 2 0 0 V. 0 0 0 0 2 2 1 1 1 1 1 1 Jestlže pozorovatel je v bodě ( x, y, ), potom g = [ 0, 0, 1, 0 ], a úsečka s = [ -2, 0, -2, 1 ] (poč.bod) d = [ 4, 0, 0, 0, ] (vektor) x 2 = [ 2, 0, -2, 1 ] Pro jednotlvé koefcenty určující výraz pro h určíme: p = V. s = [ 5, -3, 1, 1, 5, -3 ] q = V. d = [ -8, 8, 0, 0, 0, 0 ] w = V. g = [ 0, 0, 0, 0, -2, 2 ] Obr. 8a.3 Po rozepsání dostaneme soustavu nerovností h j > 0 : 5-8t > 0-3 + 8t > 0 1 > 0 1 > 0 5-2 > 0-3 + 2 > 0 Pro a t dostaneme v oblast dané kartézským součnem t < 3/8, 5/8 > * < 3/2, 5/2 >. Pak lze určt koncové body úseků a to tak, že úsečka je vdtelná v ntervalech 146
t < 0, 3/8 > a t < 5/8, 1 >. Odtud koncové body úsečky: x 3 = s + d. t = [ -1/2, 0, -2, 1 ] x 4 = s + d. t = [ 1/2, 0, -2, 1 ]. Úloha k řešení 8a.1. Mějme stejnou krychl v základní poloze a úsečku danou koncovým body x 1 a x 2, která krychl protíná. Určete průsečíky a vdtelnost úsečky a krychle pro pozorovatele g = [0, 0, 1, 0] 1. 8a.2. Zadávání 3D těles Výklad Na následujícím příkladě 3 je ukázán způsob zadání prostorových hranatých těles zadaných vrcholy, resp. Hranam a stěnam. Jde o průnk dvou hranolů. Obr. 8a.4 Příklad 3. Aplkujte Robertsův algortmus na následující zobrazenou scénu. Pro použtí Robertsova algortmu musíme s označt - očíslovat jednotlvé vrcholy a hrany. Je uvedeno v následujících tabulkách. Vrcholy tělesa jsou zadány formou tabulky 1. Vrcholy těles jsou očíslovány v prvním řádku tabulky. Jednotlvá tělesa jdou postupně ve sloupcích, kde v následujících řádcích jsou souřadnce x, y a z jednotlvých vrcholů. Poznámka: Souřadnce x, y a z jsou načítány a ukládány ve tvaru REAL. Vrcholy: těleso 1 těleso 2 147
vrchol 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 x 0 2 2 0 0 2 2 0 1 3 3 1 1 3 3 1 y 0 0 0 0 6 6 6 6 2 2 2 2 4 4 4 4 z 1 1 3 3 1 1 3 3 0 0 4 4 0 0 4 4 abulka 1. V tabulkách 2. a 3. jsou uloženy očíslovány jednotlvé hrany těles. 1. řádek tabulky: očíslované hrany těles. 2. a 3. řádek : čísla vrcholů, které jsou počáteční a koncové body příslušných hran. Hrany: těleso 1 hrana 1 2 3 4 5 6 7 8 9 10 11 12 vrchol 1 1 2 3 4 5 6 7 8 1 2 3 4 vrchol 2 2 3 4 1 6 7 8 5 5 6 7 8 abulka 2. těleso 2 hrana 13 14 15 16 17 18 19 20 21 22 23 24 vrchol 1 9 10 11 12 13 14 15 16 9 10 11 12 vrchol 2 10 11 12 9 14 15 16 13 13 14 15 16 abulka 3. V tabulce 4. jsou uloženy stěny jednotlvých těles jako očíslované n-úhelníky. U každého n-úhelníka je seznam hran, které n-úhelník tvoří. Stěny (n-úhelníky) n-úhelník hrany n-úhelník hrany 1 2,11, 6,10 7 14, 23, 18, 22 2 4,12, 8, 9 8 21, 20, 24,16 3 5, 6, 7, 8 9 17, 18, 19, 20 4 1, 2, 3, 4 10 13, 14, 15, 16 5 3,12, 7,11 11 15, 24, 19, 23 6 1, 10, 5, 9 12 13, 22, 17, 21 abulka 4. Poznámka: Všechna čísla vrcholů a hran jsou CELOČÍSELNÁ INEGER. 148
Metoda a postup př řešení vdtelnost je 1. určíme vzájemnou polohu těles - objektů. V případě průnků doplnt o další hrany - průsečnce pronkajících stěn. Př zvolení daného místa pozorovatele určíme vdtelnost stěn resp. hran jednotlvých těles. 2. Zjstíme vzájemné překrytí hran resp. stěn. ento postup není unverzálním typem pro řešení podobných problémů. Je spíše seznamem problémů, které je nutno řešt př vdtelnost. Shrnutí pojmů Robertsova metoda metoda na potlačení nevdtelných hran pro prostorová hranatá vypuklá konvexní tělesa zadaná vrcholy a hranam resp. stěnam. ělesa je nutné zapsat formou matce vrcholů. Vz. (8a.1) U stěn a hran je nutné určt jejch vdtelnost. Je nutné určt rub a líc jednotlvých stěn pomocí orentace normály. Otázky 8a. Robertsova metoda 1. Popšte v bodech prncp Robertsovy metody a její použtí. 2. Uveďte vhodnost použtí Robertsovy metody. 3. Vysvětlete prncp zadání hranatých těles. 4. Vysvětlete způsob určování vdtelnost hran, stěn. 149