8. Interpolace orientace — SLERP
Jak se plynule dostat z jedné orientace do druhé? Vypadá to jako triviální otázka a je to místo, kde naivní kód selže nejviditelněji.
Proč ne po složkách Eulerových úhlů
Protože úhly jsou periodické souřadnice zakřiveného prostoru a lineární interpolace o tom neví. Dva problémy, oba reálné:
- Přetečení. Z yaw −179° do +179° jsou dvě orientace vzdálené 2°. Interpolace po složkách to objede přes 358°. V testech změřeno jako 179násobek.
- Gimbal lock. Blízko singularity mění malý pohyb tělesa úhly obrovsky, takže cesta v úhlech nemá s cestou v prostoru nic společného.
SLERP
Kvaterniony jednotkové délky leží na kouli ve čtyřech rozměrech, a „přímka“ mezi dvěma body na kouli je oblouk hlavní kružnice. SLERP po něm jede rovnoměrně:
Dvě věci, které dělá dobře a naivní kód ne:
- Konstantní úhlová rychlost. V testech změřeno: rozptyl délek kroků pod 10⁻⁹. To je přesně to, co chceš od pohybu robotu.
- Nejkratší cesta. Když je skalární součin q0·q1 záporný, otočí se znaménko jednoho z nich — díky dvojitému pokrytí je to zadarmo a bez toho by rameno objelo delší oblouk.
NLERP
Prostá lineární interpolace složek s následnou normalizací. Skončí správně a je levná, ale nejede rovnoměrně — uprostřed zrychlí. Pro grafiku to stačí, pro pohyb stroje zpravidla ne. Nástroj obojí kreslí vedle sebe, ať je ten rozdíl vidět.