Wyk豉d 3 - Przekszta販enia geometryczne

Download Report

Transcript Wyk豉d 3 - Przekszta販enia geometryczne

Grafika i komunikacja człowieka z
komputerem
Przekształcenia geometryczne –
grafika 2D
Wprowadzenie
• Przekształcenie, odwzorowanie geometryczne – funkcja
przekształcająca jeden zbiór punktów, nazywany figurą
geometryczną, w drugi zbiór punktów w przestrzeni geometrycznej
(przestrzeni euklidesowej, przestrzeni rzutowej itp.).
• W węższym znaczeniu jest to funkcja wzajemnie jednoznaczna
przeprowadzająca przestrzeń geometryczną na siebie; ta druga
definicja jest stosowana dla przekształceń geometrycznych
tworzących grupy przekształceń.
• O ile nie jest to powiedziane wprost, zwykle w elementarnej
geometrii przyjmuje się, że przekształceniem geometrycznym jest
funkcja określona na całej przestrzeni euklidesowej, zaś figurami
geometrycznymi są figury płaskie lub figury przestrzenne.
Najczęściej przyjmuje się, że przekształcenia geometryczne są
niezdegenerowane, tzn. różnowartościowe lub wzajemnie
jednoznaczne.
Wprowadzenie
•
•
•
•
•
•
•
•
•
•
Punkt A' nazywamy obrazem punktu A w przekształceniu geometrycznym p, jeżeli p(A) = A'.
Figurę, która jest zbiorem obrazów wszystkich punktów figury f w danym przekształceniu geometrycznym p,
nazywamy obrazem figury f w przekształceniu geometrycznym.
Punkt stały przekształcenia jest to punkt, który sam jest swoim obrazem w tym przekształceniu
Jeśli p i q są przekształceniami geometrycznymi, to złożenie funkcji p°q nazywamy złożeniem przekształceń
geometrycznych p i q.
Przekształcenie p nazywamy odwracalne, jeżeli dwu różnym punktom przyporządkowane są zawsze dwa różne
punkty
Przekształceniem odwrotnym do przekształcenia odwracalnego p nazywamy przekształcenie p -1 takie, że dla
każdego punktu A p(A) = A' wtedy i tylko wtedy, gdy p-1(A') = A.
Przekształceniem tożsamościowym nazywamy przekształcenie, które każdemu punktowi przyporządkowuje ten
sam punkt.
Izometrią nazywamy przekształcenie geometryczne, które zachowujące odległość punktów, tzn. dla każdych dwóch
punktów odległość ich obrazów jest równa odległości tych punktów.
Figury f i g nazywamy przystające wtedy i tylko wtedy, gdy istnieje izometria p taka, że p(f) = g. Inaczej, dwie figury
są przystające, jeżeli jedną z tych figur można nałożyć na drugą. Oznaczamy f ≡ g.
Rodzaje przekształceń 2D:
–
–
–
–
–
–
Translacja,
Obrót (względem środka układu, dowolnego punktu),
Skalowanie,
Jednokładność,
Powinowactwo prostokątne (symetria),
Inne (dzielenie wielokąta na trójkąty, badanie położenie punktu względem wielokąta),.
Przekształcenia geometryczne
• Zostaną omówione transformacje obiektów
graficznych. Transformacje będą dotyczyły
pojedynczych punktów, gdyż obiekty są najczęściej
opisane jako zbiór punktów. Można również zajmować
się transformacjami dotyczącymi np. równań
algebraicznych.
• Punkty na płaszczyźnie określa się podając ich
współrzędne, np. współrzędne kartezjańskie -czasem
może to być inny układ, np. układ współrzędnych
biegunowych. W grafice komputerowej ważna jest
umiejętność przekształcania danego obiektu, ale
również umiejętność opisu tego obiektu w różnych
układach współrzędnych.
Przekształcenia punktu na
płaszczyźnie
• A.Translacja -przesunięcie punktu o
współrzędnych P=(x,y) o dany wektor t=(tx,ty).
Otrzymujemy nowy punkt P’=(x’,y’), którego
współrzędne są postaci:.
– x’=x+tx,
y’=y+ty.
Przekształcenia punktu na
płaszczyźnie
• B.Obrót - obrót punktu wokół początku układu o kąt f.
W układzie biegunowym współrzędne tego punktu są
zapisane jako P=(rcosa,rsina), rys poniżej.
• Po obrocie o dany kąt f otrzymujemy nowe
współrzędne
P’=(rcos(a+f),rsin(a+f))=
=(rcosacosf-rsinasinf, rcosasinf+rsinacosf)=
=(xcosf-ysinf, xsinf+ycosf)
f
a
Przekształcenia punktu na
płaszczyźnie
• Jeżeli chcemy wykonać obrót o kąt a nie wokół
początku układu lecz wokół dowolnego punktu (x,y)
to należy przesunąć punkt (x,y) o wektor [-x0,-y0],
obrócić przesunięty punkt P(x-x0,y-y0) o dany kąt f i
powtórnie przesunąć obrócony punkt o wektor
[x0,y0].
• Ponieważ takie złożone operacje są wykonywane
często, to w praktyce łatwiej stosować zapis
macierzowy. Np. translację zapisujemy jako:
 1 0 0
 x' , y' ,1   x, y,1 0 1 0
 tx ty 1
