230 likes | 393 Views
Grafika i komunikacja człowieka z komputerem. Przekształcenia geometryczne – grafika 2D. Wprowadzenie.
E N D
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:
Przekształcenia punktu na płaszczyźnie • a obrót jako: • Przy takich założeniach obrót wokół dowolnego punktu (x0,y0) możemy zapisać jako: • lub krócej P’=PT1RfT2.
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: • 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: • 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 • 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). • Lub układ sferyczny (r,f,y) gdzie x=rcosfcos y, y=rsinf, z=rcosfsin y. z y x
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ć:
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ć:
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: • W przypadku obrotu wokół osi y w zapisie macierzowym mamy: • W przypadku obrotu wokół osi z w zapisie macierzowym mamy:
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: • 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.