• Nie Znaleziono Wyników

Elementy algorytmów obcinania i okienkowania

N/A
N/A
Protected

Academic year: 2021

Share "Elementy algorytmów obcinania i okienkowania"

Copied!
22
0
0

Pełen tekst

(1)

1 / 22

Elementy grafiki komputerowej. Elementy algorytmów obcinania i okienkowania

Aleksander Denisiuk

Uniwersytet Warmi ´nsko-Mazurski Olsztyn, ul. Słoneczna 54

denisjuk@matman.uwm.edu.pl

(2)

Elementy algorytmów obcinania i okienkowania

Obcinanie odcinków i prostych

Obcinanie wielok ˛atów

Najnowsza wersja tego dokumentu dost ˛epna jest pod adresem

http://wmii.uwm.edu.pl/~denisjuk/uwm

(3)

Obcinanie odcinków i prostych

Obcinanie odcinków i prostych

❖Obcinanie

odcinków i prostych

❖Algorytm

Sutherlanda-Cohena

❖Algorytm

Lianga-Barsky’ego Obcinanie

wielok ˛atów

3 / 22

(4)

Obcinanie odcinków i prostych

Obcinanie odcinków i prostych

❖Obcinanie

odcinków i prostych

❖Algorytm

Sutherlanda-Cohena

❖Algorytm

Lianga-Barsky’ego Obcinanie

wielok ˛atów

● wyznaczenie fragmentu odcinka lub prostej, który le˙zy wewn ˛ atrz okna na ekranie

● wyznaczenie fragmentu odcinka lub prostej, który le˙zy

wewn ˛ atrz ustalonej bryły wielo´sciennej

(5)

Przeci ˛ecie odcinka i prostej

Obcinanie odcinków i prostych

❖Obcinanie

odcinków i prostych

❖Algorytm

Sutherlanda-Cohena

❖Algorytm

Lianga-Barsky’ego Obcinanie

wielok ˛atów

5 / 22

● p 1 = (x 1 , y 1 ), p 2 = (x 2 , y 2 )

● ax + by = c

● t = a (x c−ax

1

−by

1

2

−x

1

)+b(y

2

−y

1

)

✦ je´sli t / ∈ [0, 1], to prosta i odcinek s ˛ a rozł ˛ aczne

✦ je´sli t ∈ [0, 1], to mo˙zna znale´z´c punkt wspólny

x = c

y = c

(6)

Przeci ˛ecie odcinka i płaszczyzny

Obcinanie odcinków i prostych

❖Obcinanie

odcinków i prostych

❖Algorytm

Sutherlanda-Cohena

❖Algorytm

Lianga-Barsky’ego Obcinanie

wielok ˛atów

● p 1 = (x 1 , y 1 , z 1 ), p 2 = (x 2 , y 2 , z 2 )

● ax + by + cz = d

(7)

Algorytm Sutherlanda-Cohena

Obcinanie odcinków i prostych

❖Obcinanie

odcinków i prostych

❖Algorytm

Sutherlanda-Cohena

❖Algorytm

Lianga-Barsky’ego Obcinanie

wielok ˛atów

7 / 22

● Dane s ˛ a punkty ko ´ncowe odcinka i prostok ˛ atne okno.

● Proste, na których le˙z ˛ a kraw ˛edzie okna, dziel ˛ a płaszczyzn ˛e na 9 obszarów.

● Przyporz ˛ adkujemy im czterobitowe kody:

(8)

Algorytm Sutherlanda-Cohena

Obcinanie odcinków i prostych

❖Obcinanie

odcinków i prostych

❖Algorytm

Sutherlanda-Cohena

❖Algorytm

Lianga-Barsky’ego Obcinanie

wielok ˛atów

● Wyznaczamy kody obszarów, do których nale˙z ˛ a ko ´nce odcinka

● je´sli oba kody na dowolnej pozycji maj ˛ a jedynk˛e, to cały

odcinek le˙zy poza oknem

(9)

Algorytm Sutherlanda-Cohena

Obcinanie odcinków i prostych

❖Obcinanie

odcinków i prostych

❖Algorytm

