RotLab orientace v prostoru
Otevřít interaktivní verzi →

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

4. Osa a úhel — Rodriguesův vzorec

Eulerova věta o rotaci: každá orientace tělesa s pevným bodem se dá dostat jedinou rotací kolem jediné osy. Ať je orientace jakkoliv zamotaná, vždycky existuje osa k̂ a úhel θ, které ji vyrobí najednou.

Z osy a úhlu se matice postaví Rodriguesovým vzorcem:

R = I + sin θ · [k̂]× + (1 − cos θ) · [k̂]ײRodrigues

kde [k̂]× je antisymetrická matice vektorového součinu. Je to zkrácený zápis maticové exponenciály R = exp([k̂]×θ) — a přesně takhle je to v testech ověřené, sečtením té exponenciály jako Taylorovy řady, která s Rodriguesem nesdílí ani řádek kódu.

Zpátky z matice

θ = arccos( stopa R − 12 )     k̂ = 12 sin θ · ( R32−R23, R13−R31, R21−R12 )

Dvě místa, kde tohle selže, a obě jsou skutečná:

  • θ = 0. Osa není definovaná — otočení o nic je kolem čehokoliv. Nástroj to hlásí, místo aby dělil nulou.
  • θ = π. sin θ = 0 a antisymetrická část matice zmizí. Osa se musí získat z diagonály R + I. Naivní kód tady vrací NaN a je to překvapivě častá havárie, protože otočení o 180° není nic exotického.
Přesnost té arccos. Blízko identity platí arccos(1−ε) ≈ √(2ε), takže se ztratí polovina platných číslic: dvě orientace shodné na strojovou přesnost vyjdou jako vzdálené ~10⁻⁸ rad. Není to chyba, je to vlastnost toho měření — a proto mají testy tolerance na úhlové porovnání volnější než na porovnání prvků matice.

Vzorce v této kapitole

R(k̂,θ) — Rodriguesův vzorec
R = I + sin θ·[k̂]× + (1−cos θ)·[k̂]ײ = exp([k̂]×θ) [—] Rodrigues
θ, k̂ — osa a úhel z matice
θ = arccos((tr R − 1)/2); k̂ = (R₃₂−R₂₃, R₁₃−R₃₁, R₂₁−R₁₂)/(2 sin θ) [rad] inverse of Rodrigues