Quaternion
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)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 |
| ————————- | ————————- | ————————- |
| w | float | Bahagian skalar (real) |
| x | float | Komponen x vektor |
| y | float | Komponen y vektor |
| z | float | Komponen z vektor |
| length | float | Magnitud kuaternion |
Kaedah Kilang Statik
| ———————————————– | ————– | ——————————————————————————————————————— |
| Quaternion.from_euler_angle(pitch, yaw, roll) | Quaternion | Membina daripada sudut Euler dalam radian (pitch=X, yaw=Y, roll=Z). Juga menerima a Vector3 sebagai argumen pertama |
| Quaternion.from_angle_axis(angle, axis) | Quaternion | Membina daripada sudut (radian) dan a Vector3 paksi |
| Quaternion.from_rotation(orig, dest) | Quaternion | Putaran busur terpendek dari arah orig ke arah dest |
| Quaternion.interpolate(t, from_q, to_q) | Quaternion | Interpolasi SLERP; t dalam [0, 1] |
| Quaternion.slerp(t, v1, v2) | Quaternion | Alias untuk interpolate |
Kaedah Instans
| —————————– | ————– | ————————————————————————————————————- |
| normalize() | Quaternion | Mengembalikan salinan bersaiz unit |
| conjugate() | Quaternion | Mengembalikan konjugat (w, -x, -y, -z) |
| inverse() | Quaternion | Mengembalikan songsang gandaan; menimbulkan ValueError jika panjang sifar |
| dot(q) | float | Produk titik dengan quaternion lain |
| concat(rhs) | Quaternion | Produk Hamilton (komposisi dua putaran) |
| euler_angles() | Vector3 | Mengekstrak sudut Euler (rad) sebagai Vector3(roll, pitch, yaw) |
| to_matrix(translation=None) | Matrix4 | Menukarkan kepada matriks putaran 4×4; secara pilihan menyematkan terjemahan Vector3 |
| to_angle_axis(angle, axis) | None | Mendecompos 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