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.