Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Quaternion
Призначений для представлення 3D поворотів.
Опис
Вбудований тип Variant Quaternion — це 4-вимірна структура даних, яка представляє обертання у вигляді кватерніона за конвенцією Гамільтона. На відміну від типу 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.
Примітка: У булевому контексті кватерніон буде обчислюватися як false, якщо він дорівнює IDENTITY. В іншому випадку кватерніон завжди обчислюватиметься як true.
Примітка
Існують значні відмінності при використанні цього 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 🔗
Створює новий об’єкт Quaternion на основі заданого вектора Vector3 з кутами Ейлера, вираженими в радіанах. У Godot кути Ейлера завжди використовують внутрішній порядок. Цей метод завжди використовує внутрішню конвенцію YXZ (@GlobalScope.EULER_ORDER_YXZ).
Повертає кут повороту, представлений цим кватерном.
Примітка: Вода повинна бути нормалізована.
Повертаємо вісь обертання, представлене цим кватерном.
Vector3 get_euler(order: int = 2) const 🔗
Повертає обертання цього кватерніона у вигляді масиву Vector3 з кутами Ейлера у радіанах.
Порядок кожного послідовного обертання можна змінити за допомогою order (див. константи EulerOrder). У Godot кути Ейлера завжди використовують внутрішній порядок. За замовчуванням використовується внутрішня конвенція YXZ (@GlobalScope.EULER_ORDER_YXZ): оскільки ми розкладаємо, спочатку обчислюється локальний Z (поворот), потім локальний X (нахил) і, нарешті, локальний Y (відхилення). При використанні протилежного методу 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. Це результат операції в квертику, що відображає однакове обертання.