Quaternion
Quaternion predstavlja jedinični kvaternion koji se koristi za kodiranje 3D rotacija. Za razliku od Eulerovih kutova, kvaternioni izbjegavaju gimbal lock i interpoliraju glatko. The Transform.rotation svojstvo na čvoru scene pohranjuje a Quaternion.
Komponente se pohranjuju kao (w, x, y, z) gdje w je skalarni dio i (x, y, z) čine vektorski dio.
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() | Jedinični kvaternion (w=1, x=0, y=0, z=0) |
| Quaternion(w, x, y, z) | Izričiti konstruktor komponenti |
| ————————- | ————————- | ————————- |
| w | float | Skalarni (realni) dio |
| x | float | Vektorska x-komponenta |
| y | float | Vektorska y-komponenta |
| z | float | Vektorska z-komponenta |
| length | float | Magnituda kvaterniona |
Statičke metode tvorničkih funkcija
| ———————————————– | ———— | —————————————————————————————————————- |
| Quaternion.from_euler_angle(pitch, yaw, roll) | Quaternion | Kreira iz Eulerovih kutova u radijanima (pitch=X, yaw=Y, roll=Z). Također prihvaća a Vector3 kao prvi argument |
| Quaternion.from_angle_axis(angle, axis) | Quaternion | Konstrukcije iz kuta (radijana) i a Vector3 os |
| Quaternion.from_rotation(orig, dest) | Quaternion | Rotacija najkraćeg luka od smjera orig do smjera dest |
| Quaternion.interpolate(t, from_q, to_q) | Quaternion | SLERP interpolacija; t u [0, 1] |
| Quaternion.slerp(t, v1, v2) | Quaternion | Alias za interpolate |
Metode instance
| —————————– | ———— | —————————————————————————————————— |
| normalize() | Quaternion | Vraća kopiju jedinične duljine |
| conjugate() | Quaternion | Vraća konjugat (w, -x, -y, -z) |
| inverse() | Quaternion | Vraća multiplikativni inverz; podiže ValueError ako je duljina nula |
| dot(q) | float | Skalarni produkt s drugim kvaternionom |
| concat(rhs) | Quaternion | Hamiltonov produkt (sastavljanje dvaju rotacija) |
| euler_angles() | Vector3 | Izvlači Eulerove kutove (radijani) kao Vector3(roll, pitch, yaw) |
| to_matrix(translation=None) | Matrix4 | Pretvara u 4×4 matricu rotacije; po želji ugrađuje translaciju Vector3 |
| to_angle_axis(angle, axis) | None | Rastavlja na kut (radijani) i os; rezultati zapisani u liste s jednim elementom angle[0] i 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