Quaternion — Aspose.3D FOSS for Python API Reference

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)

: aspose.threed.utilities

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

wfloatSkalarni (realni) dio
xfloatVektorska x-komponenta
yfloatVektorska y-komponenta
zfloatVektorska z-komponenta
lengthfloatMagnituda kvaterniona

Statičke metode tvorničkih funkcija

Povratni tip
Quaternion.from_euler_angle(pitch, yaw, roll)QuaternionKreira 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)QuaternionKonstrukcije iz kuta (radijana) i a Vector3 os
Quaternion.from_rotation(orig, dest)QuaternionRotacija najkraćeg luka od smjera orig do smjera dest
Quaternion.interpolate(t, from_q, to_q)QuaternionSLERP interpolacija; t u [0, 1]
Quaternion.slerp(t, v1, v2)QuaternionAlias za interpolate

Metode instance

Tip povratka
normalize()QuaternionVraća kopiju jedinične duljine
conjugate()QuaternionVraća konjugat (w, -x, -y, -z)
inverse()QuaternionVraća multiplikativni inverz; podiže ValueError ako je duljina nula
dot(q)floatSkalarni produkt s drugim kvaternionom
concat(rhs)QuaternionHamiltonov produkt (sastavljanje dvaju rotacija)
euler_angles()Vector3Izvlači Eulerove kutove (radijani) kao Vector3(roll, pitch, yaw)
to_matrix(translation=None)Matrix4Pretvara u 4×4 matricu rotacije; po želji ugrađuje translaciju Vector3
to_angle_axis(angle, axis)NoneRastavlja 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

Vidi također

 Hrvatski