Що таке кватерніон?


50

Що таке кватерніон, і як вони працюють? Крім того, які переваги ви отримуєте, використовуючи три точки на двовимірній площині? Нарешті, коли вважається хорошою практикою використання кватерніонів?



Історично я думаю, що спочатку з'явилися кватерніони, а пізніше крапкові та поперечні вироби отримані від кватерніонів.

2
Цю анімаційну статтю я вважав дуже інформативною: acko.net/blog/animate-your-way-to-glory-pt2/#quaternions
AShelly

Я вважаю, що кватерніони - це 3 складні числа, такі як i² = j² = k² = ijk
Vinz243

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

Відповіді:


43

Математично кватерніон - це складне число з 4 вимірами. Але в розробці ігор Quaternions часто використовують для опису обертання в 3d просторі за допомогою кодування:

  1. вісь обертання (у формі тривимірного вектора)
  2. як далеко повернути навколо цієї осі

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

Альтернативний спосіб описати обертання - описати, як далеко обертатись навколо 3 нерухомих осей 'x, y і z (він же кути Ейлера), для чого потрібні лише 3 числа замість 4 і зазвичай більш інтуїтивно зрозумілий. Однак кути ейлера піддаються проблемі під назвою фіксація каркаса : коли ви обертаєтесь на 90 ° навколо однієї осі, дві інші осі стають рівноцінними. З кватерніонами ця проблема не виникає.

Ще один спосіб виразити обертання в 3d просторі - це матриця трансформації 4x4 . Але за допомогою матриці перетворення можна не просто обертати, а й масштабувати, перекладати та перекручувати. Коли ви хочете лише обертання, матриця буде надмірною, а кватерніон набагато швидшим і простішим рішенням.

Ця проблема актуальна лише в 3d-просторі. У 2d просторі у вас є лише одна вісь обертання. Будь-яке обертання може бути виражене одним номером з плаваючою комою або одним комплексним числом, тому у вас не виникає цієї проблеми. Хоча теоретично можна виразити обертання на 2-й площині з кватерніоном, де вісь вказує на площину (або поза нею), вона зазвичай є надмірною.


6
Фіксація каркаса не є проблемою для кватерніонів, якщо ви починаєте з кватерніонів і закінчуєте кватерніонами, фіксатор каркаса встановлюється, коли у вас є крок, який перетворюється на кути ейлера або назад.
храповик урод

2
Кватерніони - це не вісь + кут, вони є 3 складними числами і шкалою.
транзистор09

11
@ tranistor09 ти вважаєш, що ти обоє прав? 3-компонентну уявну частину одиничного кватерніона можна інтерпретувати як одиничний вектор вздовж осі обертання, що масштабується на синус половини кута повороту. Справжня частина одиничного кватерніона - це косинус половини кута повороту. Отже, ви маєте рацію, що це не зовсім формат кутової осі, але це правда, що компоненти кватерніона можна інтерпретувати як вісь і (нелінійну) міру того, як далеко обернути цю вісь.
DMGregory

2
Ви також можете згадати, яку перевагу мають кватерніони перед матрицею обертання: вони швидше поєднуються. При поєднанні обертів для множення двох кватерніонів потрібно менше операцій, ніж множення матриць.
Відновіть Моніку

3
Власне, в 2D просторі складні числа є точним аналогом. Помножте 2D крапку на складне число, і ви її повернули - насправді це точно так само, як звичайне обертання sin / cos (що повинно бути очевидним, якщо ви досить добре розумієте складні числа). Це можна трохи використати, але, врешті-решт, 2D-графіка не настільки інтенсивна на сьогоднішній день, тому вона не дає вам багато вдосконалення, якщо вам справді не зручно використовувати складні номери (що, як правило, більшість людей не є - про що свідчить надзвичайно бідний код на основі кватерніона: D).
Луань

13

Це слід додати до @ відповіді Філіпа.

Крім того, які переваги ви отримуєте, використовуючи три точки на двовимірній площині?

Вам не потрібні кватерніони, якщо все, що вас цікавить, - це обертання на площині, тобто щодо осі z. У цьому випадку все, що вам потрібно, - це кут відхилення, і ви можете використовувати той факт, що послідовні обертання навколо осі z рухаються. Таким чином, ви можете застосувати свої обертання в будь-якому бажаному порядку.

Ситуація інша, якщо ви обертаєтеся на площині, яка не є площиною XY. Це обертання еквівалентно обертанню навколо довільної осі 3D. Тепер у вас є два варіанти:

  • поверніть площину в 3D так, щоб вона збігалася з площиною XY, а потім позіхала і перетворювалась назад, або

  • подумайте про своє обертання як про тривимірне.

Другий вибір простіше кодувати. Як сказав @Philipp, кватерніони уникають фіксації каркаса (якщо уникнути проміжного перетворення RPY або перетворення осі / кута).

Нарешті, коли вважається хорошою практикою використання кватерніонів?

Всякий раз, коли є тривимірні обертання, добре використовувати кватерніони.

Наприклад:

  • У Qt . Квати полегшують інтерполяцію між обертаннями, як у функції slerp .

  • ROS використовує їх для перетворення поз роботи.

  • У двигуні динаміки Bullet

  • Про дуже складний додаток дивіться тут щодо їх використання в класичній 3D-механіці.


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

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