Що таке кватерніон, і як вони працюють? Крім того, які переваги ви отримуєте, використовуючи три точки на двовимірній площині? Нарешті, коли вважається хорошою практикою використання кватерніонів?
Що таке кватерніон, і як вони працюють? Крім того, які переваги ви отримуєте, використовуючи три точки на двовимірній площині? Нарешті, коли вважається хорошою практикою використання кватерніонів?
Відповіді:
Математично кватерніон - це складне число з 4 вимірами. Але в розробці ігор Quaternions часто використовують для опису обертання в 3d просторі за допомогою кодування:
Зауважте, що ця інформація кодується синусами та косинусами всередині кватерніона, тому загалом не слід намагатися явно встановлювати чи читати внутрішні компоненти кватерніона (xyzw) окремо. Помилитися таким чином легко і отримати безглуздий результат. Матеріальна бібліотека кватерніона зазвичай надає функції для роботи на кватерніонах (наприклад, перетворення їх у & з кутів Ейлера або кута осі), що забезпечує математику правильною та має побічну перевагу, полегшуючи ваш код легше читати та розуміти.
Альтернативний спосіб описати обертання - описати, як далеко обертатись навколо 3 нерухомих осей 'x, y і z (він же кути Ейлера), для чого потрібні лише 3 числа замість 4 і зазвичай більш інтуїтивно зрозумілий. Однак кути ейлера піддаються проблемі під назвою фіксація каркаса : коли ви обертаєтесь на 90 ° навколо однієї осі, дві інші осі стають рівноцінними. З кватерніонами ця проблема не виникає.
Ще один спосіб виразити обертання в 3d просторі - це матриця трансформації 4x4 . Але за допомогою матриці перетворення можна не просто обертати, а й масштабувати, перекладати та перекручувати. Коли ви хочете лише обертання, матриця буде надмірною, а кватерніон набагато швидшим і простішим рішенням.
Ця проблема актуальна лише в 3d-просторі. У 2d просторі у вас є лише одна вісь обертання. Будь-яке обертання може бути виражене одним номером з плаваючою комою або одним комплексним числом, тому у вас не виникає цієї проблеми. Хоча теоретично можна виразити обертання на 2-й площині з кватерніоном, де вісь вказує на площину (або поза нею), вона зазвичай є надмірною.
Це слід додати до @ відповіді Філіпа.
Крім того, які переваги ви отримуєте, використовуючи три точки на двовимірній площині?
Вам не потрібні кватерніони, якщо все, що вас цікавить, - це обертання на площині, тобто щодо осі z. У цьому випадку все, що вам потрібно, - це кут відхилення, і ви можете використовувати той факт, що послідовні обертання навколо осі z рухаються. Таким чином, ви можете застосувати свої обертання в будь-якому бажаному порядку.
Ситуація інша, якщо ви обертаєтеся на площині, яка не є площиною XY. Це обертання еквівалентно обертанню навколо довільної осі 3D. Тепер у вас є два варіанти:
поверніть площину в 3D так, щоб вона збігалася з площиною XY, а потім позіхала і перетворювалась назад, або
подумайте про своє обертання як про тривимірне.
Другий вибір простіше кодувати. Як сказав @Philipp, кватерніони уникають фіксації каркаса (якщо уникнути проміжного перетворення RPY або перетворення осі / кута).
Нарешті, коли вважається хорошою практикою використання кватерніонів?
Всякий раз, коли є тривимірні обертання, добре використовувати кватерніони.
Наприклад: