Quaternion — Aspose.3D FOSS for Java

Example

Quaternion представляет единичный кватернион, используемый для вращения. Он избегает блокировки кардана и обеспечивает плавную интерполяцию между ориентациями. The Transform класс хранит вращение как Quaternion доступный через getRotation() / setRotation().

Example: com.aspose.threed

import com.aspose.threed.*;

Example

ExampleExample
Quaternion()Единичный кватернион (1, 0, 0, 0)
Quaternion(double w, double x, double y, double z)Создаётся из четырёх компонентов

Публичные поля

Quaternion использует публичные поля для доступа к компонентам (не методы getter/setter):

ExampleExampleExampleExample
wdoubleq.wСкалярная (вещественная) часть
xdoubleq.xX‑компонента векторной части
ydoubleq.yY‑компонента векторной части
zdoubleq.zZ‑компонента векторной части

Вычисляемые свойства

ExampleExampleExampleExample
lengthdoublegetLength()Модуль кватерниона (должен быть 1.0 для единичного кватерниона)

Статические поля

ExampleExampleExample
IDENTITYQuaternionЕдиничный кватернион (1, 0, 0, 0) – без вращения

Статические методы

ExampleТип возвращаемого значенияExample
Quaternion.fromEuler(double x, double y, double z)QuaternionСоздаёт кватернион из углов Эйлера в градусах
Quaternion.fromAngleAxis(double angle, Vector3 axis)QuaternionСоздаёт кватернион из угла (в радианах) и оси вращения

Методы экземпляра

ExampleТип возвращаемого значенияExample
normalize()QuaternionВозвращает копию единичной длины
conjugate()QuaternionВозвращает сопряжённое (с отрицательной векторной частью)
inverse()QuaternionВозвращает мультипликативную обратную
toEulerAngles()Vector3Преобразует в углы Эйлера в градусах
toMatrix()Matrix4Преобразует в 4x4 матрицу вращения

Example

import com.aspose.threed.Scene;
import com.aspose.threed.Node;
import com.aspose.threed.*;

Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("rotated");

// Create from Euler angles (degrees)
Quaternion q = Quaternion.fromEuler(0.0, 90.0, 0.0);
node.getTransform().setRotation(q);

// Read back as Euler
Vector3 euler = node.getTransform().getEulerAngles();
System.out.println(euler);   // approximately (0, 90, 0)

// Create from angle-axis
Quaternion q2 = Quaternion.fromAngleAxis(Math.toRadians(45), Vector3.UNIT_Y);
node.getTransform().setRotation(q2);

// Combine rotations via multiply
Quaternion start = Quaternion.IDENTITY;
Quaternion end = Quaternion.fromEuler(0.0, 180.0, 0.0);
Quaternion combined = Quaternion.multiply(start, end);

См. также

 Русский