Quaternion — Aspose.3D FOSS for Java

Example

Quaternion 表示用于旋转的单位四元数。它避免了万向锁,并在姿态之间提供平滑插值。The Transform class 将旋转存储为 a 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.x向量部分的 X 分量
ydoubleq.y向量部分的 Y 分量
zdoubleq.z向量部分的 Z 分量

计算属性

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

另见

 中文