Sutherlanda-Cohena

❖Algorytm

Lianga-Barsky’ego Obcinanie

wielok ˛atów

9 / 22

● Je´sli oba punkty ko ´ncowe maj ˛ a kod 0, to cały odcinek le˙zy wewn ˛ atrz okna

● Je´sli kody s ˛ a ró˙zne od 0, ale nie maj ˛ a jedynki

jednocze´snie na ˙zadnej pozycji, to odcinek mo˙ze mie´c

cz˛e´sci wewn ˛ atrz okna

(10)

Wła ´sciwie algorytm

Obcinanie odcinków i prostych

❖Obcinanie

odcinków i prostych

❖Algorytm

Sutherlanda-Cohena

❖Algorytm

Lianga-Barsky’ego Obcinanie

wielok ˛atów

Wej ´scie: odcinek [p 1 , p 2 ]

Wynik: cz˛e´s´c odcinka wewn ˛ atrz okna c 1 ← kod(p 1 ), c 2 ← kod(p 2 )

while c 1 or c 2 do if c 1 and c 2 then

return ∅ end if

if c 1 then

Zamie ´n (p 1 , c 1 ) else

Zamie ´n (p 2 , c 2 ) end if

end while

(11)

Procedura Zamie ´n

Obcinanie odcinków i prostych

❖Obcinanie

odcinków i prostych

❖Algorytm

Sutherlanda-Cohena

❖Algorytm

Lianga-Barsky’ego Obcinanie

wielok ˛atów

11 / 22

Wej ´scie: c = kod(p), c 6= 0, c&c = 0

Wynik: p le˙zy na tym samym odcinku, c = kod(p), c ma mniej niezerowych bitów

if pierwszy bit jest niezerowy then

p zamieniamy na przeci ˛ecie z y = top c ← kod(p)

else if drugi bit jest niezerowy then

p zamieniamy na przeci ˛ecie z y = bottom c ← kod(p)

else if trzeci bit jest niezerowy then

p zamieniamy na przeci ˛ecie z x = right c ← kod(p)

else if czwarty bit jest niezerowy then p zamieniamy na przeci ˛ecie z x = left c ← kod(p)

end if

(12)

Przykłady

Obcinanie odcinków i prostych

❖Obcinanie

odcinków i prostych

❖Algorytm

Sutherlanda-Cohena

❖Algorytm

Lianga-Barsky’ego Obcinanie

wielok ˛atów

1001 1000 1010

0001 0000 0010

A

B

C

D

F H

G

(13)

Algorytm Lianga-Barsky’ego

Obcinanie odcinków i prostych

❖Obcinanie

odcinków i prostych

❖Algorytm

Sutherlanda-Cohena

❖Algorytm

Lianga-Barsky’ego Obcinanie

wielok ˛atów

13 / 22

