GKIW Moduł 4 - Przekształcenia geometryczne: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
m Zastępowanie tekstu – „\displaystyle ” na „” |
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\ | 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\ | |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\ | 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>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\ | |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\ | 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>M_C^{-1}=M_1^{-1}\cdot M_2^{-1}\cdot M_3^{-1}\cdot ...\cdot M_N^{-1}\</math>, | ||
|} | |} | ||
Linia 332: | Linia 332: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd29.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd29.png|thumb|500px]] | ||
|valign="top"|Zestaw podstawowych operacji obejmował obroty, ale tylko wokół osi układu współrzędnych. Obrót wokół dowolnej osi musi być zatem zrealizowany jako złożenie operacji. Można przyjąć założenie, że generalnie celem operacji wstępnych jest takie przekształcenie przestrzeni, aby zadana oś obrotu (prosta <math>l</math> na rysunku) pokryła się z wybraną osią układu współrzędnych. Przy czym przyjęty zwrot osi obrotu powinien być zgodny ze zwrotem osi okładu. Takie warunki pozwolą obrót o kąt <math>\varphi | |valign="top"|Zestaw podstawowych operacji obejmował obroty, ale tylko wokół osi układu współrzędnych. Obrót wokół dowolnej osi musi być zatem zrealizowany jako złożenie operacji. Można przyjąć założenie, że generalnie celem operacji wstępnych jest takie przekształcenie przestrzeni, aby zadana oś obrotu (prosta <math>l</math> na rysunku) pokryła się z wybraną osią układu współrzędnych. Przy czym przyjęty zwrot osi obrotu powinien być zgodny ze zwrotem osi okładu. Takie warunki pozwolą obrót o kąt <math>\varphi</math>, wokół zadanej osi zrealizować bezpośrednio jako obrót o kąt <math>\varphi</math>, wokół osi układu. | ||
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\ | #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. | ||
#Realizacja zadanego obrotu o kąt <math>\varphi | #Realizacja zadanego obrotu o kąt <math>\varphi</math>, wokół osi OX. | ||
#Obrót będący operacją odwrotną do operacji 3. | #Obrót będący operacją odwrotną do operacji 3. | ||
#Obrót będący operacją odwrotną do operacji 2. | #Obrót będący operacją odwrotną do operacji 2. | ||
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\ | |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\ | 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. |
Wersja z 09:31, 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. |
![]() |
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
![]() |