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.

Посібники

Властивості

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 🔗

Vector3 ` Кути евлера <https://en.wikipedia.org/wiki/Euler_angles>`__, в радіях. Цей метод завжди використовує конвенцію YXZ (@GlobalScope.EULER_ORDER_YXZ).


float get_angle() const 🔗

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

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


Vector3 get_axis() const 🔗

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


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


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