Założmy, że mamy punkt (-100, 0) i chcemy go najpierw przesunąć o wektor (-100,0), a następnie przeskalować o wektor (-1,1).
Macierz przesunięcia o wektor (x,y)
\(\displaystyle{ \left[\begin{array}{ccc}1&0&x\\0&1&y}\\0&0&1\end{array}\right]}\)
Macierz skalowania o wektor (x,y)
\(\displaystyle{ \left[\begin{array}{ccc}x&0&0\\0&y&0}\\0&0&1\end{array}\right]}\)
Nasz punkt reprezentowany przez macierz:
\(\displaystyle{ \left[\begin{array}{ccc}-100\\0\\1\end{array}\right]}\)
Chciałbym stworzyć jedną macierz, która przemnożona przez punkt (-100,0), da nam oczekiwany efekt (moglibyśmy najpierw punkt wymnożyć przez jedną macierz, a potem przez drugą, ale jeśli mamy takich punktów 100, to jest to nieefektwyne).
A więc chcemy stworzyć macierz trasnformacji (wynikową):
\(\displaystyle{ \left[\begin{array}{ccc}1&0&-100\\0&1&0}\\0&0&1\end{array}\right] \cdot \left[\begin{array}{ccc}-1&0&0\\0&1&0}\\0&0&1\end{array}\right] = \left[\begin{array}{ccc}-1&0&-100\\0&1&0}\\0&0&1\end{array}\right]}\)
Teraz wymnażając tą macierz przez nasz punkt, otrzymamy punkt \(\displaystyle{ (-100,0)}\), co jest niestety błędnym wynikiem. Co robie źle?
Gdy pomnożę punkt przez pierwszą macierz, a potem zmodyfikowany punkt przez drugą macierz, otrzymam prawidlowy wynik \(\displaystyle{ (200,0)}\), ale zależy mi jednak, aby robić to pierwszym sposobem
Składanie transformacji
-
- Użytkownik
- Posty: 5356
- Rejestracja: 10 kwie 2009, o 10:22
- Płeć: Kobieta
- Lokalizacja: Gliwice
- Pomógł: 1381 razy
Składanie transformacji
W ogóle to dziwnie to zapisujesz - z wektorów o 2 współrzędnych robią Ci się wektory o 3 współrzędnych i odwrotnie - koszmar
Ad rem - skoro najpierw przesuwasz, a potem skalujesz, to macierz złożenia jest iloczynem tych macierzy w odwrotnej kolejności.
Pozdrawiam.
Ad rem - skoro najpierw przesuwasz, a potem skalujesz, to macierz złożenia jest iloczynem tych macierzy w odwrotnej kolejności.
Pozdrawiam.
-
- Użytkownik
- Posty: 16
- Rejestracja: 23 paź 2009, o 19:29
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 2 razy
Składanie transformacji
Czyli przykładowo jeżeli mam do wykonania następujące transformacje:
- przesunięcie_1
- obrot_1
- skalowanie
- obrot_2
- przesuniecie_2
To zlozenie tych transformacji to wymnozenie tych macierzy w odwrotnej kolejnosci ? czyli
przesuniecie_2 * obrot_2 * skalowanie * obrot_1 * przesuniecie_1 ?
- przesunięcie_1
- obrot_1
- skalowanie
- obrot_2
- przesuniecie_2
To zlozenie tych transformacji to wymnozenie tych macierzy w odwrotnej kolejnosci ? czyli
przesuniecie_2 * obrot_2 * skalowanie * obrot_1 * przesuniecie_1 ?