Ořezávání dvourozměrných objektů Počítačová grafika Mgr. Markéta Trnečková, Ph.D. Palacký University, Olomouc
Test polohy bodu Osově orientovaná hranice - Cohen-Sutherland p x < xw min... vně p x > xw min... uvnitř Mgr. Markéta Trnečková, Ph.D. (UPOL) Ořezávání dvourozměrných objektů 1 / 14
Test polohy bodu Obecná hranice - Cyrus-Beck rovnice přímky: F (x, y) : ax + by + c = 0 F (p x, p y ) > 0... uvnitř F (p x, p y ) = 0... na hranici F (p x, p y ) < 0... vně ve vektorovém tvaru n... normálový vektor směřující dovnitř oblasti n (P F ) > 0... uvnitř n (P F ) = 0... na hranici n (P F ) < 0... vně Mgr. Markéta Trnečková, Ph.D. (UPOL) Ořezávání dvourozměrných objektů 2 / 14
Cohen-Sutherland kod(p ) Kod(Q) = úsečka je celá v okně kod(p ) Kod(Q) úsečka je celá mimo kod(p ) Kod(Q) = úsečka prochází více oblastí Mgr. Markéta Trnečková, Ph.D. (UPOL) Ořezávání dvourozměrných objektů 3 / 14
Cyrus-Beck parametrická rovnice přímky: P (+) = P 1 + (P 2 P 1 )t n (P (t) F ) < 0... vně n (P (t) F ) = 0... na hranici n (P (t) F ) > 0... uvnitř průsečík: t = n (P 1 F ) n (P2 P 1 ) Mgr. Markéta Trnečková, Ph.D. (UPOL) Ořezávání dvourozměrných objektů 4 / 14
Cyrus-Beck Inicializace: t l = 0, t u = 1, d = P (1) P (0) Pro všechny hranice i s vnitřní normálou n i dělej: Pokud d n i 0 pak t = ( w i ni )/ d n i ; Pokud ( d n i > 0)&(t 1) pak t l = max(t, t l )... oprav průsečík t l Pokud ( d n i < 0)&(t 1) pak t u = min(t, t u )... oprav průsečík t u Pokud w i ni < 0 Ukonči výpočet... úsečka je zredukována na bod mimo okno Pokud t l < t u pak OřezanáÚsečka(P (t l ), P (t u ))... jinak úsečka leží mimo okno Mgr. Markéta Trnečková, Ph.D. (UPOL) Ořezávání dvourozměrných objektů 5 / 14
Ořezání polygonů Mgr. Markéta Trnečková, Ph.D. (UPOL) Ořezávání dvourozměrných objektů 6 / 14
Ořezání polygonů Mgr. Markéta Trnečková, Ph.D. (UPOL) Ořezávání dvourozměrných objektů 7 / 14
Ořezání polygonů Mgr. Markéta Trnečková, Ph.D. (UPOL) Ořezávání dvourozměrných objektů 8 / 14
Sutherland-Hodgmanův algoritmus Mgr. Markéta Trnečková, Ph.D. (UPOL) Ořezávání dvourozměrných objektů 9 / 14
Sutherland-Hodgmanův algoritmus Mgr. Markéta Trnečková, Ph.D. (UPOL) Ořezávání dvourozměrných objektů 10 / 14
Sutherland-Hodgmanův algoritmus Inicializuj bod S = [x s, y s ] souřadnicemi posledníhoo vrcholu polygonu Pro vrcholy P i = [x Pi, y Pi ] (i = 1,..., n) ořezávaného polygonu postupně proveď: Pokud x Pi > xw min pak Pokud x s > xw min Přidej P i další hranici k ořezání (1.) jinak Vypočti průsečík I jako [xw min, y S + (xw min x S ) y P i y S x Pi x S ] Předej I další hranici k ořezání (2.) Předej P i další hranici k ořezání jinak Pokud x s > xw min pak Vypočti průsečík I jako [xw min, y S + (xw min x S ) y P i y S x Pi x S ] Předej I další hranici k ořezání (4.) Aktualizuj S jako P i Mgr. Markéta Trnečková, Ph.D. (UPOL) Ořezávání dvourozměrných objektů 11 / 14
Sutherland-Hodgmanův algoritmus Mgr. Markéta Trnečková, Ph.D. (UPOL) Ořezávání dvourozměrných objektů 12 / 14
Algoritmus Weiler-Atherton Mgr. Markéta Trnečková, Ph.D. (UPOL) Ořezávání dvourozměrných objektů 13 / 14
Algoritmus Weiler-Atherton P: seznam vrcholů polygonu W: seznam vrcholů okna H: seznam průsečíků 1 Do H ulož průsečíky mezi hranicemi polygonu a okna průsečíky zařaď mezi vrcholy v seznamech P a W a propoj obousměrnými ukazateli 2 Dokud H není prázdný opakuj Vyjmi průsečík ze seznamu H Podle zvolení orientace přejdi do seznamu P nebo W Dokud není uzavřen tak návratem do výchozího průsečíku opakuj Výstup vrcholu nebo průsečíku ze seznamu (P nebo W) do nalezení dalšího průsečíku Přejdi do druhého seznamu (P nebo W) Mgr. Markéta Trnečková, Ph.D. (UPOL) Ořezávání dvourozměrných objektů 14 / 14