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.

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.

Посібники

Властивості

float

w

1.0

float

x

0.0

float

y

0.0

float

z

0.0

Конструктори

Quaternion

Quaternion()

Quaternion

Quaternion(from: Quaternion)

Quaternion

Quaternion(arc_from: Vector3, arc_to: Vector3)

Quaternion

Quaternion(axis: Vector3, angle: float)

Quaternion

Quaternion(from: Basis)

Quaternion

Quaternion(x: float, y: float, z: float, w: float)

Методи

float

angle_to(to: Quaternion) const

float

dot(with: Quaternion) const

Quaternion

exp() const

Quaternion

from_euler(euler: Vector3) static

float

get_angle() const

Vector3

get_axis() const

Vector3

get_euler(order: int = 2) const

Quaternion

inverse() const

bool

is_equal_approx(to: Quaternion) const

bool

is_finite() const

bool

is_normalized() const

float

length() const

float

length_squared() const

Quaternion

log() const

Quaternion

normalized() const

Quaternion

slerp(to: Quaternion, weight: float) const

Quaternion

slerpni(to: Quaternion, weight: float) const

Quaternion

spherical_cubic_interpolate(b: Quaternion, pre_a: Quaternion, post_b: Quaternion, weight: float) const

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

Оператори

bool

operator !=(right: Quaternion)

Quaternion

operator *(right: Quaternion)

Vector3

operator *(right: Vector3)

Quaternion

operator *(right: float)

Quaternion

operator *(right: int)

Quaternion

operator +(right: Quaternion)

Quaternion

operator -(right: Quaternion)

Quaternion

operator /(right: float)

Quaternion

operator /(right: int)

bool

operator ==(right: Quaternion)

float

operator [](index: int)

Quaternion

operator unary+()

Quaternion

operator unary-()


Константи

IDENTITY = Quaternion(0, 0, 0, 1) 🔗

Кватерніон одиниці, що представляє відсутність обертання. Він має таке ж обертання, як і Basis.IDENTITY.

Якщо Vector3 обертається (множиться) на цей кватерніон, він не змінюється.

Примітка: У GDScript ця константа еквівалентна створенню Quaternion без будь-яких аргументів. Її можна використовувати для покращення коду та для узгодженості з C#.


Описи властивостей

float w = 1.0 🔗

W компонент кватерніона. Це "реальна" частина.

Примітка: Компоненти кватерніона зазвичай не треба змінювати напряму.


float x = 0.0 🔗

X компонент картернатури. Це значення вздовж осі "імагінар" i.

Примітка: Компоненти Quaternion зазвичай не повинні маніпулювати безпосередньо.


float y = 0.0 🔗

Y компонент картернатури. Це значення вздовж осі "імаляр" j.

Примітка: Компоненти Quaternion зазвичай не повинні маніпулювати безпосередньо.


float z = 0.0 🔗

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).


float get_angle() const 🔗

Повертає кут повороту, представлений цим кватерном.

Примітка: Вода повинна бути нормалізована.


Vector3 get_axis() const 🔗

Повертаємо вісь обертання, представлене цим кватерном.


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() для кожного компонента.


bool is_finite() const 🔗

Повертає true, якщо це картерніон скінчив, викликаючи @GlobalScope.is_finite() на кожному компоненті.


bool is_normalized() const 🔗

Повернення true, якщо це нормалізовано. Дивись також normalized().


float length() const 🔗

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


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. Це результат операції в квертику, що відображає однакове обертання.