GKIW Moduł 4: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
m Zastępowanie tekstu – „\</math>” na „\ </math>” |
||
(Nie pokazano 5 wersji utworzonych przez 2 użytkowników) | |||
Linia 18: | Linia 18: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd1.png|thumb|500px]] | ||
|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 27: | Linia 27: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd2.png|thumb|500px]] | ||
|valign="top"|Można zastanowić się nad tym, czy takie podejście do problemu wystarczy do opisu prostych operacji geometrycznych. | |valign="top"|Można zastanowić się nad tym, czy takie podejście do problemu wystarczy do opisu prostych operacji geometrycznych. | ||
Linia 40: | Linia 40: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd3.png|thumb|500px]] | ||
|valign="top"|Niech <math>M_{T1}=\begin{bmatrix} a & b \\ c & d \\ \end{bmatrix}</math>. Niech wektor <math>P=\begin{bmatrix} T_X & T_Y \\ \end{bmatrix}</math> opisuje translację punktu na płaszczyźnie. | |valign="top"|Niech <math>M_{T1}=\begin{bmatrix} a & b \\ c & d \\ \end{bmatrix}</math>. Niech wektor <math>P=\begin{bmatrix} T_X & T_Y \\ \end{bmatrix}</math> opisuje translację punktu na płaszczyźnie. | ||
Linia 66: | Linia 66: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |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 82: | Linia 82: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd5.png|thumb|500px]] | ||
|valign="top"|Niech położenie punktu o współrzędnych <math>(x_p, y_p)</math> na płaszczyźnie reprezentuje wektor P : | |valign="top"|Niech położenie punktu o współrzędnych <math>(x_p, y_p)</math> na płaszczyźnie reprezentuje wektor P : | ||
Linia 116: | Linia 116: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd6.png|thumb|500px]] | ||
|valign="top"|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. | |valign="top"|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. | ||
|} | |} | ||
Linia 123: | Linia 123: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd7.png|thumb|500px]] | ||
|valign="top"| | |valign="top"| | ||
Linia 131: | Linia 131: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd8.png|thumb|500px]] | ||
|valign="top"| | |valign="top"| | ||
|} | |} | ||
Linia 138: | Linia 138: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd9.png|thumb|500px]] | ||
|valign="top"| | |valign="top"| | ||
|} | |} | ||
Linia 145: | Linia 145: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd10.png|thumb|500px]] | ||
|valign="top"| | |valign="top"| | ||
|} | |} | ||
Linia 152: | Linia 152: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd11.png|thumb|500px]] | ||
|valign="top"|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. | |valign="top"|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. | ||
Linia 160: | Linia 160: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd12.png|thumb|500px]] | ||
|valign="top"|Możliwe są dwa ustawienia osi trójwymiarowego układu współrzędnych. Najczęściej do opisu położenia obiektów na scenie (w przestrzeni obiektu) stosowany jest układ prawoskrętny. Natomiast w operacjach związanych z rzutowaniem układ lewoskrętny. Wybór układu współrzędnych dla operacji rzutowania jest konsekwencją naturalnego rozumienia odległości obiektu od obserwatora. Jeśli osie OX i OY zdefiniują układ współrzędnych na rzutni (utożsamianej z płaszczyzną XOY) (pozioma oś OX skierowana w prawo i pionowa oś OY skierowana do góry), to kierunek wzrostu odległości od obserwatora wskaże oś OZ. Tak zdefiniowany układ współrzędnych będzie układem lewoskrętnym. | |valign="top"|Możliwe są dwa ustawienia osi trójwymiarowego układu współrzędnych. Najczęściej do opisu położenia obiektów na scenie (w przestrzeni obiektu) stosowany jest układ prawoskrętny. Natomiast w operacjach związanych z rzutowaniem układ lewoskrętny. Wybór układu współrzędnych dla operacji rzutowania jest konsekwencją naturalnego rozumienia odległości obiektu od obserwatora. Jeśli osie OX i OY zdefiniują układ współrzędnych na rzutni (utożsamianej z płaszczyzną XOY) (pozioma oś OX skierowana w prawo i pionowa oś OY skierowana do góry), to kierunek wzrostu odległości od obserwatora wskaże oś OZ. Tak zdefiniowany układ współrzędnych będzie układem lewoskrętnym. | ||
Linia 184: | Linia 184: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd13.png|thumb|500px]] | ||
|valign="top"| | |valign="top"| | ||
|} | |} | ||
Linia 191: | Linia 191: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd14.png|thumb|500px]] | ||
|valign="top"|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. | |valign="top"|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. | ||
|} | |} | ||
Linia 198: | Linia 198: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd15.png|thumb|500px]] | ||
|valign="top"|Podobnie macierze opisujące symetrie osiowe względem pozostałych dwóch osi (OY i OZ) mają analogiczną postać ze zmienionymi znakami. | |valign="top"|Podobnie macierze opisujące symetrie osiowe względem pozostałych dwóch osi (OY i OZ) mają analogiczną postać ze zmienionymi znakami. | ||
|} | |} | ||
Linia 205: | Linia 205: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd16.png|thumb|500px]] | ||
|valign="top"| | |valign="top"| | ||
|} | |} | ||
Linia 212: | Linia 212: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd17.png|thumb|500px]] | ||
|valign="top"|Jeżeli założyliśmy, że położenie obiektów sceny będzie opisywane w układzie prawoskrętnym, natomiast rzutowanie będzie rozpatrywane w układzie lewoskrętnym, to współrzędne tego samego punktu w obu układach będą się różniły znakiem przy współrzędnej z. Przeliczenie współrzędnych między układami zapewnia macierz symetrii płaszczyznowej względem XOY. | |valign="top"|Jeżeli założyliśmy, że położenie obiektów sceny będzie opisywane w układzie prawoskrętnym, natomiast rzutowanie będzie rozpatrywane w układzie lewoskrętnym, to współrzędne tego samego punktu w obu układach będą się różniły znakiem przy współrzędnej z. Przeliczenie współrzędnych między układami zapewnia macierz symetrii płaszczyznowej względem XOY. | ||
|} | |} | ||
Linia 219: | Linia 219: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd18.png|thumb|500px]] | ||
|valign="top"|Przesunięcie w układzie trójwymiarowym odbywa się w sposób analogiczny do przesunięcia na płaszczyźnie. | |valign="top"|Przesunięcie w układzie trójwymiarowym odbywa się w sposób analogiczny do przesunięcia na płaszczyźnie. | ||
|} | |} | ||
Linia 226: | Linia 226: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd19.png|thumb|500px]] | ||
|valign="top"| | |valign="top"| | ||
|} | |} | ||
Linia 233: | Linia 233: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd20.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|W układzie współrzędnych kartezjańskich trójwymiarowych zdefiniowanie obrotów wokół osi układu wymaga przyjęcia reguł uznawania obrotów za dodatnie. Najczęściej przyjmuje się konwencję, według której dodatnie obroty są zdefiniowane zgodnie z rysunkiem. | ||
W układzie współrzędnych kartezjańskich trójwymiarowych zdefiniowanie obrotów wokół osi układu wymaga przyjęcia reguł uznawania obrotów za dodatnie. Najczęściej przyjmuje się konwencję, według której dodatnie obroty są zdefiniowane zgodnie z rysunkiem. | |||
|} | |} | ||
Linia 243: | Linia 241: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd21.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Obiekt na rysunku został obrócony o kat <math>- 45^\circ</math> wokół osi OX. | ||
Obiekt na rysunku został obrócony o kat <math>- 45^\circ</math> wokół osi OX. | |||
|} | |} | ||
Linia 252: | Linia 248: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd22.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Obiekt na rysunku został obrócony o kat <math>45^\circ</math> wokół osi OY | ||
Obiekt na rysunku został obrócony o kat <math>45^\circ</math> wokół osi OY | |||
|} | |} | ||
Linia 261: | Linia 255: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd23.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Obiekt na rysunku został obrócony o kat <math>45^\circ</math> wokół osi OZ. | ||
Obiekt na rysunku został obrócony o kat <math>45^\circ</math> wokół osi OZ. | |||
|} | |} | ||
Linia 270: | Linia 262: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd24.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|zwrócić uwagę na fakt, że jeśli <math>S=S_X=S_Y=S_Z\neq 0</math> to skalowanie można opisać macierzą: | ||
:<math>M_{S1}=\begin{bmatrix} 1 & 0 & 0 & 0 \\0 & 1 & 0 & 0\\0 & 0 & 1 & 0 \\ 0 & 0 & 0 & \frac{1}{S} \end{bmatrix}</math> | :<math>M_{S1}=\begin{bmatrix} 1 & 0 & 0 & 0 \\0 & 1 & 0 & 0\\0 & 0 & 1 & 0 \\ 0 & 0 & 0 & \frac{1}{S} \end{bmatrix}</math> | ||
Linia 290: | Linia 280: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd25.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Rysunek podaje macierz pochylenia trójwymiarowego dla z stałego, oraz przykład zniekształcenia sześcianu przez takie przekształcenie. Analogicznie można zaproponować przekształcenia i macierze je opisujące dla pochylenia przy stałym x oraz przy stałym y. | ||
Rysunek podaje macierz pochylenia trójwymiarowego dla z stałego, oraz przykład zniekształcenia sześcianu przez takie przekształcenie. Analogicznie można zaproponować przekształcenia i macierze je opisujące dla pochylenia przy stałym x oraz przy stałym y. | |||
|} | |} | ||
Linia 299: | Linia 287: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd26.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Składanie przekształceń i operowanie macierzą wynikową pozwala realizować operacje efektywniej. | ||
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 314: | Linia 300: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd27.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Często pojawiającym się problemem w próbach implementacji przekształceń geometrycznych w grafice jest problem punktu odniesienia operacji. | ||
Często pojawiającym się problemem w próbach implementacji przekształceń geometrycznych w grafice jest problem punktu odniesienia operacji. | |||
Skalowanie jest operacją zmieniającą proporcje wymiarów względem początku układu współrzędnych. Punkt [0,0,0] jest punktem stałym tego przekształcenia. Wyobraźmy sobie dwukrotne powiększenie pewnego obiektu (np. powiększenie domu jak na rysunku). Powiększenie dwukrotne oznacza nie tylko, że zwiększą się wymiary obiektu. Oznacza również, że każdy punkt obiektu zwiększy dwukrotnie odległość od początku układu współrzędnych. A przecież obiekt jest „osadzony” w pewnych realiach sceny – np. wejście do domu jest w określonym miejscu. Prosta realizacja skalowania prowadzi do pewnych konfliktów. Aby tego uniknąć należy wybrać punkt obiektu, który powinien zachować współrzędne – punkt odniesienia. A następnie zrealizować skalowanie względem tego punktu odniesienia. | Skalowanie jest operacją zmieniającą proporcje wymiarów względem początku układu współrzędnych. Punkt [0,0,0] jest punktem stałym tego przekształcenia. Wyobraźmy sobie dwukrotne powiększenie pewnego obiektu (np. powiększenie domu jak na rysunku). Powiększenie dwukrotne oznacza nie tylko, że zwiększą się wymiary obiektu. Oznacza również, że każdy punkt obiektu zwiększy dwukrotnie odległość od początku układu współrzędnych. A przecież obiekt jest „osadzony” w pewnych realiach sceny – np. wejście do domu jest w określonym miejscu. Prosta realizacja skalowania prowadzi do pewnych konfliktów. Aby tego uniknąć należy wybrać punkt obiektu, który powinien zachować współrzędne – punkt odniesienia. A następnie zrealizować skalowanie względem tego punktu odniesienia. | ||
Linia 332: | Linia 316: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd28.png|thumb|500px]] | ||
|valign="top"| | |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 | ||
Jeśli macierz <math>M\ | |||
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 341: | 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 349: | Linia 331: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd29.png|thumb|500px]] | ||
|valign="top"| | |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 l 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. | ||
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 l 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 | |||
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 l) 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 l) 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 369: | Linia 349: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd30.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|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. | ||
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. | |||
|} | |} | ||
Linia 378: | Linia 356: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd31.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Po zrealizowaniu obrotu wokół OX prosta l znalazła się na płaszczyźnie XOZ. | ||
Po zrealizowaniu obrotu wokół OX prosta l znalazła się na płaszczyźnie XOZ. | |||
|} | |} | ||
Linia 387: | Linia 363: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd32.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Po zrealizowaniu obrotu wokół OY prosta l pokryje się z osią OX układu współrzędnych. Jednocześnie odpowiednio dobrane operacje zapewniły zgodność zwrotów obu osi. | ||
Po zrealizowaniu obrotu wokół OY prosta l pokryje się z osią OX układu współrzędnych. Jednocześnie odpowiednio dobrane operacje zapewniły zgodność zwrotów obu osi. | |||
|} | |} | ||
Linia 396: | Linia 370: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd33.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Teraz można wreszcie wykonać obrót o kąt <math>\varphi\ </math>, wokół prostej l co, dzięki odpowiednim operacjom wstępnym, odpowiada obrotowi o kąt <math>\varphi\ </math>, wokół osi OX układu współrzędnych. | ||
Teraz można wreszcie wykonać obrót o kąt <math>\varphi\ | |||
|} | |} | ||
Linia 405: | Linia 377: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd34.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Następnymi etapami będą operacje przeciwne realizowane w odwrotnej kolejności. | ||
Następnymi etapami będą operacje przeciwne realizowane w odwrotnej kolejności. | |||
Macierz przekształcenia całkowitego jest iloczynem macierzy opisujących przekształcenia odpowiadające kolejnym przedstawionym etapom. | Macierz przekształcenia całkowitego jest iloczynem macierzy opisujących przekształcenia odpowiadające kolejnym przedstawionym etapom. | ||
Linia 416: | Linia 386: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd35.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Problem dokładności obliczeń przy wykorzystaniu komputerów jest znany od kiedy istnieją komputery. Wiadomo, że liczby w komputerze są reprezentowane przez skończony ciąg cyfr. W przypadku liczb całkowitych stosowana jest reprezentacja stałopozycyjna i i jeśli rozpatrzymy arytmetykę binarną, to liczbie takiej odpowiada rozwinięcie dwójkowe o określonej długości słowa. Liczby rzeczywiste reprezentowane są zmiennopozycyjnie w postaci cechy i mantysy. Stosowanie określonej długości słowa do reprezentacji mantysy powoduje powstanie dokładności danej arytmetyki. Oznacza to, że reprezentacja liczb rzeczywistych obarczona jest zawsze pewnym błędem wynikającym z tej arytmetyki. Przeprowadzanie operacji graficznych wymaga często wielokrotnych obliczeń. Błędy reprezentacji (dokładność arytmetyki) mogą w widoczny sposób wpływać na efekt (graficzny !) obliczeń. Stosowane algorytmy powinny być tak realizowane, aby, o ile jest to możliwe, minimalizować te błędy. | ||
Problem dokładności obliczeń przy wykorzystaniu komputerów jest znany od kiedy istnieją komputery. Wiadomo, że liczby w komputerze są reprezentowane przez skończony ciąg cyfr. W przypadku liczb całkowitych stosowana jest reprezentacja stałopozycyjna i i jeśli rozpatrzymy arytmetykę binarną, to liczbie takiej odpowiada rozwinięcie dwójkowe o określonej długości słowa. Liczby rzeczywiste reprezentowane są zmiennopozycyjnie w postaci cechy i mantysy. Stosowanie określonej długości słowa do reprezentacji mantysy powoduje powstanie dokładności danej arytmetyki. Oznacza to, że reprezentacja liczb rzeczywistych obarczona jest zawsze pewnym błędem wynikającym z tej arytmetyki. Przeprowadzanie operacji graficznych wymaga często wielokrotnych obliczeń. Błędy reprezentacji (dokładność arytmetyki) mogą w widoczny sposób wpływać na efekt (graficzny !) obliczeń. Stosowane algorytmy powinny być tak realizowane, aby, o ile jest to możliwe, minimalizować te błędy. | |||
Rozpatrzmy przykład zegara, dla którego należy wyznaczyć położenie wskazówek. | Rozpatrzmy przykład zegara, dla którego należy wyznaczyć położenie wskazówek. | ||
Linia 427: | Linia 395: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd36.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Najprostszym rozwiązaniem jest algorytm iteracyjny powiększający w każdym kroku bieżący kąt o zadany przyrost. Niestety takie rozwiązanie prowadzi do powstania widocznych na tarczy zegara błędów już po kilkudziesięciu godzinach. | ||
Najprostszym rozwiązaniem jest algorytm iteracyjny powiększający w każdym kroku bieżący kąt o zadany przyrost. Niestety takie rozwiązanie prowadzi do powstania widocznych na tarczy zegara błędów już po kilkudziesięciu godzinach. | |||
|} | |} | ||
Linia 436: | Linia 402: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd37.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|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ń. | ||
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ń. | |||
|} | |} | ||
Linia 445: | Linia 409: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd38.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Zadanie może być tak zrealizowane, aby błąd nie powiększał się. | ||
Zadanie może być tak zrealizowane, aby błąd nie powiększał się. | |||
Realizując algorytm graficzny należy zawsze zwrócić uwagę na dokładność obliczeń numerycznych. Aby błąd zaokrągleń nie wpłynął na efekt obliczeń i nie zniweczył naszej pracy psując efekt końcowy. | Realizując algorytm graficzny należy zawsze zwrócić uwagę na dokładność obliczeń numerycznych. Aby błąd zaokrągleń nie wpłynął na efekt obliczeń i nie zniweczył naszej pracy psując efekt końcowy. | ||
Linia 456: | Linia 418: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd39.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Kwaterniony (quaternions) są czterowymiarowym rozwinięciem liczb zespolonych. Zostały zaproponowane przez Williama Hamiltona w 1953 roku. | ||
Kwaterniony (quaternions) są czterowymiarowym rozwinięciem liczb zespolonych. Zostały zaproponowane przez Williama Hamiltona w 1953 roku. | |||
:<math>i^2=j^2=k^2=ijk=-1</math> | :<math>i^2=j^2=k^2=ijk=-1</math> | ||
Linia 475: | Linia 435: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd40.png|thumb|500px]] | ||
|valign="top"| | |valign="top"|Suma i iloczyn są zdefiniowane tak jak na rysunku. | ||
Suma i iloczyn są zdefiniowane tak jak na rysunku. | |||
Dodawanie kwaternionów jest operacją łączną i przemienną. | Dodawanie kwaternionów jest operacją łączną i przemienną. | ||
Linia 488: | Linia 446: | ||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd41.png|thumb|500px]] | ||
|valign="top"|''' | |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\ | |||
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. | ||
Linia 501: | Linia 457: | ||
<hr width="100%"> | <hr width="100%"> | ||
= Literatura = | |||
{| border="0" cellpadding="4" width="100%" | {| border="0" cellpadding="4" width="100%" | ||
|width="500px" valign="top"|[[Grafika: | |width="500px" valign="top"|[[Grafika:GKIW_M4_Slajd42.png|thumb|500px]] | ||
|valign="top"| | |valign="top"| | ||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> |
Aktualna wersja na dzień 12:03, 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 l znalazła się na płaszczyźnie XOZ. |
![]() |
Po zrealizowaniu obrotu wokół OY prosta l 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 l 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
![]() |