Чому кватерніони використовуються для обертання?


107

Я фізик і вивчив деякі програми, і натрапив на багато людей, які використовують кватерніони для обертань, а не писати речі в матричній / векторній формі.

У фізиці є дуже вагомі причини, що ми не використовуємо кватерніони (незважаючи на химерну історію, яку час від часу розповідають про Гамільтона / Гіббса / тощо). Фізика вимагає, щоб наші описи мали хорошу аналітичну поведінку (це має точно визначене значення, але в деяких досить технічних способах, що виходять далеко за рамки того, що викладають у звичайних вступних класах, тому я не буду вникати в будь-які деталі). Виявляється, у кватерніонів немає такої приємної поведінки, і тому вони не корисні, а вектори / матриці так, і ми їх використовуємо.

Однак, обмежуючись жорсткими обертаннями та описами, які не використовують жодної аналітичної структури, 3D-обертання можуть бути рівнозначно описані в будь-якому випадку (або кількома іншими способами).

Як правило, ми просто хочемо відображення точки X = (x, y, z) на нову точку X '= (x', y ', z') з обмеженням, що X 2 = X ' 2 . І є багато речей, які роблять це.

Наївний спосіб - просто намалювати трикутники, які це визначає, і використовувати тригонометрію, або використовувати ізоморфізм між точкою (x, y, z) і вектором (x, y, z) і функцією f (X) = X 'і матриця MX = X ', або з використанням кватерніонів, або проектування компонентів старого вектора вздовж нового, використовуючи якийсь інший метод (x, y, z) T. (a, b, c) (x', y ', z ') тощо.

З математичної точки зору, ці описи є рівнозначними в цій установці (як теорема). Усі вони мають однакову кількість ступенів свободи, однакову кількість обмежень тощо.

То чому чому кватерніони віддають перевагу над векторами?

Звичайні причини, які я бачу, - це не фіксація каркаса чи числові проблеми.

Аргумент без блокування гімбалів здається дивним, оскільки це лише проблема кутів ейлера. Це також лише координатна проблема (подібно до сингулярності при r = 0 в полярних координатах (якобіанський втрачає ранг)), що означає, що це лише локальна проблема, і її можна вирішити, перемикаючи координати, обертаючись від виродження, або за допомогою двох систем координат, що перекриваються.

Я менш впевнений у числових питаннях, оскільки не знаю докладно, як обидва ці (та будь-які альтернативи) будуть реалізовані. Я читав, що повторно нормалізувати кватерніон простіше, ніж зробити це для матриці обертання, але це справедливо лише для загальної матриці; обертання має додаткові обмеження, які дотримуються цього (які вбудовані у визначення кватерніонів) (насправді це має бути правдою, оскільки вони мають однакову кількість ступенів свободи).

То в чому причина використання кватерніонів над векторами чи іншими альтернативами?


2
Річ "без карданного замка" - це брехня. У вас така ж проблема з фіксацією каркаса, що у вас з кутами Ейлера, якщо ви використовуєте два ортогональних обертання з кватерніоном. У вас немає жодної проблеми для одного обертання, оскільки це 1 операція, а не 3.
Деймон

2
@Damon Це не зовсім так. Дивіться mathoverflow.net/a/95908/97344
plasmacel

Відповіді:


61

Блокування каркаса є однією з причин, хоча, як ви кажете, це проблема лише з кутами Ейлера і легко вирішується. Кути Ейлера досі використовуються, коли пам'ять викликає занепокоєння, оскільки вам потрібно зберегти лише 3 числа.

Для кватерніонів проти матриці обертання 3х3 кватерніон має перевагу за розмірами (4 скаляри проти 9) та швидкістю (кватерніонне множення набагато швидше, ніж множення матриці 3х3).

Зауважимо, що всі ці уявлення обертання використовуються на практиці. Кути Ейлера використовують найменше пам'яті; матриці використовують більше пам'яті, але не страждають від блокування Gimbal і мають приємні аналітичні властивості; і кватерніони забезпечують хороший баланс обох, будучи легкими, але вільними від замка Gimbal.


Але матриця обертання не має такої кількості незалежних компонентів - вона обмежена. Двомірне обертання задається трьома координатами в трьох вимірах, незалежно від представлення. Матриці мають більше компонентів загалом, оскільки вони можуть робити більше, ніж обертання. Але у разі обертання додаткові компоненти визначаються з точки зору інших.
JMP

1
@JMP: Ти маєш рацію. Дуже багато людей "стискають" матрицю, щоб ви зберігали лише стільки інформації, скільки потрібно, але стиснутою матрицею складніше боротися, тому ви втрачаєте продуктивність. Вся справа в компромісах пам’яті та продуктивності.
Петро Олександр

10
Однак стандартні процедури множення матриць @JMP потребують усіх 9 значень. Незважаючи на те, що лише 3 з них є незалежними, це все одно займає пам'ять на 9 чисел, коли ви дійсно займаєтеся математикою (знову ж таки, якщо ви дійсно робите множення матриці в комп'ютері).
David Z