Przekształcenia punktu na
płaszczyźnie
• a obrót jako:
 cos f sin f 0
 x' , y' ,1   x, y,1 sin f cosf 0
 0
0
1
• Przy takich założeniach obrót wokół
dowolnego punktu (x0,y0) możemy zapisać
jako:
0
0  cosf
 1
x' , y' ,1  x, y,1 0
1
0  sin f
 x0  y 0 1  0
• lub krócej P’=PT1RfT2.
sin f
cosf
0
0  1
0  0
1  x0
0
1 0
y 0 1
0
Przekształcenia punktu na
płaszczyźnie
• C. Skalowanie - współrzędne punktu P=(x,y)
mnożymy przez czynnik skalujący (sx,sy). Macierzowo
zapisujemy:
 sx 0 0
 x' , y' ,1   x, y,1 0 sy 0
 0 0 1
• Np. kwadrat jednostkowy o wierzchołkach [(0,0),
(1,0), (1,1), (0,1)] przeskalowany o wektor [1/2,2]
daje prostokąt o wierzchołkach [(0,0), (1/2,0),
(1/2,2), (0,2)].
Przekształcenia punktu na
płaszczyźnie
• D. Jednokładność - jednokładność o środku S=(x0,y0) i
skali k<>0 jest takim przekształceniem płaszczyzny, w
którym obrazem punktu P=(x,y) jest taki punkt P’=(x’,y’),
gdzie SP’=kSP.
• Stąd np. dla x mamy: x0-x’=k(x0-x).
• Zatem (x’,y’)=(x0,y0)+k(x-x0,y-y0) = (kx,ky)+(x0-kx0,y0-ky0)
lub w notacji macierzowej:
k
0
0

k
0
 x' , y' ,1   x, y,1 0
 (1  k ) x 0 (1  k ) y 0 1