( x = x 1 + s(x 2 − x 1 ) = x 1 + s∆x,

y = y 1 + s(y 2 − y 1 ) = y 1 + s∆y, dla s ∈ [0, 1],

● odcinek le˙zy w oknie je˙zeli l 6 x 1 + s∆x 6 r oraz b 6 y 1 + s∆y 6 t

● czyli sp k 6 q k , k = 1, 2, 3, 4, gdzie

✦ p 1 = −∆x, q 1 = x 1 − l

✦ p 2 = ∆x, q 2 = r − x 1

✦ p 3 = −∆y, q 3 = y 1 − b

✦ p 4 = ∆y, q 4 = t − y 1

(14)

Dla ka˙zdej kraw ˛edzi

Obcinanie odcinków i prostych

❖Obcinanie

odcinków i prostych

❖Algorytm

Sutherlanda-Cohena

❖Algorytm

Lianga-Barsky’ego Obcinanie

wielok ˛atów

● je˙zeli p k = 0, to odcinek jest równoległy do tej kraw˛edzi

✦ je˙zeli q k < 0, to odcinek trzeba odrzuci´c

● je˙zeli p k < 0, to odcinek wchodzi do okna

✦ obliczamy u k = max n

0, p q

kk

o

● je˙zeli p k > 0, to odcinek wychodzi z okna

✦ obliczamy v k = min n

q

k

p

k

, 1 o

(15)

Wniosek

Obcinanie odcinków i prostych

❖Obcinanie

odcinków i prostych

❖Algorytm

Sutherlanda-Cohena

❖Algorytm

Lianga-Barsky’ego Obcinanie

wielok ˛atów

15 / 22

● u = max u k , v = min v k

● przedział odcinka s ∈ [u, v] le˙zy w oknie

● je˙zeli u > v, odcinek jest poza oknem

(16)

Przykład

Obcinanie odcinków i prostych

❖Obcinanie

odcinków i prostych

❖Algorytm

Sutherlanda-Cohena

❖Algorytm

Lianga-Barsky’ego Obcinanie

wielok ˛atów

(17)

Obcinanie prostych

Obcinanie odcinków i prostych

❖Obcinanie

odcinków i prostych

❖Algorytm

Sutherlanda-Cohena

❖Algorytm

Lianga-Barsky’ego Obcinanie

wielok ˛atów

17 / 22

● Modyfikacja algorytmu Lianga-Barsky’ego:

✦ parametr s nale˙zy do całej prostej R, a nie do

przedziału [0, 1]

(18)

Obcinanie wielok ˛ atów

Obcinanie odcinków i prostych

Obcinanie wielok ˛atów

❖Algorytm Sutherlanda- Hodgmana

❖Przykład

❖Wielok ˛at niewypukły

❖Algorytm

Weilera-Athertona

(19)

Algorytm Sutherlanda-Hodgmana

Obcinanie odcinków i prostych

Obcinanie wielok ˛atów

❖Algorytm Sutherlanda- Hodgmana

❖Przykład

❖Wielok ˛at niewypukły

❖Algorytm

Weilera-Athertona

19 / 22

● Obcinaj ˛ acy wielok ˛ at (okno) jest wypukłym (przeci ˛eciem półpłaszczyzn)

● Obcinamy kolejno ka˙zd ˛ a kraw ˛edzi ˛ a (półpłaszczyzn ˛ a):

✦ modyfikujemy ci ˛ ag wierzchołków stosownie do

wzajemnego poło˙zenia

(20)

Przykład

Obcinanie odcinków i prostych

Obcinanie wielok ˛atów

❖Algorytm Sutherlanda- Hodgmana

❖Przykład

❖Wielok ˛at niewypukły

❖Algorytm

Weilera-Athertona

(21)

Wielok ˛ at niewypukły

Obcinanie odcinków i prostych

Obcinanie wielok ˛atów

❖Algorytm Sutherlanda- Hodgmana

❖Przykład

❖Wielok ˛at niewypukły

❖Algorytm

Weilera-Athertona

21 / 22

● wynik mo˙ze by´c niespójny

✦ mamy krotn ˛ a kraw ˛ed´z

✦ mo˙zna wyeleminowa´c

(22)

Algorytm Weilera-Athertona

Obcinanie odcinków i prostych

Obcinanie wielok ˛atów

❖Algorytm Sutherlanda- Hodgmana

❖Przykład

❖Wielok ˛at niewypukły

❖Algorytm

Weilera-Athertona

Cytaty

Powiązane dokumenty

Polsko-Japo ´nska Wy˙zsza Szkoła Technik Komputerowych zamiejscowy o´srodek dydaktyczny w Gda

Polsko-Japo ´nska Wy˙zsza Szkoła Technik Komputerowych zamiejscowy o´srodek dydaktyczny w Gda

Polsko-Japo ´nska Wy˙zsza Szkoła Technik Komputerowych zamiejscowy o´srodek dydaktyczny w Gda

Polsko-Japo ´nska Wy˙zsza Szkoła Technik Komputerowych zamiejscowy o´srodek dydaktyczny w Gda

Polsko-Japo ´nska Wy˙zsza Szkoła Technik Komputerowych zamiejscowy o´srodek dydaktyczny w Gda

Polsko-Japo ´nska Wy˙zsza Szkoła Technik Komputerowych zamiejscowy o´srodek dydaktyczny w Gda