Quaternion — Aspose.3D FOSS for Python API Reference

Quaternion mewakili quaternion unit yang digunakan untuk mengekod putaran 3D. Berbeza dengan sudut Euler, quaternion mengelakkan gimbal lock dan menyelaras dengan lancar. The Transform.rotation ciri pada nod adegan menyimpan satu Quaternion.

Komponen disimpan sebagai (w, x, y, z) di mana w adalah bahagian skalar dan (x, y, z) bentuk bahagian vektor.

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)

: aspose.threed.utilities

from aspose.threed.utilities import Quaternion

Quaternion()Quaternion identiti (w=1, x=0, y=0, z=0)
Quaternion(w, x, y, z)Pembina komponen eksplisit

wfloatBahagian skalar (real)
xfloatKomponen x vektor
yfloatKomponen y vektor
zfloatKomponen z vektor
lengthfloatMagnitud kuaternion

Kaedah Kilang Statik

Jenis Pulangan
Quaternion.from_euler_angle(pitch, yaw, roll)QuaternionMembina daripada sudut Euler dalam radian (pitch=X, yaw=Y, roll=Z). Juga menerima a Vector3 sebagai argumen pertama
Quaternion.from_angle_axis(angle, axis)QuaternionMembina daripada sudut (radian) dan a Vector3 paksi
Quaternion.from_rotation(orig, dest)QuaternionPutaran busur terpendek dari arah orig ke arah dest
Quaternion.interpolate(t, from_q, to_q)QuaternionInterpolasi SLERP; t dalam [0, 1]
Quaternion.slerp(t, v1, v2)QuaternionAlias untuk interpolate

Kaedah Instans

Jenis Pulangan
normalize()QuaternionMengembalikan salinan bersaiz unit
conjugate()QuaternionMengembalikan konjugat (w, -x, -y, -z)
inverse()QuaternionMengembalikan songsang gandaan; menimbulkan ValueError jika panjang sifar
dot(q)floatProduk titik dengan quaternion lain
concat(rhs)QuaternionProduk Hamilton (komposisi dua putaran)
euler_angles()Vector3Mengekstrak sudut Euler (rad) sebagai Vector3(roll, pitch, yaw)
to_matrix(translation=None)Matrix4Menukarkan kepada matriks putaran 4×4; secara pilihan menyematkan terjemahan Vector3
to_angle_axis(angle, axis)NoneMendecompos menjadi sudut (rad) dan paksi; hasil ditulis ke dalam senarai satu unsur angle[0] dan axis[0]

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

Lihat Juga

 Bahasa Melayu