Ve zbývající části tohoto článku JPLčtveřice konvence[1] musí být použito. Jednotka čtveřice lze popsat jako:
Můžeme spojit a čtveřice s rotací kolem osy následujícím výrazem
kde α je jednoduchý úhel rotace (hodnota v radiánech úhel otáčení ) a cos (βX), cos (βy) a cos (βz) jsou „směrové kosiny "lokalizace osy rotace (Eulerova věta o rotaci).
Tait – Bryan úhly
Tait – Bryan úhly. z-y'-x ″ sekvence (vnitřní rotace; N se shoduje s y '). Sekvence natočení úhlu je ψ, θ, Ф. Všimněte si, že v tomto případě ψ> 90 ° a θ je záporný úhel.
kde osa X směřuje dopředu, osa Y doprava a osa Z dolů. Ve výše uvedeném příkladu převodu dochází k rotaci v záhlaví objednávky, rozteči, náklonu.
Rotační matice
The ortogonální matice (post-násobení vektoru sloupce) odpovídající ve směru hodinových ručiček /levák (při pohledu podél kladné osy k počátku) rotace jednotkou čtveřice je dán nehomogenní výraz:
Li není jednotkový čtveřice, pak je homogenní forma stále skalárním násobkem rotační matice, zatímco nehomogenní forma již obecně není ortogonální maticí. To je důvod, proč se v numerické práci dává přednost homogenní formě, pokud se má zabránit zkreslení.
Směrová kosinová matice (od otočených souřadnic XYZ těla k původním souřadnicím Lab xyz pro otáčení ve směru hodinových ručiček / levá) odpovídající post-násobení Tělo 3-2-1 sekvence s Eulerovy úhly (ψ, θ, φ) je dáno vztahem:[2]
Eulerovy úhly pro sekvenci Body 3-1-3 - Systém xyz (původní pevná laboratoř) je zobrazen modře, systém XYZ (otočený finální tělo) je zobrazen červeně. Řádka uzlů, označená N a zobrazená zeleně, je mezilehlá osa X těla, kolem které dochází k druhé rotaci.
Eulerova konverze na čtverce
Kombinací čtvercových reprezentací Eulerových rotací dostaneme pro Tělo 3-2-1 sekvence, kdy se letadlo během pojíždění na dráhu nejprve otočí (Body-Z), poté se při vzletu nakloní (Body-Y) a nakonec se ve vzduchu (Body-X) otočí. Výsledná orientace sekvence Body 3-2-1 (kolem osy s velkým písmenem na ilustraci úhlu Tait-Bryan) je ekvivalentní orientaci sekvence v laboratoři 1-2-3 (kolem osy s nižším písmem), kde je letoun nejprve se válcoval (osa lab-x), poté se naklonil kolem vodorovné osy lab-y a nakonec se otočil kolem svislé osy lab-z (IB = lab2Body):
Jiné rotační sekvence používají různé konvence.[2]
Zdrojový kód
Níže uvedený kód v C ++ ilustruje výše uvedený převod:
strukturČtveřice{dvojnásobekw,X,y,z;};ČtveřiceToQuaternion(dvojnásobekzatočit,dvojnásobekhřiště,dvojnásobekválec)// vybočení (Z), rozteč (Y), výkyv (X){// Zkratky pro různé úhlové funkcedvojnásobekcy=cos(zatočit*0.5);dvojnásobeksy=hřích(zatočit*0.5);dvojnásobekstr=cos(hřiště*0.5);dvojnásobeksp=hřích(hřiště*0.5);dvojnásobekcr=cos(válec*0.5);dvojnásobeksr=hřích(válec*0.5);Čtveřiceq;q.w=cr*str*cy+sr*sp*sy;q.X=sr*str*cy-cr*sp*sy;q.y=cr*sp*cy+sr*str*sy;q.z=cr*str*sy-sr*sp*cy;vrátit seq;}
Konverze úhlů ze čtverce na Euler
Eulerovy úhly lze získat z čtveřic pomocí vztahů:[3]
Všimněte si však, že arktan a arcsin funkce implementované v počítačových jazycích přinášejí výsledky pouze mezi −π / 2 a π / 2, a pro tři rotace mezi −π / 2 a π / 2 jeden nezíská všechny možné orientace. K vygenerování všech orientací je třeba nahradit arktanové funkce v počítačovém kódu pomocí atan2:
Zdrojový kód
Následující program C ++ ilustruje převod výše:
#define _USE_MATH_DEFINES#zahrnout<cmath>strukturČtveřice{dvojnásobekw,X,y,z;};strukturEulerAngles{dvojnásobekválec,hřiště,zatočit;};EulerAnglesToEulerAngles(Čtveřiceq){EulerAnglesúhly;// válec (rotace v ose x)dvojnásobeksinr_cosp=2*(q.w*q.X+q.y*q.z);dvojnásobekcosr_cosp=1-2*(q.X*q.X+q.y*q.y);úhly.válec=std::atan2(sinr_cosp,cosr_cosp);// rozteč (rotace osy y)dvojnásobeksinp=2*(q.w*q.y-q.z*q.X);-li(std::břišní svaly(sinp)>=1)úhly.hřiště=std::copysign(M_PI/2,sinp);// použijte 90 stupňů, pokud je mimo rozsahjinýúhly.hřiště=std::jako v(sinp);// vybočení (rotace v ose z)dvojnásobeksiny_cosp=2*(q.w*q.z+q.X*q.y);dvojnásobekcosy_cosp=1-2*(q.y*q.y+q.z*q.z);úhly.zatočit=std::atan2(siny_cosp,cosy_cosp);vrátit seúhly;}
Singularity
Je třeba si uvědomit singularity v Eulerově parametrizaci úhlu, když se stoupání blíží ± 90 ° (severní / jižní pól). Tyto případy musí být řešeny speciálně. Obecný název pro tuto situaci je kardanový zámek.
Všimněte si, že kanonický způsob otáčení trojrozměrného vektoru čtveřicí definování Eulerova rotace je prostřednictvím vzorce
kde je čtveřice obsahující vložený vektor , je konjugovaný čtveřice, a je otočený vektor . Ve výpočetních implementacích to vyžaduje dvě násobení čtveřice. Alternativním přístupem je použití dvojice vztahů
kde označuje trojrozměrný vektorový křížový produkt. To zahrnuje méně násobení, a proto je výpočetně rychlejší. Numerické testy naznačují, že tento druhý přístup může být až 30% [4] pro rotaci vektoru rychlejší než originál.
^Blanco, Jose-Luis (2010). Msgstr "Výukový program o parametrizaci transformace se (3) a optimalizaci na rozmanité". University of Malaga, Tech. Rep. CiteSeerX10.1.1.468.5407.