Mam obrót dookoła dowolnej osi: n = x,y,z, i o kąt f.
Jak z tego wyliczyć te trzy kąty Eulera, znaczy trzy obroty, kolejno dookoła osi: x,y i z ?
fx = ? fy = ? fz = ?
Mam obrót dookoła dowolnej osi: n = x,y,z, i o kąt f.
Jak z tego wyliczyć te trzy kąty Eulera, znaczy trzy obroty, kolejno dookoła osi: x,y i z ?
fx = ? fy = ? fz = ?
Przeciwprostokątna(długość) * sins(kąt względem x) = punkt y względem osi
To co podałem wcześniej było względem osi Z.
Inne osie powinny być analogiczne.
X powinna być wysokością y * kątem z :) itp.
Niestety, ale Twierdzenie Eulera można zastosować tylko do obrotu wokół punktu, a nie osi, więc lipa.
https://en.wikipedia.org/wiki/Euler_angles
http://mathworld.wolfram.com/EulerAngles.html
Zatem jakie są te trzy kąty - nie ma?
w przeciwną stronę łatwo to wyliczyć, znaczy tak: trzy obroty -> oś + jeden kąt.
Po prostu mnożymy trzy kwaterniony:
qx = cos(fx/2), sin(fx/2)(1,0,0)
qy = cos(fy/2), sin(fy/2)(0,1,0)
qz = cos(fz/2), sin(fz/2)*(0,0,1)
wtedy:
q = qz.qy.qx = cos(f/2), sin(f/2)*n.
No, ale mi chodzi o odwrotną operację, czyli jak odzyskać te trzy: qx,qy i qz, z finalnego q.
a może nie ma z tym problemu.
https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
tam jest: a13 = -sin(fy) - w pierwszej kolumnie na dole.
zatem: fy = arcsin(-a13);
no i tak po kolei wyciskamy te kąty;
c23 = sin(fx)cos(fy) -> sin(fx) = cos(fy)/c22, no a kąt fy już mamy, więc wyliczamy fx (o ile c22 <> 0);
i potem:
fz = ...
A X * sin(alfa) + F(x) * sin(afla)
?
Wzór na dowolną funkcję przesuniętą o kąt alfa.
Nie wiem co tam bazgrolisz bezmyślnie jak małpolud-poliglota... napisz jak człowiek to zobaczym.