GKIW Moduł 4 - Przekształcenia geometryczne: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
m Zastępowanie tekstu – „,</math>” na „</math>,” |
m Zastępowanie tekstu – „\</math>” na „\ </math>” |
||
Linia 21: | Linia 21: | ||
|valign="top"|Współczesna grafika komputerowa operuje na milionach elementów (punktów, trójkątów). Przy tak dużej liczbie zachodzi konieczność opisania operacji geometrycznych w taki sposób, aby ich wykonanie było z jednej strony efektywne, a z drugiej, aby opis był prosty i ujednolicony. Takie warunki spełnia opis macierzowy. | |valign="top"|Współczesna grafika komputerowa operuje na milionach elementów (punktów, trójkątów). Przy tak dużej liczbie zachodzi konieczność opisania operacji geometrycznych w taki sposób, aby ich wykonanie było z jednej strony efektywne, a z drugiej, aby opis był prosty i ujednolicony. Takie warunki spełnia opis macierzowy. | ||
Niech <math>P=\begin{bmatrix} x_p & y_p \\ \end{bmatrix}^T</math> opisuje położenie punktu na płaszczyźnie. Najprostszym rozwiązaniem byłoby przyjęcie, że macierz <math>M(2\times 2)</math> opisuje przekształcenie punktu <math>P\</math>, na <math>P'\</math>, i że <math>P'=M\cdot P</math> | Niech <math>P=\begin{bmatrix} x_p & y_p \\ \end{bmatrix}^T</math> opisuje położenie punktu na płaszczyźnie. Najprostszym rozwiązaniem byłoby przyjęcie, że macierz <math>M(2\times 2)</math> opisuje przekształcenie punktu <math>P\ </math>, na <math>P'\ </math>, i że <math>P'=M\cdot P</math> | ||
|} | |} | ||
Linia 67: | Linia 67: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd4.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd4.png|thumb|500px]] | ||
|valign="top"|Niech <math>x_p, y_p, z_p\</math>,, opisują położenie punktu w trójwymiarowym kartezjańskim układzie współrzędnych. W grafice komputerowej do opisu położenia oraz opisu operacji (transformacji geometrycznych), którym punkty będą podlegały, jest używany '''układ współrzędnych jednorodnych znormalizowanych'''. Dzięki temu wszystkie stosowane transformacje geometryczne mogą być opisane w identyczny sposób za pomocą mnożenia macierzowego. Jeśli współrzędne <math>x_p, y_p, z_p\</math>, opisują położenie punktu, to odpowiada temu wektor <math>P=\begin{bmatrix} x_p & y_p & z_p & 1 \\ \end{bmatrix}^T</math> we współrzędnych jednorodnych znormalizowanych. We współrzędnych nieznormalizowanych wektor ten miałby postać <math>P=\begin{bmatrix} \overset{\sim}{x_p} & \overset{\sim}{y_p} & \overset{\sim}{z_p} & \overset{\sim}{N} \\ \end{bmatrix}^T</math> dla <math>\overset{\sim}{N}\neq 0</math> . Przy czym <math>x_p=\frac{\overset{\sim}{x_p}}{\overset{\sim}{N}}</math> , <math>y_p=\frac{\overset{\sim}{y_p}}{\overset{\sim}{N}}</math> , <math>z_p=\frac{\overset{\sim}{z_p}}{\overset{\sim}{N}}</math> , co nosi nazwę operacji normalizacji. | |valign="top"|Niech <math>x_p, y_p, z_p\ </math>,, opisują położenie punktu w trójwymiarowym kartezjańskim układzie współrzędnych. W grafice komputerowej do opisu położenia oraz opisu operacji (transformacji geometrycznych), którym punkty będą podlegały, jest używany '''układ współrzędnych jednorodnych znormalizowanych'''. Dzięki temu wszystkie stosowane transformacje geometryczne mogą być opisane w identyczny sposób za pomocą mnożenia macierzowego. Jeśli współrzędne <math>x_p, y_p, z_p\ </math>, opisują położenie punktu, to odpowiada temu wektor <math>P=\begin{bmatrix} x_p & y_p & z_p & 1 \\ \end{bmatrix}^T</math> we współrzędnych jednorodnych znormalizowanych. We współrzędnych nieznormalizowanych wektor ten miałby postać <math>P=\begin{bmatrix} \overset{\sim}{x_p} & \overset{\sim}{y_p} & \overset{\sim}{z_p} & \overset{\sim}{N} \\ \end{bmatrix}^T</math> dla <math>\overset{\sim}{N}\neq 0</math> . Przy czym <math>x_p=\frac{\overset{\sim}{x_p}}{\overset{\sim}{N}}</math> , <math>y_p=\frac{\overset{\sim}{y_p}}{\overset{\sim}{N}}</math> , <math>z_p=\frac{\overset{\sim}{z_p}}{\overset{\sim}{N}}</math> , co nosi nazwę operacji normalizacji. | ||
Zastosowanie w przypadku przesunięcia na płaszczyźnie współrzędnych jednorodnych można sobie wyobrazić jako umieszczenie płaszczyzny, na której pracujemy, w trójwymiarowym układzie współrzędnych, w taki sposób, aby nie przechodziła ona przez początek układu (tzn. dla <math>z=h_z\neq 0</math> ). Wtedy analogiczne opisanie operacji translacji na płaszczyźnie (ale już jako macierz 3x3) da poprawne rozwiązanie, gdyż punkt stały – początek układu współrzędnych jest poza płaszczyzną, na której jest wykonywana operacja. Jednocześnie, aby wynik operacji znajdował się na tej samej płaszczyźnie, najprościej operować na współrzędnych znormalizowanych, czyli pracować na płaszczyźnie <math>z=1</math>. | Zastosowanie w przypadku przesunięcia na płaszczyźnie współrzędnych jednorodnych można sobie wyobrazić jako umieszczenie płaszczyzny, na której pracujemy, w trójwymiarowym układzie współrzędnych, w taki sposób, aby nie przechodziła ona przez początek układu (tzn. dla <math>z=h_z\neq 0</math> ). Wtedy analogiczne opisanie operacji translacji na płaszczyźnie (ale już jako macierz 3x3) da poprawne rozwiązanie, gdyż punkt stały – początek układu współrzędnych jest poza płaszczyzną, na której jest wykonywana operacja. Jednocześnie, aby wynik operacji znajdował się na tej samej płaszczyźnie, najprościej operować na współrzędnych znormalizowanych, czyli pracować na płaszczyźnie <math>z=1</math>. | ||
Linia 290: | Linia 290: | ||
|valign="top"|Składanie przekształceń i operowanie macierzą wynikową pozwala realizować operacje efektywniej. | |valign="top"|Składanie przekształceń i operowanie macierzą wynikową pozwala realizować operacje efektywniej. | ||
Jeśli zatem <math>M_C\</math>, opisuje całkowite przekształcenie będące wynikiem złożenia przekształceń elementarnych <math>M_1,M_2,M_3\cdots M_N\</math>, (w takiej kolejności) to : | Jeśli zatem <math>M_C\ </math>, opisuje całkowite przekształcenie będące wynikiem złożenia przekształceń elementarnych <math>M_1,M_2,M_3\cdots M_N\ </math>, (w takiej kolejności) to : | ||
:<math>M_C=M_N\cdot ... \cdot M_3\cdot M_2\cdot M_1\</math>, | :<math>M_C=M_N\cdot ... \cdot M_3\cdot M_2\cdot M_1\ </math>, | ||
Oczywiście mnożenie macierzy i składanie przekształceń geometrycznych, jest operacją łączną ale nie jest operacją przemienną – złożenie najpierw translacji a potem obrotu jest innym przekształceniem niż złożenie najpierw obrotu a potem translacji. | Oczywiście mnożenie macierzy i składanie przekształceń geometrycznych, jest operacją łączną ale nie jest operacją przemienną – złożenie najpierw translacji a potem obrotu jest innym przekształceniem niż złożenie najpierw obrotu a potem translacji. | ||
Linia 317: | Linia 317: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd28.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd28.png|thumb|500px]] | ||
|valign="top"|Jeśli macierz <math>M\</math>, opisuje pewną transformację geometryczną, przekształcenie współrzędnych jest opisane równaniem <math>P'=M\cdot P</math> i jeśli istnieje przekształcenie odwrotne opisane macierzą <math>M^{-1}\</math>, to <math>P=M^{-1}\cdot P'</math> | |valign="top"|Jeśli macierz <math>M\ </math>, opisuje pewną transformację geometryczną, przekształcenie współrzędnych jest opisane równaniem <math>P'=M\cdot P</math> i jeśli istnieje przekształcenie odwrotne opisane macierzą <math>M^{-1}\ </math>, to <math>P=M^{-1}\cdot P'</math> | ||
Oczywiście nie zawsze konieczne jest wyznaczanie macierzy odwrotnej, np. dla translacji o dany wektor przekształceniem odwrotnym będzie translacja o wektor przeciwny, dla obrotu o zadany kąt obrót wokół tej samej osi o kąt przeciwny itp. | Oczywiście nie zawsze konieczne jest wyznaczanie macierzy odwrotnej, np. dla translacji o dany wektor przekształceniem odwrotnym będzie translacja o wektor przeciwny, dla obrotu o zadany kąt obrót wokół tej samej osi o kąt przeciwny itp. | ||
Linia 323: | Linia 323: | ||
Ponieważ symetrie, translacja, obroty i skalowanie opisane odpowiednimi macierzami są operacjami odwracalnymi, to w bardzo prosty sposób można pokazać, że dowolna operacja będąca złożeniem dowolnego zestawu tych operacji, jest też operacją odwracalną. | Ponieważ symetrie, translacja, obroty i skalowanie opisane odpowiednimi macierzami są operacjami odwracalnymi, to w bardzo prosty sposób można pokazać, że dowolna operacja będąca złożeniem dowolnego zestawu tych operacji, jest też operacją odwracalną. | ||
Jeśli zatem <math>M_C\</math>, opisuje całkowite przekształcenie będące wynikiem złożenia przekształceń elementarnych <math>M_C=M_N\cdot ... \cdot M_3\cdot M_2\cdot M_1\</math>, i jeśli każde z nich jest odwracalne to : | Jeśli zatem <math>M_C\ </math>, opisuje całkowite przekształcenie będące wynikiem złożenia przekształceń elementarnych <math>M_C=M_N\cdot ... \cdot M_3\cdot M_2\cdot M_1\ </math>, i jeśli każde z nich jest odwracalne to : | ||
:<math>M_C^{-1}=M_1^{-1}\cdot M_2^{-1}\cdot M_3^{-1}\cdot ...\cdot M_N^{-1}\</math>, | :<math>M_C^{-1}=M_1^{-1}\cdot M_2^{-1}\cdot M_3^{-1}\cdot ...\cdot M_N^{-1}\ </math>, | ||
|} | |} | ||
Linia 336: | Linia 336: | ||
Zadanie można rozwiązać na wiele sposobów. Przyjęto następujący zestaw operacji: | Zadanie można rozwiązać na wiele sposobów. Przyjęto następujący zestaw operacji: | ||
#Przesunięcie, aby punkt <math>T_1\</math>, znalazł się w początku układu współrzędnych. | #Przesunięcie, aby punkt <math>T_1\ </math>, znalazł się w początku układu współrzędnych. | ||
#Obrót wokół osi OX. | #Obrót wokół osi OX. | ||
#Obrót wokół osi OY. Obroty (etap 2. i 3. ) zapewniają, że zadana oś obrotu (prosta <math>l</math>) pokryje się (z uwzględnieniem zwrotów) z osią OX układu współrzędnych. | #Obrót wokół osi OY. Obroty (etap 2. i 3. ) zapewniają, że zadana oś obrotu (prosta <math>l</math>) pokryje się (z uwzględnieniem zwrotów) z osią OX układu współrzędnych. | ||
Linia 371: | Linia 371: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd33.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd33.png|thumb|500px]] | ||
|valign="top"|Teraz można wreszcie wykonać obrót o kąt <math>\varphi\</math>, wokół prostej <math>l</math> co, dzięki odpowiednim operacjom wstępnym, odpowiada obrotowi o kąt <math>\varphi\</math>, wokół osi OX układu współrzędnych. | |valign="top"|Teraz można wreszcie wykonać obrót o kąt <math>\varphi\ </math>, wokół prostej <math>l</math> co, dzięki odpowiednim operacjom wstępnym, odpowiada obrotowi o kąt <math>\varphi\ </math>, wokół osi OX układu współrzędnych. | ||
|} | |} | ||
Linia 449: | Linia 449: | ||
|valign="top"|Kwaterniony są wykorzystywane w grafice komputerowej w związku z jedną operacją w przestrzeni trójwymiarowej: z obrotem punktu wokół dowolnie zdefiniowanej osi. Aby skorzystać z tej możliwości należy zdefiniować '''reprezentację punktu w postaci kwaternionu''' oraz '''jednostkowy wektor''' <math>\vec{u}</math> reprezentujący oś obrotu w przestrzeni. | |valign="top"|Kwaterniony są wykorzystywane w grafice komputerowej w związku z jedną operacją w przestrzeni trójwymiarowej: z obrotem punktu wokół dowolnie zdefiniowanej osi. Aby skorzystać z tej możliwości należy zdefiniować '''reprezentację punktu w postaci kwaternionu''' oraz '''jednostkowy wektor''' <math>\vec{u}</math> reprezentujący oś obrotu w przestrzeni. | ||
Biorąc pod uwagę kwaternion jednostkowy <math>q_u\</math>, związany z tym wektorem jednostkowym, można wyznaczyć kwaternion <math>Q_{Pu}\</math>, zgodnie z zaproponowanym wzorem. Kwaternion ten reprezentuje punkt będący obrazem w obrocie wokół osi wyznaczonej przez wektor <math>\vec{u}</math> o kąt <math>\varphi\</math>, . | Biorąc pod uwagę kwaternion jednostkowy <math>q_u\ </math>, związany z tym wektorem jednostkowym, można wyznaczyć kwaternion <math>Q_{Pu}\ </math>, zgodnie z zaproponowanym wzorem. Kwaternion ten reprezentuje punkt będący obrazem w obrocie wokół osi wyznaczonej przez wektor <math>\vec{u}</math> o kąt <math>\varphi\ </math>, . | ||
Porównując to rozwiązanie z zadaniem opisanym wcześniej widać prostotę operacji obrotu wykonywanej z wykorzystaniem kwaternionów. | Porównując to rozwiązanie z zadaniem opisanym wcześniej widać prostotę operacji obrotu wykonywanej z wykorzystaniem kwaternionów. |
Aktualna wersja na dzień 12:05, 5 wrz 2023
Wykład
![]() |
![]() |
![]() |
Można zaproponować pewien minimalny zestaw operacji: symetrie (względem osi układu współrzędnych i środkowa), obroty, przesunięcie (translacja), skalowanie oraz pochylenie. |
![]() |
![]() |
![]() |
![]() |
![]() |
Pochylenie jest rzadziej stosowanym przekształceniem. Daje możliwość zniekształcenia figury. Nie zachowuje odległości punktów. Figura i jej obraz w tym przekształceniu nie są podobne. |
![]() |
![]() |
Macierze opisujące symetrie płaszczyznowe względem pozostałych dwóch płaszczyzn (XOY i YOZ) mają analogiczną postać ze zmienionym znakiem przy 1 w odpowiedniej kolumnie. |
![]() |
Podobnie macierze opisujące symetrie osiowe względem pozostałych dwóch osi (OY i OZ) mają analogiczną postać ze zmienionymi znakami. |
![]() |
![]() |
Przesunięcie w układzie trójwymiarowym odbywa się w sposób analogiczny do przesunięcia na płaszczyźnie. |
![]() |
![]() |
Obiekt na rysunku został obrócony o kat wokół osi OX. |
![]() |
Obiekt na rysunku został obrócony o kat wokół osi OY |
![]() |
Obiekt na rysunku został obrócony o kat wokół osi OZ. |
![]() |
Rysunek pokazuje wynik pierwszej operacji – przesunięcia. Zadana oś obrotu zawiera teraz przekątną prostopadłościanu o bokach A, B, C. Ułatwi to definicje kątów obrotu. |
![]() |
Po zrealizowaniu obrotu wokół OX prosta znalazła się na płaszczyźnie XOZ. |
![]() |
Po zrealizowaniu obrotu wokół OY prosta pokryje się z osią OX układu współrzędnych. Jednocześnie odpowiednio dobrane operacje zapewniły zgodność zwrotów obu osi. |
![]() |
Teraz można wreszcie wykonać obrót o kąt , wokół prostej co, dzięki odpowiednim operacjom wstępnym, odpowiada obrotowi o kąt , wokół osi OX układu współrzędnych. |
![]() |
Jeśli przeanalizujemy algorytm naiwny, to okaże się, że wraz z powiększaniem wartości kąta dodajemy błędy. Błąd się nakłada wraz z postępowaniem obliczeń. |
![]() |
Suma i iloczyn są zdefiniowane tak jak na rysunku.
Dodawanie kwaternionów jest operacją łączną i przemienną. Mnożenie kwaternionów jest operacją łączną i nie jest operacją przemienną |
Literatura
![]() |