Quaternion
Призначений для представлення 3D поворотів.
Опис
Вбудований тип Variant Quaternion — це 4D структура даних, яка представляє обертання у формі кватерніона конвенції Гамільтона кватерніона Гамільтона. Порівняно з типом Basis, який може зберігати як обертання, так і масштаб, кватерніони можуть зберігати тільки обертання.
Quaternion складається з 4 компонентів з плаваючою комою: w, x, y та z. Ці компоненти дуже компактні в пам'яті, і завдяки цьому деякі операції є ефективнішими та менш схильними до помилок з плаваючою комою. Такі методи, як get_angle(), get_axis() та slerp(), швидші, ніж їхні аналоги Basis.
Для чудового знайомства з кватерніонами перегляньте це відео від 3Blue1Brown. Вам не потрібно знати математику, що лежить в основі кватерніонів, оскільки Godot надає кілька допоміжних методів, які обробляють її за вас. До них належать slerp() та spherical_cubic_interpolate(), а також оператор
*.
Примітка: Кватерніони мають бути нормалізовані перед використанням для обертання (див. normalized()).
Примітка: Подібно до Vector2 та Vector3, компоненти кватерніона за замовчуванням використовують 32-бітну точність, на відміну від float, який завжди має 64-бітну точність. Якщо потрібна подвійна точність, скомпілюйте рушій з опцією precision=double.
Примітка
Існують значні відмінності при використанні цього API із С#. Більше інформації: ref:doc_c_sharp_differences.
Посібники
Властивості
|
||
|
||
|
||
|
Конструктори
Quaternion(from: Quaternion) |
|
Quaternion(arc_from: Vector3, arc_to: Vector3) |
|
Quaternion(axis: Vector3, angle: float) |
|
Quaternion(from: Basis) |
|
Quaternion(x: float, y: float, z: float, w: float) |
Методи
angle_to(to: Quaternion) const |
|
dot(with: Quaternion) const |
|
exp() const |
|
from_euler(euler: Vector3) static |
|
get_angle() const |
|
get_axis() const |
|
inverse() const |
|
is_equal_approx(to: Quaternion) const |
|
is_finite() const |
|
is_normalized() const |
|
length() const |
|
length_squared() const |
|
log() const |
|
normalized() const |
|
slerp(to: Quaternion, weight: float) const |
|
slerpni(to: Quaternion, weight: float) const |
|
spherical_cubic_interpolate(b: Quaternion, pre_a: Quaternion, post_b: Quaternion, weight: float) const |
|
spherical_cubic_interpolate_in_time(b: Quaternion, pre_a: Quaternion, post_b: Quaternion, weight: float, b_t: float, pre_a_t: float, post_b_t: float) const |
Оператори
operator !=(right: Quaternion) |
|
operator *(right: Quaternion) |
|
operator *(right: Vector3) |
|
operator *(right: float) |
|
operator *(right: int) |
|
operator +(right: Quaternion) |
|
operator -(right: Quaternion) |
|
operator /(right: float) |
|
operator /(right: int) |
|
operator ==(right: Quaternion) |
|
operator [](index: int) |
|
Константи
IDENTITY = Quaternion(0, 0, 0, 1) 🔗
Кватерніон одиниці, що представляє відсутність обертання. Він має таке ж обертання, як і Basis.IDENTITY.
Якщо Vector3 обертається (множиться) на цей кватерніон, він не змінюється.
Примітка: У GDScript ця константа еквівалентна створенню Quaternion без будь-яких аргументів. Її можна використовувати для покращення коду та для узгодженості з C#.
Описи властивостей
W компонент кватерніона. Це "реальна" частина.
Примітка: Компоненти кватерніона зазвичай не треба змінювати напряму.
X компонент картернатури. Це значення вздовж осі "імагінар" i.
Примітка: Компоненти Quaternion зазвичай не повинні маніпулювати безпосередньо.
Y компонент картернатури. Це значення вздовж осі "імаляр" j.
Примітка: Компоненти Quaternion зазвичай не повинні маніпулювати безпосередньо.
Z компонент картернію. Це значення вздовж осі "імаляр" k.
Примітка: Компоненти Quaternion зазвичай не повинні маніпулювати безпосередньо.
Описи конструкторів
Quaternion Quaternion() 🔗
Створює Quaternion, ідентичний IDENTITY.
Примітка: У C# це створює кватерніон з усіма його компонентами, встановленими на 0.0.
Quaternion Quaternion(from: Quaternion)
Constructs a Quaternion як копія даної Quaternion.
Quaternion Quaternion(arc_from: Vector3, arc_to: Vector3)
Constructs Quaternion, що представляє найбільшу дугу між arc_from і arc_to. Це можна уявити як дві точки, що перетинають поверхню сфери, з радіусом 1.0.
Quaternion Quaternion(axis: Vector3, angle: float)
Constructs a Quaternion, що представляє обертання навколо осі заданим кут, в радианах. Ось повинна бути нормалізований вектор.
Quaternion Quaternion(from: Basis)
Constructs a Quaternion з даної обертання Basis.
Цей конструктор швидше, ніж Basis.get_rotation_quaternion(), але надана основа повинна бути orthonormalized (див. Basis.orthonormalized()). В іншому випадку конструктор не вдається і повертає константність.
Quaternion Quaternion(x: float, y: float, z: float, w: float)
Constructs Quaternion, визначений заданими значеннями.
Примітка: Тільки нормалізовані кватерніони представляють обертання; якщо ці значення не нормалізуються, новий Quaternion не буде дійсним обертанням.
Описи методів
float angle_to(to: Quaternion) const 🔗
Повертає кут між цим картероном і паром до. Це величина кута, вам потрібно буде обертати, щоб отримати від одного до іншого.
Note: Температурна похибка точки плавлення для цього методу є аномально високими, тому методи, такі як is_zero_приблизно не буде працювати надійно.
float dot(with: Quaternion) const 🔗
Повертає продукт точки між цим кварталом та паром.
Це еквівалентно (quat.x * з.x) + (quat.y * з.y) + (quat.z * з.z) + (quat.w * з.w).
Quaternion exp() const 🔗
Повертає доцільність цього кватернату. Вісь обертання результату - нормалізована вісь обертання цієї кватернції, кут результату - довжина векторної частини цієї кватернції.
Quaternion from_euler(euler: Vector3) static 🔗
Vector3 ` Кути евлера <https://en.wikipedia.org/wiki/Euler_angles>`__, в радіях. Цей метод завжди використовує конвенцію YXZ (@GlobalScope.EULER_ORDER_YXZ).
Повертає кут повороту, представлений цим кватерном.
Примітка: Вода повинна бути нормалізована.
Повертаємо вісь обертання, представлене цим кватерном.
Vector3 get_euler(order: int = 2) const 🔗
Повертає обертання цього кватерніона як Vector3 кутів Ейлера [url=https://en.wikipedia.org/wiki/Euler_angles]у радіанах.
Порядок кожного послідовного обертання можна змінити за допомогою [param order] (див. константи [enum EulerOrder]). За замовчуванням використовується конвенція YXZ ([constant EULER_ORDER_YXZ]): спочатку обчислюється Z (крен), потім X (тангаж) і, нарешті, Y (рискання). При використанні протилежного методу [method from_euler] цей порядок змінюється на протилежний.
Quaternion inverse() const 🔗
Повертає несвоєчасну версію цієї кватернції, що інвертує ознаку кожного компонента, крім w.
bool is_equal_approx(to: Quaternion) const 🔗
Повертає true, якщо цей кватерніон і to приблизно рівні, шляхом виклику @GlobalScope.is_equal_approx() для кожного компонента.
Повертає true, якщо це картерніон скінчив, викликаючи @GlobalScope.is_finite() на кожному компоненті.
Повернення true, якщо це нормалізовано. Дивись також normalized().
Повертаємо цю довжину картерніонів, також називається величиною.
float length_squared() const 🔗
Повертаємо цю довжину кватерна, квадрат.
Примітка: Цей метод швидше, ніж довжини(), тому воліє його, якщо потрібно тільки порівняти довжини кватернції.
Quaternion log() const 🔗
Повертає логарифм цього кватерніона. Множить вісь обертання цього кватерніона на його кут повороту та зберігає результат у векторній частині повернутого кватерніона (x, y та z). Дійсна частина повернутого кватерніона (w) завжди дорівнює 0.0.
Quaternion normalized() const 🔗
Повертає копію цього кватерніона, нормалізовану таким чином, що її довжина дорівнює 1.0. Див. також is_normalized().
Quaternion slerp(to: Quaternion, weight: float) const 🔗
Виконує сферично-лінійну інтерполяцію з кватерніоном to, маючи вагу weight, та повертає результат. Як цей кватерніон, так і to мають бути нормалізовані.
Quaternion slerpni(to: Quaternion, weight: float) const 🔗
Виконує сферично-лінійну інтерполяцію з кватерніоном to, маючи значення weight, та повертає результат. На відміну від методу slerp(), цей метод не перевіряє, чи шлях обертання менший за 90 градусів. Як цей кватерніон, так і to мають бути нормалізовані.
Quaternion spherical_cubic_interpolate(b: Quaternion, pre_a: Quaternion, post_b: Quaternion, weight: float) const 🔗
Виконує сферичне переполування кубічних між картерніями pre_a, цей вектор, b, а post_b, за вказаною кількістю вага.
Quaternion spherical_cubic_interpolate_in_time(b: Quaternion, pre_a: Quaternion, post_b: Quaternion, weight: float, b_t: float, pre_a_t: float, post_b_t: float) const 🔗
Виконує сферичне переполування кубічних між картерніями pre_a, цей вектор, b, а post_b, за вказаною кількістю weight.
Він може виконувати плавлення інтерполяції, ніж spherical_cubic_interpolate() за цінностями часу..
Описи операторів
bool operator !=(right: Quaternion) 🔗
Повертає true, якщо компоненти обох кватерніонів не є абсолютно рівними.
Примітка: Через помилки точності чисел з плаваючою комою, розгляньте можливість використання is_equal_approx(), що є надійнішим.
Quaternion operator *(right: Quaternion) 🔗
Складає (множить) два кватерніони. Це обертає кватерніон right (дочірній елемент) на цей кватерніон (батьківський елемент).
Vector3 operator *(right: Vector3) 🔗
Обертає (множить) вектор right на цей кватерніон, повертаючи Vector3.
Quaternion operator *(right: float) 🔗
Багатомовність кожного компонента Quaternion за правою float значення.
Ця операція не має значення самостійно, але її можна використовувати в складі більшого виразу.
Quaternion operator *(right: int) 🔗
Багатомовність кожного компонента Quaternion за правою int значення.
Ця операція не має значення самостійно, але її можна використовувати в складі більшого виразу.
Quaternion operator +(right: Quaternion) 🔗
Додає кожному компоненту зліва Quaternion праворуч Quaternion.
Ця операція не має значення на власній, але її можна використовувати в складі більшого виразу, наприклад, приблизуючи проміжне обертання між двома сусідніми поворотами.
Quaternion operator -(right: Quaternion) 🔗
Відстеження кожного компонента зліва Quaternion праворуч Quaternion.
Ця операція не має значення самостійно, але її можна використовувати в складі більшого виразу.
Quaternion operator /(right: float) 🔗
Дивиди кожного компонента Quaternion праворуч float значення.
Ця операція не має значення самостійно, але її можна використовувати в складі більшого виразу.
Quaternion operator /(right: int) 🔗
Дивиди кожного компонента Quaternion праворуч int значення.
Ця операція не має значення самостійно, але її можна використовувати в складі більшого виразу.
bool operator ==(right: Quaternion) 🔗
Повертаємо true, якщо компоненти обох кватерій рівно рівні.
Примітка: У зв'язку з похибками точності точки, розглянути використання is_equal_approx() замість того, що є більш надійним.
float operator [](index: int) 🔗
Доступ до кожного компонента цього кватерніона за його індексом.
Індекс 0 такий самий, як x, індекс 1 такий самий, як y, індекс 2 такий самий, як z, а індекс 3 такий самий, як w.
Quaternion operator unary+() 🔗
Повертає однакову вартість, якщо + не було. `` +`` нічого не робить, але іноді це може зробити ваш код більш читабельним.
Quaternion operator unary-() 🔗
Повернення негативного значення Quaternion. Це так само, як і множення всіх компонентів -1. Це результат операції в квертику, що відображає однакове обертання.