• Np. jeżeli S(1,2), P(2,2) i k=-1 to P’(0,2). Dla k=-1
jednokładność jest symetrią o środku w punkcie S.
Przekształcenia punktu na
płaszczyźnie
Działania na wielokątach
Położenie punktu względem
wielokąta
• O wielokątach będziemy zakładali, że są wielokątami zwykłymi, tzn. takimi,
których krawędzie nie mają punktów wspólnych poza wierzchołkami oraz
będziemy zakładali, że żadne trzy wierzchołki nie są współliniowe.
• Położenie punktu względem wielokąta. Jest to zadanie geometrii
obliczeniowej. Istnieje wiele algorytmów; jednym z nich jest algorytm
parzystości. Polega on na tym, że:
– dany jest punkt P=(x0,y0) i dane są wierzchołki wielokąta,
– z punktu P prowadzimy dowolną półprostą (może być np. równoległa do osi x dla prostoty rozważań),
– znajdujemy liczbę n punktów przecięcia tej półprostej z bokami wielokąta,
– jeśli liczba jest parzysta, to P leży na zewnątrz wielokąta W, a gdy jest
nieparzysta, to wewnątrz niego.
• Innym możliwym rozwiązaniem zadania badania położenia punktu
względem wielokąta jest obliczanie sumy kątów między półprostymi
poprowadzonymi z punktu P przez wierzchołki wielokąta.
Położenie punktu względem
wielokąta
• Uwagi:
– dla znalezienia liczby n nie musimy wyznaczać punktów przecięcia
wszystkich krawędzi wielokąta z półprostą. Krawędzie dla których
zachodzi max(xi,xi+1)<x0 możemy pominąć, a te dla których zachodzi
min(xi,xi+1)>x0, przecinają prostą, gdy (yi-y0)*(yi+1-y0)<0,
– jeżeli prosta przechodzi przez wierzchołek (np. przez wierzchołek B o
bokach AB i BC), jeżeli A i C leżą po różnych stronach A i C to przecięcie
liczymy jako jednokrotne, a gdy A i C leżą po tej samej stronie
półprostej to przecięcie liczymy dwukrotnie.
– jeżeli półprosta zawiera jeden z boków wielokąta, (np. AB, BC, CD, BC
jest na półprostej) to krawędź BC traktujemy jako jeden tzw.
pseudowierzchołek i jeżeli A i D leżą po przeciwnej stronie prostej to
liczymy przecięcie jako jeden, a jeżeli po tej samej, to liczymy je jako
dwa.
Wyznaczanie powłoki wypukłej
wielokąta.
• Definicja zbioru wypukłego: zbiór Z nazywamy wypukłym, jeżeli zawiera
wszystkie odcinki, których końcami są dowolne punkty ze zbioru Z.
• Definicja powłoki wypukłej. Powłoką wypukła nazywamy najmniejszy zbiór
wypukły, do którego należą dane punkty.
• Algorytm Grahama wyznaczania powłoki wypukłej n punktów.
–
–
–
–
dane: punkty Pi=(xi,yi), i=1,2,...,n,
wyszukujemy punkt o najmniejszej współrzędnej, oznaczamy go jako Pi1,
porządkujemy punkty zgodnie z malejącymi wartościami kątów ai, obliczając:
tg(ai)=(xi-xi1)/(yi-yi1). Otrzymujemy nowe uporządkowanie, oznaczamy je jako
i1,i2,...,in.
– tworzymy listę Pl1, Pl2, ... Plk wierzchołków wielokąta będącego powłoką
wypukła następująco:
• na początku przyjmujemy: l1=i1, l2=i2, l3=i3 i podstawiamy k=3,
• dla j=4,5,...,n
• (*) jeśli para wektorów Plk-1Plk, PlkPlj jest ujemnie zorientowana, to usuwamy z
listy wierzchołek Plk, podstawiamy k=k-1, przenumerowujemy listę i wracamy do
(*), w przeciwnym razie dopisujemy Pij do listy, czyli podstawiamy k=k+1, lk=ij.
Wyznaczanie powłoki wypukłej
wielokąta.
• Uwagi:
– Jeżeli punktów o minimalnej współrzędnej y jest więcej niż jeden, to
dowolny z takich punktów zaburzamy podstawiając yi1=yi1*(1+h),
gdzie h jest najmniejszą liczbą rzeczywistą dodatnią.
– Jeśli ctg(ai)=ctg(aj)= ...=ctg(am) (punkty są współliniowe), to pomijamy
wszystkie punkty, z wyjątkiem punktu leżącego najdalej.
– Para wektorów PiPj, PjPk jest dodatnio zorientowana, gdy wyznacznik
1
1
1
( i , j, k )  x i
xj
xk
yi
yj
yk
– jest dodatni, a ujemnie zorientowana, gdy jest on ujemny.
Grafika i komunikacja człowieka z
komputerem
Przekształcenia punktów w R3
Stosowane opisy
• Podobnie jak w przypadku dwuwymiarowym będziemy
rozpatrywać współrzędne jednorodne (x,y,z,1). Najczęściej
będzie wykorzystywany lewoskrętny układ kartezjański (x,y,z).
y
z
x
• Lub układ sferyczny (r,f,y) gdzie x=rcosfcos y, y=rsinf,
zrcosfsin y.
Translacja
• Dany jest punkt P=(x,y,z) i wektor T=[tx,ty,tz],
otrzymujmy nowy punkt P’=(x’,y’,z’) wg
wzorów:
– x’=x+tx, y’=y+ty, z’=z+tz.
• W układzie macierzowym można to
przekształcenie zapisać:
1
0
x' , y' , z ' ,1  x, y, z,1
0

