TransformLab posunout, otočit, složit

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.

Interpolace poloh: proč ne po složkách

Rameno má být v poloze A a má dojet do B. Napadne nejjednodušší věc: proložit čísla v maticích lineárně. Je to jeden řádek kódu, funguje to a je to špatně — a co je horší, na první pohled to vypadá skoro dobře.

xypo složkách (špatně)měřítko 0,707má být 1,000po částech (správně)měřítko 1,000úhel 45,0°objekt se zmenšil o29,3 %
interpolace po složkách matice dá v t = 0,50 měřítko 0,7071 — objekt se scvrkl a nikdo o to nežádal
Táhni časem. Oranžová je interpolace po složkách matice, zelená po částech. V polovině cesty se oranžový domeček viditelně scvrkne — číslo vpravo dole říká o kolik.

Důvod: množina rotací není rovná. Průměr dvou rotačních matic už rotační matice není — sloupce přestanou být jednotkové — takže objekt se cestou zmenší a zase naroste. Při otočení o 90° je propad v polovině cesty na 0,707, tedy skoro 30 %. To je změřená hodnota, ne odhad: testy v repu ji kontrolují.

Jak správně

Rozložit polohu na části a interpolovat každou zvlášť: posun lineárně, úhel zvlášť. V rovině je to snadné. V prostoru je „úhel zvlášť“ přesně to, k čemu slouží kvaterniony a SLERP — a to je RotLab.

A ještě jedna past: kudy kolem. Z 350° do 10° je to 20° dopředu, ne 340° zpátky. Interpolace musí brát kratší cestu, jinak se rameno v jedné šestině případů rozjede opačným směrem než čekáte. Solver to dělá a má na to test.

Že je zelená dráha v obrázku hladká a oranžová se prohýbá dovnitř, není estetika: prohnutá dráha znamená, že nástroj jede jinudy, než měl, a v úzkém místě do něčeho narazí.

Vzorce v této kapitole

interp — interpolace polohy po částech
t lineárně, úhel zvlášť kratší cestou [—] kap. 9