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)

Author: Marcin, 2009-07-24

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ą.)

 9
Author: Jason S,
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.

 1
Author: Marcin,
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