t x
0
0
1
0
0
1
ty
tz
0
0
0

1
Skalowanie
• Dany jest punkt P=(x,y,z) i wektor T=[sx,sy,sz],
otrzymujmy nowy punkt P’=(x’,y’,z’) wg
wzorów:
– x’=x*sx, y’=y*sy, z’=z*sz.
• W układzie macierzowym można to
przekształcenie zapisać:
s x
0
x' , y' , z ' ,1  x, y, z,1
0

0
0
sy
0
0
0
0
sz
0
0 
0 
0
0 

1 
Obrót względem osi układu
współrzędnych
• Przyjmujemy, że dodatni obrót jest w kierunku
przeciwnym do ruchu wskazówek zegara, gdy
patrzymy w kierunku dodatnim. Dany jest
punkt P=(x,y,z) i kąt f.
• W przypadku obrotu wokół osi x otrzymujmy
nowy punkt P’=(x’,y’,z’) o współrzędnych:
• x’=x, y’=ycos f –zsin f, z’=ysin f +zcos f,
Obrót względem osi układu
współrzędnych
• a w zapisie macierzowym:
0
1
0 cosf
x' , y' , z ' ,1  x, y, z,1
0  sin f

0
0
0
sin f
cosf
0
0
0
0

1
• W przypadku obrotu wokół osi y w zapisie macierzowym
mamy:
 cosf 0 sin f
 0
1
0
x' , y' , z ' ,1  x, y, z,1
 sin f 0 cosf

0
0
 0
0
0
0

1
• W przypadku obrotu wokół osi z w zapisie macierzowym
mamy:
 cosf
 sin f
x' , y' , z ' ,1  x, y, z,1
 0

 0
sin f 0 0
cosf 0 0
0
1 0

0
0 1
Przekształcenie trzypunktowe
• Jest ono wykorzystywane przy budowie scen trójwymiarowych.
• Dane są trzy nie współliniowe punkty: P1, P2, P3 i Q1, Q2, Q3. Szukamy
takiej izometrii (przekształcenia), które będzie spełniało następujące
warunki:
–
–
–
Odwzorowuje punkt P1 w Q1,
Kierunek P=P2-P1 w kierunek Q=Q2-Q1,
Transformuje płaszczyznę wyznaczoną przez : P1, P2, P3 w płaszczyznę wyznaczoną przez Q1, Q2, Q3
• Aby wyznaczyć taką transformację wprowadzimy dwa wersory
ortogonalne:
–
–
–
u1=(P2-P1)/|P2-P1|
u2=(P2-P1)x(P3-P1)/|(P2-P1)x(P3-P1)|
a trzeci wyznaczymy jako u3=u1xu2.
• gdzie x oznacza iloczyn wektorowy i jest on zdefiniowany następująco:
–
–
–
–
w1xw2 jest iloczynem wektorowym gdy spełnia własności:
w1xw2 jest prostopadły do w1 i do w2,
wektory w1, w2, w są dodatnio zorientowane, tzn. det(w1,w2,w)>0
|w|=|w1||w2|sin(w1,w2)
Przekształcenie trzypunktowe
•
Podobnie konstruujemy wektory w1, w2 i w3 dla punktów Q1,Q2,Q3, czyli
– w1=(Q2-Q1)/|Q2-Q1|
– w2=(Q2-Q1)x(Q3-Q1)/|(Q2-Q1)x(Q3-Q1)|
– a trzeci wyznaczymy jako w3=w1xw2.
•
Równanie:
 w1 
 u1 
 w 2  R u 2
 
 
 w 3
 u 3
•
jest równaniem na macierz obrotu R, która przekształca wektory u1, u2, u3 w
wektory w1, w2, w3. Macierz U=[u1,u2,u3]T jest ortogonalna, tzn. UUT=I=>U-1=UT,
podobne właściwości ma macierz W. Macierz R jest więc postaci:
– R=UTW.
•
Ponieważ potrzebne jest jeszcze przesunięcie, to otrzymujemy je z warunku, że
obrazem punktu P1 ma być punkt Q1. Zatem przesunięcie o wektor T musi być
postaci:
– T=Q1-P1R.