Quaternion

Methods

Quaternion 表示一个用于编码 3D 旋转的单位四元数。与欧拉角不同,四元数避免了万向锁并且能够平滑插值。该 Transform.rotation 场景节点上的属性存储一个 Quaternion.

组件被存储为 (w, x, y, z) 其中 w 是标量部分,且 (x, y, z) 构成向量部分。.

from aspose.threed.utilities import Quaternion
import math

# Identity quaternion (no rotation)
q = Quaternion()   # w=1, x=0, y=0, z=0

# Rotation of 90 degrees around the Y axis
q = Quaternion.from_euler_angle(0.0, math.radians(90), 0.0)

Methods: aspose.threed.utilities

from aspose.threed.utilities import Quaternion

Methods

MethodsMethods
Quaternion()单位四元数 (w=1, x=0, y=0, z=0)
Quaternion(w, x, y, z)显式分量构造函数

Methods

MethodsMethodsMethods
wfloat标量(实部)
xfloat向量 x 分量
yfloat向量 y 分量
zfloat向量 z 分量
lengthfloat四元数的模

静态工厂方法

Methods返回类型Methods
Quaternion.from_euler_angle(pitch, yaw, roll)Quaternion从弧度制的欧拉角构造(俯仰=X,偏航=Y,滚转=Z)。也接受一个 Vector3 作为第一个参数
Quaternion.from_angle_axis(angle, axis)Quaternion从角度(弧度)和一个 Vector3
Quaternion.from_rotation(orig, dest)Quaternion从方向的最短弧旋转 orig 到方向 dest
Quaternion.interpolate(t, from_q, to_q)QuaternionSLERP 插值;; t[0, 1]
Quaternion.slerp(t, v1, v2)Quaternion别名为 interpolate

实例方法

Methods返回类型Methods
normalize()Quaternion返回一个单位长度的副本
conjugate()Quaternion返回共轭 (w, -x, -y, -z)
inverse()Quaternion返回乘法逆元;抛出 ValueError 如果长度为零
dot(q)float与另一个四元数的点积
concat(rhs)QuaternionHamilton乘积(两个旋转的组合)
euler_angles()Vector3提取欧拉角(弧度)为 Vector3(roll, pitch, yaw)
to_matrix(translation=None)Matrix4转换为 4×4 旋转矩阵;可选地嵌入平移 Vector3
to_angle_axis(angle, axis)None分解为角度(弧度)和轴;结果写入单元素列表 angle[0]axis[0]

Methods

from aspose.threed import Scene
from aspose.threed.utilities import Quaternion, Vector3
import math

scene = Scene()
node = scene.root_node.create_child_node("rotated_box")

# Rotate 45 degrees around the Y axis
angle = math.radians(45)
q = Quaternion.from_euler_angle(0.0, angle, 0.0)
node.transform.rotation = q

# SLERP between two rotations
q_start = Quaternion.from_euler_angle(0, 0, 0)
q_end   = Quaternion.from_euler_angle(0, math.pi, 0)
q_mid   = Quaternion.slerp(0.5, q_start, q_end)

# Convert to matrix (useful for manual transforms)
mat = q.to_matrix()

# Extract Euler angles back
angles = q.euler_angles()   # Vector3(roll, pitch, yaw)
print(math.degrees(angles.y))   # ~45.0

另请参阅

 中文