Въртя се и се въртя, искам да объркам ъглите на Ойлер и ключалката на Gimbal

Поставете произволен пръст на лявата си ръка напред. Хайде, не се срамувай, никой няма да ти се смее. Това е за важен експеримент. Изложени? Сега си представете, че вие сте вашият пръст (е, глупости). Завъртете се под прав ъгъл надясно, след това нагоре и накрая наляво. Къде попаднахте? Точно така, на същото място, но вече на гърба.
Накратко, ето как работи въртенето с ъгли на Ойлер. Малко непредвидимо и неудобно, нали? Ъглите на Ойлер имат няколко недостатъка, но има едно особено лошо свойство, което ви кара да не искате да се забърквате с тях. Името му е Gimbal lock.
Внимание! Минавайки под разреза, рискувате да си счупите главата.Като начало нека ви напомня какво представляват ъглите на Ойлер. Вероятно си спомняте, че това е нещо като набор от три ъгъла на завъртане около осите X, Y и Z? Не със сигурност по този начин. Да приемем, че искате да завъртите обект и имате набор от крайни ъгли (X: 45°, Y: 45°, Z: 45°). Един от триковете на ъглите на Ойлер е необходимостта да се избере един ред на ротации. Ако първо завъртите на 45° около оста X, след това около Y и накрая около Z, ще получите резултата като в лявата половина на снимката по-долу. Ако редът е Z-X-Y, тогава резултатът ще бъде различен, както в дясната половина.

Мястото, където се появява шарнирната ключалка, зависи от избора на реда на завоите. Какво е? Да вземем за пример този ред на ротации: Z-X-Y. Ако завъртането около оста X е 90° или -90°, тогава завъртанията около Z и Y ще се „изядат“ взаимно и ще остане само парче от по-голямото завъртане. Например (X: 90°, Y: 90°, Z: 90°) става просто (X: 90°, Y: 0°, Z: 0°). Обърнете внимание на илюстрацията.

Същоможете да замените (X: 90°, Y: 130°, Z: 140°) или (X: 90°, Y: 30°, Z: 40°), но резултатът пак ще бъде (X: 90°, Y: 0°, Z: 10°). Малко неинтуитивно, не мислите ли? Всичко е заради шарнирната ключалка. Когато въртенето около оста X стане 90° или -90°, все още неизползваната локална ос на въртене Y става успоредна на оста Z, но с обратна посока, така че въртенето около нея е в конфликт с предишното въртене около Z.
Тя взриви главите на особено впечатлителните читатели. Нека обясня същото със стрелките.

Когато осите съвпадат, се губи една степен на свобода. Това е ключалката на пантата. Искате да направите завой, но нямате достатъчно оси, за да го направите.
Ключалката на пантата се появява в средата на йерархията на завоите. Ако използвате реда X-Y-Z или Z-Y-X, завиването надясно или наляво ще задръсти анимацията. Тъй като такова завъртане е много по-често срещано от, например, завъртане към зенита или надира, много програми използват последователността Z-X-Y. Такава йерархия от ротации се използва в Unity3d, въпреки че вътрешно всички ротации все още се съхраняват в кватерниони. Какво представляват кватернионите? По-добре е да говорим за това отделно. Кватернионите и ротационните матрици са един от начините да се избегне блокирането на пантите. Има и трудни алгоритми, които плавно заобикалят замъка, но това се отразява на качеството на анимацията. Най-добре е да използвате ъгли на Ойлер само за прости случаи: витла, колела, махала. Понякога можете да промените йерархията на ходовете, но тогава все още трябва да запомните за ключалката.
Завъртете сцената с мишката, Esc - изход, останалите бутони са посочени на екрана.
За потребители на Linux: Направете файла GimbalLock изпълним с "chmod +x GimbalLock" итичам.