2. Vplňování, transformace Cíl Po prostudování této kapitol budete umět vplňovat a šrafovat ohraničenou oblast zobrazovat objekt 3D do rovin odvodit vztah pro zobrazení 3D objektů do rovin Výklad 2.. Algoritm vplňování 2... Semínkové algoritm jsou založen na principu, že známe jeden bod vbarvované oblasti. K danému bodu - semínku - určíme jeho čtři sousední bod v rastru. Jestliže tto sousední bod nemají barvu hranice oblasti, ani barvu vplňovací, vbarvíme je. Takto postupujeme rekurzívně dále. Obr. 2.. Obr. 2.2. Na obrázku 2.. je znázorněna oblast pro vplnění metodou ze semínka (SEED). Na obrázku 2.2. je znázorněn postup při analýze čtř resp. osmi sousedních bodů. Při možnosti hardwarového vplňování čtvercové oblasti, je vhodné rozložit vplňovanou oblast na čtverce s postupně půlenými stranami. Postup je následující. Jestliže čtverec je celý v oblasti - je vplněn. Pokrývá-li čtverec oblast jen částečně, je rozčtvrcen a procedura se rekurzivně opakuje na menších čtvercích až do stran čtverce jednoho pixelu. Začínáme čtvercem celé kreslící ploch. Oblast vplňované rekurzivním čtvrcením čtverců. Obr. 2.3 27
2..2. Řádkové algoritm (šrafování) jsou založen na výpočtu průsečíků vplňovací - šrafovací - přímk. Šrafování - vplňování je výhodnější, jestliže šraf jsou rovnoběžné s osou x (). (Transformace otočením.) Předpokládejme, že přímk (a,b,c,...) budou rovnoběžné s osou ve vodorovném směru. Algoritmus pro vplňování řádkovou konverzí počítá s tím, že přímka může mít pouze sudý Obr. 2.4 Obr. 2.5 počet průsečíků s n-úhelníkem, který tvoří hranici vplňované ploch. V okamžiku, kd přímka p "protíná" n-úhelník pouze v jednom bodě, nebo se dotýká, řešíme tuto situaci takto: ) Prochází-li přímka zpracovávaného řádku vrcholem, potom se a) do seznamu průsečíků zapíše pouze jeden průsečík, jestliže protínající se hran jsou klesající nebo rostoucí. Např.: pro hran BA, AK se vrchol A uvažuje pouze jednou. b) V opačném případě se obě hran zkrátí - právě ten bod se vnechá. Na obrázku 2.4 jde o vrchol C, D a E.) 2) Jestliže přímka zpracovávaného řádku je rovnoběžná s hranou vplňované oblasti - vpustíme tuto hranu. Postup řádkového algoritmu lze napsat takto: - Postupujeme od nejvššího vrcholu n-úhelníku směrem dolů. - V každém řádku zleva doprava. - Vřadíme vodorovné hran. - Upravíme rostoucí resp. klesající hran a současně upravíme orientaci hran tak, ab jejich první vrchol měl - souřadnici všší než druhý vrchol. (Úprava spočívá v eventuálním zkrácení.) 28
Předpokladem je ted uspořádaná tabulka hran. V této tabulce rozlišujeme aktivní a pasivní hran. Aktivní jsou t, které jsou protínající přímkou proťat. Šrafování objektů je možno provádět stejně jako při řádkovém vplňování. Posun ve směru druhé os je větší než jedna. Posun je nutno přepočítat dle počtu pixelů na požadovanou vzdálenost šraf. Jestliže šraf nejsou rovnoběžné s vodorovnou osou x, tj. svírají s osou x úhel, otočíme hranici šrafované oblasti o úhel -. Vpočtené jednotlivé šraf otočíme zpět o úhel. Na obrázku 2.5 je tento postup znázorněn. Shrnutí pojmů Semínkové vplňování - vbarvování pixelů určenou barvou místo barv pozadí. Vhodné použití vplňování malých ploch (tučně vplňované písmo). Pro velké ploch (při použití rekurzivních procedur) je možnost přeplnění paměti počítače. Pro vplňování velkých ploch není vhodné semínkovou metodu programovat rekurzivně. Řádkové vplňování - vbarvování pixelů určenou barvou místo barv pozadí po jednotlivých řádcích. Je nutno určit počáteční a koncový bod řádku vplňování určenou barvou a sudý počet průsečíků hranice vplňování. Šrafování je vlastně řádkové vplňování, kde posun ve směru svislé os je přičítání řádků o více než jeden pixel. Jestliže šraf nejsou rovnoběžné s vodorovnou osou x, ale svírají s osou x úhel, je nutné šrafovaný útvar otočit o úhel -, a po výpočtu jednotlivých šraf, tto otočit zpět o úhel. 2.2. Homogenní souřadnice Před kapitolou o transformacích souřadnic bodů v prostoru je nutné se seznámit se způsobem zadávání souřadnic. Jde o homogenní souřadnice. Zavedení homogenních souřadnic umožňuje (především) transformační výpočt provádět pomocí maticových operací včetně počátku souřadné soustav. Homogenní souřadnice dále umožňují počítat s nevlastními bod soustav. 29
Bod M(x,) je reprezentován v homogenních souřadnicích M h (wx, w, w), kde w je různé od nul. Potom bod s homogenními souřadnicemi (X,Y,W) má kartézské souřadnice x = X/W a = Y/W. W M h W= M Obr. 2.6 W= x Přepis jednotlivých operací pak můžeme psát v následujících tvarech: 2.3.. Translace Posunutí vektorem (a, b ), kde a je posun ve směru os x, kde b je posun ve směru os. Přepočet souřadnic posunutých bodů je dán vztahem: x ' = x + a ' = + b V homogenních souřadnicích x' a x ' b X = T(a, b).x Měřítko x = x. k k - násobek ve směru os x =. q q - násobek ve směru os z = z. r r - násobek ve směru os z. Lze v homogenních souřadnicích zapsat: x' k x ' q z' r z X = M( k, q, r). X 3
2.3.2. Rotace (2D) Pro otáčení v rovině o úhel kolem počátku souřadnicového sstému platí vztah: V maticovém tvaru bude: x x x cos sin x sin cos cos sin sin cos V homogenních souřadnicích: x cos sin sin cos 2.3.3. Rotace (3D) o úhel kolem souřadnicových os. Rotace okolo os z: x x X = R(α). X x.cos α.sin α Obr. 2.7.cos α x.sin α z : x' x cos sin ' x sin cos z' z Podobně lze zapsat i ostatní operace - otočení okolo os a x; dále zrcadlení dle os x resp.. Výhodou homogenních souřadnic je, že umožňuje realizovat jednotlivé geometrické operace pomocí jediné maticové operace. Pozor! Při rotaci ve 3D prostoru musíme dávat pozor na znaménka u jednotlivých prvků matice. Čili - pozor na levo - pravotočivost soustav. Zřetězení jednotlivých operací lze ukázat na příkladě: Máme geometrický objekt, který chceme otočit o úhel kolem bodu A. Postup řešení je: - posun všech bodů útvaru tak, ab bod A(a,b) bl v počátku nových souřadnic; - otočíme objekt o úhel = /2; - posun všech bodů útvaru tak, ab bod A bl na původním místě. x z cos sin sin cos x z 3
Postup lze ted zapsat: ted: X = T(-a,-b) * X X = R()* X Xx = T(a,b)* X t.j. X = T(a,b,) * R() * T(-a,-b) * X X = Q(a,b,) * X kde:,,,, Q a b T a b R T a b x''' a cos sin a x ''' b sin cos b Po vhodnocení výrazu Q dostaneme: cos -sin -a.cos +b.sin + a Q(a, b, ) = sin cos -a.cos - b cos + b Po dosazení za = /2 do R() dostaneme: R Vhodnocení maticového výrazu pro = -/2 dostaneme: Q a, b, / 2 b a a b QR QP Obecně ted lze napsat: Q kde matice Q R je rozměru 2 2 a jde o rotaci a matrice Q P je rozměru 2 a jde o posuv. 32
2.3.5. Geometrické transformace Geometrickou transformací rozumíme transformaci určitého geometrického objektu na jiný objekt. Zatím jsme se seznámili s transformacemi, které objekt posouvali, otáčeli, měnili měřítko. Zavedením homogenních souřadnic a složení těchto "jednoduchých" transformací umožní vjádřit jednou transformační maticí stejnolehlost. Tuto geometrickou příbuznost lze složit z posunutí, změn měřítka a zpětného posunutí. Na obrázku 2.8 je dán bod S(x S, S ), bod P(x P, P ) a "obraz" P'(x P, P ) bodu P tak, že všechn bod leží na jedné přímce. Potom definujeme pojem stejnolehlosti bodů P a P' se středem stejnolehlosti v bodě S. Zbývá určit koeficient q stejnolehlosti. Jak známo koeficient q stejnolehlosti je poměr orientovaných úseček SP a SP'. SP q. SP' Afinní vztah budeme vjadřovat maticově. Ted rovnicí ve tvaru [x,, ] = A. [x,, ], ( 2. ) Zopakujme si transformační matice pro kde A je transformační matice. Posunutí: Otočení: Měřítko: a cos sin A P b A O sin cos Transformační matice A S pro stejnolehlost je: m A M m q AS q xs q S q kde q je koeficient stejnolehlosti; x S a S jsou souřadnice středu stejnolehlosti. Jestliže dosadíme do rovnice ( 2. ) pro střed S(4,2) stejnolehlosti o koeficientu q = -/2 dostaneme: 5 4 P(x P, P ) 3 2 S(x S, S ) P (x P, P ) 2 3 4 5 6 7 8 9 x Obr... Obr. 2.8 33
K bodu P(8, 4) bod P' tak, že dostaneme: ted x' 8 x', ', 4 2 2 8 4 2 2 2 4 4 4 6 2 ; 2 2 ' 8 4 2 2 3. 2 2 Stejnolehlý bod P' k bodu P má souřadnice P' ( 2, ). Lze tak odvodit transformační matici pro "převod" z jehlanového prostoru na hranolový, resp. krchlový a opačně. 2.4. Transformace v prostoru. Obecný postup při otočení objektu kolem os v obecné poloze. Postup v tomto případě je nutno rozdělit na více kroků.. Posuneme objekt tak, ab osa rotace procházela počátkem. (Osu považujeme za součást objektu.) Translace O O'(x,,z ) 2. Otočíme objekt tak, ab osa padla do některé souřadnicové os - nejspíše do os z. Tento bod však musíme provést ve dvou krocích. a) Otočíme osu rotace (ted i objekt) kolem os z do rovin (xz) o úhel. Úhel je úhel prvního průmětu os o' do rovin (x). b) Otočíme objekt okolo os o úhel 2. Úhel 2 je úhel, který svírá osa o' s osou z. 3. Otočíme objekt okolo os z o úhel. Nní provedeme celou translakci v opačném směru. Obr. 2.9 34
Ted: 4. Otočíme objekt okolo os o úhel - 2. 5. Otočíme objekt okolo os z o úhel -. 6. Provedeme translaci O O'(-x p,- p,-z p ). Potřebné úhl resp. jejich kosin získáme pomocí směrových kosinů vektoru os rotace. 2 2 2 Platí: PQ v x p xq p q z p zq v 2 x x 2 2 p q p q cos 2 v v z cos p z v q 2 Program pro cvičení: Vpracujte proceduru, která množinu bodů (vrcholů těles) otočí okolo os dané dvěma různými bod P,Q. 2.5. Transformace prostoru (3D) do rovin (2D) Význam promítacích metod pro počítačovou grafiku a opačně. Prostředk počítačové grafik umožňují efektivnější řešení konstruktivních úloh. Jde především o zmechanizování kresličské práce, efektivnější práce projektantů a pod. Základní rozdíl mezi tradiční geometrií a počítačovou grafikou :. V geometrii jsme nejprve volili promítací metodu a potom v této zobrazili objekt. V počítačové grafice je tomu právě naopak. Nejprve vtvoříme objekt - nemusí to být ani v žádné promítací metodě - a potom volíme metodu vhodnou pro požadovaný účel. 2. Při změně dat blo nutno celý proces tj. konstrukci objektu i jeho zobrazení zpracovat znovu. Vpracované procedur v PG nás tohoto ušetří. Neboť stačí vvolat tentýž transformační program s jinými parametr. Pro práce je nutno vpracovat procedur ve všech používaných promítacích metodách. A to v Mongeově projekci, kosoúhlém promítání resp. v technickém kosoúhlém promítání, axonometrii (ortogonální) a perspektivě. V pravoúhlém promítání - ted v Mongeově projekci nebo kótovaném promítání, stačí "zanedbat" jednu souřadnici. Jestliže ztotožníme nákresnu s jednou průmětnou, vnulujeme 35
příslušnou souřadnici bodů. Pro kótované promítání je nulována z-tová souřadnice. Pro promítání na nársnu je nulována souřadnice. V ostatních promítáních musíme provést přepočet souřadnic. 2.5.. Kosoúhlé promítání Jde o rovnoběžné promítání, kde jedna osa (zpravidla osa ) se promítá pod úhlem, který je kosý vzhledem k ostatním průmětům os a průmětnám. Jednotková délka ve směru této os je v průmětu násobena kladným číslem obvkle (zkrácením) q. *q*cos *q*sin a) b) Obr. 2. Nákresnu (zobrazovací rovinu (x z ) ) ztotožníme s rovinou (xz). Průmět os z ztotožníme s osou z zobrazovací rovin, osu x zobrazovací rovin ztotožníme s osou x souřadnicového sstému. Ted z ', x x '. Potom dle obrázku 2. plne: x = x * q * cos = z - * q * sin. Na obrázku 2.a) je zobrazen bod M ve vztahu k Mongeově promítání na dvě kolmé průmětn. Na obrázku 2,b) zobrazena krchle, jejíž tři hran leží na souřadnicových osách. Průmět hran krchle, které jsou rovnoběžné s osou se zkracují ( * q). Jsou zde naznačen vztah mezi souřadnicemi v pravoúhlém a kosoúhlém promítání. 36
2.5.2. Axonometrie Pod pojmem axonometrie je všeobecně považována ortogonální axonometrie. To znamená, že promítací paprsek je kolmý na zobrazovací rovinu, která není rovnoběžná se žádnou souřadnicovou rovinou kartézské soustav. Na obrázku 2. je soustava zadána osami x,, z, kde na souřadnicových osách leží hran hranolu. Nákresna, která je dána obecným trojúhelníkem XYZ, do které se zobrazuje hranol, není rovnoběžná se žádnou souřadnicovou rovinou. Souřadnicová osa nákresn se promítá do průmětu os z souřadnicového sstému. Osa x prochází počátkem O souřadnicového sstému a je kolmá na osu. Jestliže zvolíme obecný bod M(x,, z) v soustavě x, a z, lze odvodit souřadnice x a. Odvození je patrno z obrázku číslo 2.2. x M = M. cos - x M. cos M = z M - a b z M - M. sin - x M. sin Nahradíme obecné souřadnice bodu M násobkem jednotk na osách x,, z. A to x M = x M. J x M = M. J z M = z M. J z. Dostaneme transformační rovnice axonometrie: x = - x. J x. cos +. J. cos = - x. J x. sin -. J. sin + z. J z Pro naprogramování je vhodné zavést některé substituce: x = - x. J x. cos +. J. cos K L = - x. J x. sin -. J. sin + z. J z Obr. 2. Obr. 2.2 Obr. 2.3 M N 37
Dosadíme-li tto konstant do předešlých rovnic, dostaneme obecné transformační rovnice K = -J x. cos L = J. cos M = -J x. sin axonometrie: N= -J. sin x = K. x + L. = M. x + N. + J z. z. Pro odvození zkrácení jednotek na osách (viz obrázek 2.3) platí: Z cos = 2 a cos = 2 J x J x = cos, cos a obdobně J = cos, cos a J z = cos, cos. Je zřejmé, že jednotk zkrácení J x, J, J z NELZE VOLIT LIBOVOLNĚ. Je nutno je vpočítat na základě matematických vztahů. Postup lze odvodit z obrázku 2.3, který zde uvádím pro lepší pochopení promítací metod ortogonální axonometrie. J x J J z sin cos cos cos sin sin cos cos cos sin sin sin cos cos cos Obr. 2.4 38
2.5.3. Perspektiva Jde o středové promítání objektu do rovin. Promítací paprsk procházejí středem S. Jsou různoběžné a tím výpočet průmětu 3D těles je složitější, ale průmět je přirozenější lidskému vnímání. Odvození převodních vztahů je naznačeno na obrázku 2.4 a následuje. Z podobnosti MM S a M M S ' z ' M S M S (2.2) a z podobnosti RM S a OM S ' M S x' d M S x d Z (2.2) a (2.3) x' x ' z d k d - (2.3) k... transformační konstanta Transformační rovnice perspektivní projekce: x = k. x a d = k. z kde k d. Pro volbu d b mělo platit x 2 + 2 < d 2 /4. Jestliže střed perspektiv neleží na ose a průmětna není totožná s rovinou (x,z) - nársnou, otočíme průmětnu kolem os z o úhel. Ze vztahu otočení kolem os z vpočteme a, b a nové x a. (Viz. předešlé vztah o otáčení.) a x cos sin b x sin cos S d x' ' d C a b d b z x a C z C z M z M R M M M x M střed promítání (oko) Obr. 2.4 Obr. 2.4 x M x x 39
Shrnutí pojmů Vplňování a) semínkové b) řádkové (šrafování) Homogenní souřadnice. Homogenní souřadnice dále umožňují a) počítat s nevlastními bod soustav b) transformační vztah realizovat maticovými operacemi. Transformace a) posun (translace), měřítko, rotace (2D a 3D) b) transformace Z 3D do 2D (promítání) kosoúhlé, axonometrie a perspektiva Otázk 2... Odvoďte matematické vztah pro translace, transformace rovinných a prostorových útvarů. 2. Jaké výhod posktuje počítačová grafika ve srovnání s tradiční konstruktivní geometrií? 3. Odvoďte transformační rovnice pro promítání - kosoúhlé, axonometrii, perspektivu. Úloh k řešení 2.. Vpracujte procedur pro kosoúhlé promítání, axonometrii a perspektivu. 2. Vpracujte proceduru pro rotaci objektu okolo obecné os. 4