1
"кватерніон множення набагато швидше, ніж 3x3 матричне множення" Дійсно? Для обертання кватерніона потрібно 24 операції додавання / муль (через двічі перехресних продуктів та додаткових операцій), 3x3 матриця вимагає лише 15 операцій додавання / муль.
Марат Бухаров

Можна використовувати лише два вектори (6 поплавків), щоб повністю представити 3D-орієнтацію, 3-й вектор - це просто перехрестя. Перевагою матриць є те, що вони вже знаходяться у формі, готовій для використання у багатьох програмах. Ейлер і Кватс вимагають упаковки (від матриці) і розпакування (до матриці), що вимагає додаткової обробки. Euler і Quats можуть бути корисними для компактного довгострокового зберігання.
користувач3015682

39

У фізиці є дуже вагомі причини, що ми не використовуємо кватерніони (незважаючи на химерну історію, яку час від часу розповідають про Гамільтона / Гіббса / тощо). Фізика вимагає, щоб наші описи мали хорошу аналітичну поведінку (це має точно визначене значення, але в деяких досить технічних способах, що виходять далеко за рамки того, що викладають у звичайних вступних класах, тому я не буду вникати в будь-які деталі). Виявляється, у кватерніонів немає такої приємної поведінки, і тому вони не корисні, а вектори / матриці так, і ми їх використовуємо.

Що ж, я і фізик. І є деякі ситуації, коли кватерніони просто гойдаються! Наприклад, сферичні гармоніки. У вас два атоми розсіюються, обмінюючись електроном: що таке перенесення орбітального спина? З кватерніонами це просто множення, тобто підсумовування показників базових функцій SH, виражених як кватерніони. (Введення поліномів Legendre в позначення кватерніона хоч і трохи нудно).

Але я згоден, вони не є універсальним інструментом, і особливо в жорсткій механіці кузова їх було б дуже громіздко використовувати. І все ж цитувати Бертран Рассела відповідь на питання студента, скільки математики повинен знати фізик: "Якнайбільше!"

У будь-якому разі: Чому ми любимо кватерніони в комп'ютерній графіці? Тому що вони мають ряд привабливих властивостей. По-перше, ви можете їх добре інтерполювати, що важливо, якщо ви анімуєте обертові речі, як кінцівки навколо суглоба. З кватерніоном це просто скалярне множення та нормалізація. Висловлення цього за допомогою матриці вимагає оцінки гріха і cos, а потім побудови матриці обертання. Тоді множення вектора з кватерніоном все-таки дешевше, оскільки проходження повного множення на матричну векторну матрицю, також ще дешевше, якщо згодом додати переклад. Якщо ви вважаєте скелетну систему анімації для людського характеру, де потрібно оцінити багато перекладу / обертання для великої кількості вершин, це має величезний вплив.

Ще одним приємним побічним ефектом використання кватерніонів є те, що будь-яка трансформація за своєю суттю є ортонормальною. За допомогою матриць перекладу потрібно повторно ортонормалізувати кожні пару кроків анімації через чисельні помилки округлення.


1
Чи є у вас посилання на сферичні гармоніки / поліноми Легенди з кватерніонами? Я збираюся подати документ, що стосується суміжних тем, і я хотів би побачити (зможу цитувати) іншу роботу з цього приводу.
Майк

4
@Mike: З моєї голови, на жаль, нічого не було опубліковано. На жаль, кватерніони все ще досить незрозумілі для фізиків. Я просто пам’ятаю це, бо мій вихователь Quantum Mechanic 2 зробив це вправою, і мене це здуло. Ми, по суті, робили це використання терміна exp ((a · iω + b · jθ + c · kη + d) r), де сам r був складною змінною. Якщо побудувати це, ви отримаєте тривимірний розподіл (нам довелося розробити експоненціальний ряд відносно змінної кватерніона). Це дозволяє зробити трансформацію "фур'є", в результаті чого ви могли б перетворитись на відомі терміни SH.
datenwolf

31

Аргумент без блокування гімбалів здається дивним, оскільки це лише проблема кутів ейлера. Це також лише координатна проблема (подібно до сингулярності при r = 0 в полярних координатах (якобіанський втрачає ранг)), що означає, що це лише локальна проблема, і її можна вирішити, перемикаючи координати, обертаючись від виродження, або за допомогою двох систем координат, що перекриваються.

