Rozkładać złożone przekształcenia macierzy w szereg prostych przekształceń?
Zastanawiam się, czy jest możliwe (i jeśli jest to w jaki sposób) ponowne przedstawienie dowolnej transformacji macierzy m3 jako sekwencji prostszych przekształceń (takich jak translate, scale, skew, rotate)
Innymi słowy: jak obliczyć Macierze MTranslate, MScale, MRotate, MSkew z MComplex tak, aby prawdziwe było następujące równanie:
MComplex = MTranslate * MScale * MRotate * MSkew (lub w innej kolejności)
2 answers
Rozkład wartości pojedynczej (Zobacz także Ten blog i ten PDF). Przekształca dowolną macierz w kompozycję 3 macierzy: ortogonalnej + diagonalnej + ortogonalnej. Macierze ortogonalne są macierzami obrotowymi; macierz przekątna reprezentuje przekątne wzdłuż osi głównych = skalowanie.
Tłumaczenie rzuca klucz do gry, ale co należy zrobić, to wyjąć część tłumaczenia matrycy więc masz matrycę 3x3, Uruchom SVD na tym aby uzyskać obrót+pochylenie, dodaj część tłumaczenia z powrotem. W ten sposób będziesz miał rotację + skalę + rotację + kompozycję translacji 4 macierzy. Prawdopodobnie można to zrobić w 3 matrycach (obrót + skalowanie wzdłuż jakiegoś zestawu osi + tłumaczenie), ale nie jestem pewien dokładnie jak... może rozkład QR (Q = orthogonal = rotation, ale nie jestem pewien, czy R jest tylko skośny, czy ma część obrotową.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-24 15:23:06
Tak, ale rozwiązanie nie będzie unikalne. Ponadto powinieneś raczej umieścić tłumaczenie na końcu (kolejność reszty nie ma znaczenia)
Dla dowolnej macierzy kwadratowej A
istnieje nieskończenie wiele macierzy B
i C
tak, że A = B*C
. Wybierz dowolną macierz odwracalną B
(co oznacza, że b^-1 istnieje lub det (B) != 0) i teraz C = B^-1*A
.
Więc dla Twojego rozwiązania najpierw rozłożyć MC
na MT
i MS*MR*MSk*I
, wybierając MT jako jakąś odwracalną macierz transpozycyjną. Wtedy rozkłada resztę na MS
i MR*MSk*I
tak, że MS jest dowolnie skalowaną macierzą. I tak dalej...
Teraz, jeśli na końcu zabawy I
jest macierz tożsamości (z 1 na przekątnej, 0 gdzie indziej), jesteś dobry. Jeśli tak nie jest, zacznij od początku, ale Wybierz różne matryce; -)
W rzeczywistości, używając powyższej metody symbolicznie można utworzyć zbiór równań, które dadzą ci sparametryzowane formuły dla wszystkich tych macierzy.
Jak przydatne byłyby te rozkładania dla Ciebie, cóż-to już inna historia.
Jeśli wpiszesz to do Mathematica lub Maxima oni obliczą to za Ciebie w mgnieniu oka.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-24 12:50:26