Quaternion
Единичный кватернион, используемый для представления трехмерных вращений.
Описание
Встроенный тип Variant Quaternion — это 4D-структура данных, которая представляет вращение в виде кватерниона соглашения Гамильтона. По сравнению с типом Basis, который может хранить как вращение, так и масштаб, кватернионы могут хранить только вращение.
Quaternion состоит из 4 компонентов с плавающей точкой: w, x, y и z. Эти компоненты очень компактны в памяти, и из-за этого некоторые операции более эффективны и менее склонны вызывать ошибки с плавающей точкой. Такие методы, как get_angle(), get_axis() и slerp(), быстрее своих аналогов из Basis.
Для отличного введения в кватернионы посмотрите это видео от 3Blue1Brown. Вам не нужно знать математику, лежащую в основе кватернионов, так как Godot предоставляет несколько вспомогательных методов, которые справляются с этим за вас. К ним относятся slerp() и spheric_cubic_interpolate(), а также оператор *.
Примечание: Кватернионы должны быть нормализованы перед использованием для вращения (см. normalized()).
Примечание: Аналогично Vector2 и Vector3, компоненты кватерниона по умолчанию используют 32-битную точность, в отличие от float, который всегда 64-битный. Если требуется двойная точность, скомпилируйте движок с опцией precision=double.
Примечание
Существуют заметные различия при использовании данного API с C#. Подробнее см. API различия C# и GDScript.
Обучающие материалы
Свойства
|
||
|
||
|
||
|
Конструкторы
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.
Примечание: Компоненты кватерниона обычно не следует изменять напрямую.
Компонент Y кватерниона. Это значение вдоль «мнимой» оси j.
Примечание: Компоненты кватерниона обычно не следует изменять напрямую.
Z-компонента кватерниона. Это значение вдоль «мнимой» оси k.
Примечание: Компоненты кватерниона обычно не следует изменять напрямую.
Описания конструктора
Quaternion Quaternion() 🔗
Создает Quaternion, идентичный IDENTITY.
Примечание: В C# это создает Quaternion, все компоненты которого установлены в 0.0.
Quaternion Quaternion(from: Quaternion)
Создает Quaternion как копию заданного Quaternion.
Quaternion Quaternion(arc_from: Vector3, arc_to: Vector3)
Создает Quaternion, представляющий кратчайшую дугу между arc_from и arc_to. Их можно представить как две точки, пересекающие поверхность сферы, с радиусом 1.0.
Quaternion Quaternion(axis: Vector3, angle: float)
Создает Quaternion, представляющий вращение вокруг axis на заданный angle в радианах. Ось должна быть нормализованным вектором.
Quaternion Quaternion(from: Basis)
Создает Quaternion из заданного вращения Basis.
Этот конструктор быстрее, чем Basis.get_rotation_quaternion(), но заданный базис должен быть ортонормализован (см. Basis.orthonormalized()). В противном случае конструктор завершается неудачей и возвращает IDENTITY.
Quaternion Quaternion(x: float, y: float, z: float, w: float)
Создает Quaternion, определенный заданными значениями.
Примечание: Только нормализованные кватернионы представляют вращение; если эти значения не нормализованы, новый Quaternion не будет допустимым для вращения.
Описания метода
float angle_to(to: Quaternion) const 🔗
Возвращает угол между этим кватернионом и to. Это величина угла, на который вам нужно повернуть, чтобы перейти от одного к другому.
Примечание: Величина ошибки с плавающей точкой для этого метода аномально высока, поэтому такие методы, как is_zero_approx, не будут работать надежно.
float dot(with: Quaternion) const 🔗
Возвращает скалярное произведение между этим кватернионом и with.
Это эквивалентно (quat.x * with.x) + (quat.y * with.y) + (quat.z * with.z) + (quat.w * with.w).
Quaternion exp() const 🔗
Возвращает экспоненту этого кватерниона. Ось вращения результата — нормализованная ось вращения этого кватерниона, угол результата — длина векторной части этого кватерниона.
Quaternion from_euler(euler: Vector3) static 🔗
Создает новый Quaternion из заданного Vector3 углов Эйлера, в радианах. Этот метод всегда использует соглашение YXZ (@GlobalScope.EULER_ORDER_YXZ).
Возвращает угол поворота, представленный этим кватернионом.
Примечание: Кватернион должен быть нормализован.
Возвращает ось вращения, представленную этим кватернионом.
Vector3 get_euler(order: int = 2) const 🔗
Возвращает вращение этого кватерниона как Vector3 углов Эйлера в радианах.
Порядок каждого последовательного вращения можно изменить с помощью order (см. константы EulerOrder). По умолчанию используется соглашение YXZ (@GlobalScope.EULER_ORDER_YXZ): сначала вычисляется Z (roll), затем X (pitch) и, наконец, Y (yaw). При использовании противоположного метода 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 🔗
Возвращает длину этого кватерниона, возведенную в квадрат.
Примечание: Этот метод быстрее, чем length(), поэтому предпочитайте его, если вам нужно только сравнить длины кватернионов.
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 на заданную величину weight.
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.
Он может выполнять более плавную интерполяцию, чем methodspheric_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. Эта операция приводит к кватерниону, который представляет то же вращение.