Багато 3D-додатків, як, наприклад, використання кутів Ейлера для визначення орієнтації об'єкта. Зокрема, для польотів-симів вони представляють теоретично корисний спосіб зберігання орієнтації таким чином, що легко змінюється.

Ви також повинні знати, що такі речі, як "перемикання координат, обертання поза виродженням або використання двох систем координат, що перекриваються", вимагають зусиль. Зусилля означає код. А код означає продуктивність. Втратити продуктивність, коли цього не потрібно , не дуже добре для багатьох 3D-додатків. Зрештою, що варто досягти всіма цими хитрощами, якби тільки використання кватерніонів отримало б вам все необхідне.

Я менш впевнений у числових питаннях, оскільки не знаю докладно, як обидва ці (та будь-які альтернативи) будуть реалізовані. Я читав, що повторно нормалізувати кватерніон простіше, ніж зробити це для матриці обертання, але це справедливо лише для загальної матриці; обертання має додаткові обмеження, які дотримуються цього (які вбудовані у визначення кватерніонів) (насправді це має бути правдою, оскільки вони мають однакову кількість ступенів свободи).

Числові питання виникають при вирішенні декількох послідовних обертів орієнтації. Уявіть, що у вас є космос у космосі. І кожен часовий відрізок ви застосовуєте до нього невелику зміну тиску. Після кожної зміни потрібно повторно нормалізувати орієнтацію; в іншому випадку проблеми з точністю врізатимуться і накрутять речі.

Якщо ви використовуєте матриці, щоразу, коли ви робите множення матриць, ви повинні повторно ортонормалізувати матрицю. Матриці, яку ви ортонормалізуєте, ще немає матриця повороту, так що я б не дуже впевнений , що легко ортогоналізації. Однак я можу бути впевнений у цьому:

Це не буде так швидко, як нормалізація 4D вектора. Ось що використовують кватерніони для нормалізації після послідовних обертів.

Нормалізація кватерніона дешева. Навіть нормалізована матриця обертання не буде такою дешево. Знову ж таки, продуктивність має значення.

Також є ще одне питання, що матриці не дуже легко: інтерполяція між двома різними орієнтаціями.

Маючи справу з 3D-символом, у вас часто виникає ряд перетворень, що визначають розташування кожної кістки у персонажі. Ця ієрархія кісток представляє персонажа в певній позі.

У більшості анімаційних систем, щоб обчислити позу для персонажа в конкретний час, інтерполювати між перетвореннями. Це вимагає інтерполяції відповідних перетворень.

Інтерполяція двох матриць - це нетривіально. Принаймні, це якщо ви хочете щось, що нагадує матрицю обертання в кінці. Зрештою, мета інтерполяції - створити щось побічне між двома перетвореннями.

Для кватерніонів все, що вам потрібно, - це 4D лерп з подальшим нормалізацією. Ось і все: візьміть два кватерніони та лінійно інтерполюйте компоненти. Нормалізуйте результат.

Якщо ви хочете якіснішої інтерполяції (а іноді й робите), ви можете вивести сферичний лерп . Це змушує інтерполяцію вести себе краще для більш розрізнених орієнтацій. Ця математика набагато складніше і вимагає більше операцій для матриць, ніж кватерніонів.


7

Думка: Кватерніони приємні.

Матриця обертання: Незначний недолік : Множення матриць ~ в 2 рази повільніше, ніж кватерніони. Незначна перевага : Множення матричного вектора ~ ~ в 2 рази швидше і більше. Величезний недолік : нормалізація! Грам-Шміт асиметричний, що не дає точної відповіді вищого порядку при виконанні диференціальних рівнянь. Більш складні методи дуже складні і дорогі.

Вісь (кут = довжина осі) Незначна перевага : Мала. Помірний недолік : Розмноження та застосування до вектора відбувається повільно із тригером. Помірний недолік : сингулярність північного полюса при довжині = 2 * пі, оскільки всі напрямки осі нічого не роблять. Більше коду (і налагодження), щоб автоматично змінити його масштаб, коли він наблизиться до 2pi.


5

Як правило, ми просто хочемо відображення точки X = (x, y, z) на нову точку X '= (x', y ', z') з обмеженням, що X ^ 2 = X '^ 2. І є багато речей, які роблять це.

Ми абсолютно не просто цього хочемо. Є дуже важлива тонкість, яку багато людей пропускають . Конструкція, про яку ви говорите (намалюйте трикутники та використовуйте тригр тощо), правильно поверне один вектор в інший. Але є нескінченно багато обертань, які це зроблять. Зокрема, я можу підійти після того, як ви здійснили обертання, а потім обертати всю систему навколо X 'вектора. Це зовсім не змінить позицію X '. Поєднання вашого обертання та моєї рівносильно іншому повороту (оскільки обертання утворюють групу ). Загалом, вам потрібно вміти представляти будь-яке таке обертання.

