Obrót wektora 3W
Q: Mamy dwa wektory jednostkowe v1= [x, y, z] oraz v2 = [0, 0, −1]. Należy wyznaczyć macierz M
która spełni równanie:
v1 = v2 * M;
21 gru 03:26
Q: Już mam rozwiązanie. Jakby ktoś miał podobny problem to poniżej kod programu matlab / octave:
v1 = [x, y, z];
v2 = [0, 0, −1];
sqrtxy = sqrt(x2 + y2);
sqrtxyz = sqrt(x2 + y2 + z2);
%rotacja wokół osi OZ −> ustawiamy wektor w płaszczyźnie XOZ
M1 = [y/sqrtxy, −x/sqrtxy, 0;
x/sqrtxy, y/sqrtxy, 0;
0, 0, 1];
%rotacja o wokół osi OX o kąt L+180 st
M2 = [1, 0, 0;
0, −z/sqrtxyz, sqrtxy/sqrtxyz;
0, −sqrtxy/sqrtxyz, −z/sqrtxyz];
M = M2 * M1;
vrot = M * [x; y; z];
21 gru 05:44
MQ:
Kod w MatLabie funkcji, która oblicza macierz przekształcenia wektora v2 w zadany na wejściu
vektor v1.
function M=macierz(v1)
v2=[0,0,−1]
M=v2 \ v1
i tyle całego kodu, chociaż moim zdaniem równanie wyjściowe powinno być:
v1=M*v2
i wtedy interesująca nas linijka kodu powinna być:
M=v1 / v2
21 gru 09:05
Q: Faktycznie, źle zapisałem równanie, powinno być v1=M*v2 (co zresztą poprawiłem w ostatniej
linijce rozwiązania). Akurat ten algorytm nie ma być wykorzystany w MatLabie, tylko w
procesorze ARM Cortex M3. Tam akurat bardzo dobrze działają wbudowane funkcje liczenia
pierwiastka, sinusów i kosinusów. Ale do tego potrzeba mieć rozwiązanie matematyczne, a nie
iteracyjne. Dlatego zapytałem na forum rozwiązywania zadań. Jeśli ktoś zna jeszcze inny sposób
rozwiązania tego zadania, to z chęcią się zapoznam.
21 gru 14:55