Quaternion

Quaternion predstavlja jedinični kvaternion koji se koristi za kodiranje 3D rotacija. Za razliku od Eulerovih uglova, kvaternioni izbegavaju gimbal lock i interpoliraju glatko. The Transform.rotation svojstvo na čvoru scene čuva a Quaternion.

Komponente se čuvaju kao (w, x, y, z) gde w je skalarni deo i (x, y, z) formiraju vektorski deo.

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() | Identitet kvaternion (w=1, x=0, y=0, z=0) | | Quaternion(w, x, y, z) | Eksplicitni konstruktor komponenti |

| ————————- | ————————- | ————————- | | w | float | Skalar (realni) deo | | x | float | Vektor x-komponenta | | y | float | Vektor y-komponenta | | z | float | Vektor z-komponenta | | length | float | Magnituda kvaterniona |

Statičke metode fabrike

| ———————————————– | ———————- | ————————————————————————————————————— | | Quaternion.from_euler_angle(pitch, yaw, roll) | Quaternion | Kreira iz Eulerovih uglova u radijanima (pitch=X, yaw=Y, roll=Z). Takođe prihvata a Vector3 kao prvi argument | | Quaternion.from_angle_axis(angle, axis) | Quaternion | Konstrukcije iz ugla (radijani) i Vector3 osa | | Quaternion.from_rotation(orig, dest) | Quaternion | Rotacija najkraćeg luka od pravca orig ka pravcu 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 dužine | | conjugate() | Quaternion | Vraća konjugat (w, -x, -y, -z) | | inverse() | Quaternion | Vraća multiplikativni inverz; podiže ValueError ako je dužina nula | | dot(q) | float | Skalarni proizvod sa drugim kvaternionom | | concat(rhs) | Quaternion | Hamiltonov proizvod (kompozicija dve rotacije) | | euler_angles() | Vector3 | Izvlači Eulerove uglove (radijani) kao Vector3(roll, pitch, yaw) | | to_matrix(translation=None) | Matrix4 | Konvertuje u 4×4 matricu rotacije; opcionalno ugrađuje translaciju Vector3 | | to_angle_axis(angle, axis) | None | Rasčlanjuje se na ugao (radijani) i osu; rezultati se upisuju u liste sa 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

Vidi takođe

 Српски