Виявляється, це можна зробити просто за допомогою вектора. (Це представлення обертів по осі та куту .) Але поєднувати обертання в зображенні осі-кута складно. Кватерніони роблять це легко, а також безліч інших речей. В основному кватерніони мають усі переваги інших представлень, і жодного з недоліків. (Хоча я визнаю, що можуть бути конкретні програми, які можуть бути кращими для іншого представлення.)


4

Звичайні причини, які я бачу, - це не блокування гнучкості чи числові проблеми.

І вони є вагомими причинами.

Як ви вже здаєтеся зрозумілими, кватерніони кодують одне обертання навколо довільної осі на відміну від трьох послідовних обертів у 3-просторі Ейлера. Це робить кватерніонів несприйнятливими до блокування карданних споруд .

Крім того, деякі форми інтерполяції стають приємними та легкими для виконання, як, наприклад, SLERP .

... або з використанням двох систем координат, що перекриваються.

З точки зору ефективності, чому ваше рішення краще?

Я міг би продовжувати, але кватерніони - це лише один із можливих інструментів для використання. Якщо вони не відповідають вашим потребам, тоді не використовуйте їх.


І все ж матриці обертання роблять те саме, а також мають більше алгебраїчних властивостей, які можна акуратно використовувати. Крім цього, маніпулювання матрицею - це одне з речей, на які особливо добре працюють комп'ютери.
paul23

3

Варто мати на увазі, що всі властивості, пов'язані з обертанням, не є справді властивостями кватерніонів: вони є властивостями параметрів Ейлера-Родрігеса , що є фактичною 4-елементною структурою, що використовується для опису тривимірного обертання.

Їх стосунки до Кватерніонів зумовлені виключно статтею Кейлі «Про певні результати, пов'язані з кватерніонами», де автор зауважує співвідношення між множенням кватерніона та комбінацією параметрів параметри Ейлера-Родрігеса. Це дало змогу застосувати аспекти теорії Кватерніона для подання обертань і, особливо, до інтерполяції між ними.

Ви можете прочитати документ тут: https://archive.org/details/collmathpapers01caylrich . Але в той час між кватерніонами та обертанням не було зв’язку, і Кейлі був досить здивований, виявивши, що там:

Насправді формули - це саме ті, які подані для такої трансформації М. Олінде Родрігес Ліувіль, телевізор, "Des lois géométriques qui régissent les déplacements d'un système solide [...]" (або Comb. Math. Journal, t. iii. С. 224 [6]). Цікавим питанням було б врахувати, апріорі, про появу тут цих коефіцієнтів.

Однак нічого не притаманне Кватерніонам, що не дає ніякої користі обертанню. Кватерніони не уникають карданного блокування; Параметри параметри Ейлера-Родрігеса. Дуже мало комп'ютерних програм, які виконують обертання, швидше за все реально реалізують типи кватерніона, які є першокласними складними математичними значеннями. На жаль, нерозуміння ролі кватерніонів, схоже, десь просочилося, в результаті чого чимало збентежених студентів-графіків вивчають деталі складної математики з декількома уявними константами, а потім отримують здивування, чому це вирішує проблеми з обертанням.


1

Відповідь, яку хтось може прочитати: Існують нудні проблеми з усіма уявленнями. Кватерніони менші за матриці, але множення кватерніона не є простим векторним крапковим продуктом чи таким, і фактично займає більше часу на комп'ютері, ніж крапковий добуток двох матриць 3x3. (Комп'ютери дуже добре працюють із звичайними матрицями)

Матриці, хоча, мають і інші прикри особливості. Наприклад, вони не є стабільними істотами в довгостроковій перспективі. При моделюванні обертів у тривимірному просторі зазвичай накопичуються обертання один на одного в матриці орієнтації, тобто лише одна матриця обертання, що зберігає орієнтацію опорного кадру. Цей процес протягом мільйонів доповнень призведе до того, що O-матриця буде відходити від суворої форми матриці обертання. Цього можна обійти, періодично перенастроюючи матрицю, але є умови, коли це нетривіально. А саме випадковий обертання матриці тотожності.

Ви хочете знайти вісь-кут (або кватерніонне представлення) обертання, а потім відтворити матрицю для цього. Більшість алгоритмів виробляють нульовий вектор, а потім стикаються з нульовим поділом у цьому випадку. У таких випадках загалом погана ідея намагатися уникати подібних випадків із типом рішень ", якщо 0, то ...", оскільки а) вилки повільні і б) ви все ще можете закінчити машину епсілон окрім сингулярність і закінчуються жахливими помилками.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.