Quaternion

Methods

Quaternion เป็นควอเทอร์เนียนหน่วยที่ใช้ในการเข้ารหัสการหมุน 3 มิติ ต่างจากมุมออยเลอร์ ควอเทอร์เนียนจะหลีกเลี่ยงการล็อกแกมบอลและทำการอินเทอร์โพเลตอย่างราบรื่น. The Transform.rotation คุณสมบัติบนโหนดซีนเก็บค่า Quaternion.

ส่วนประกอบจะถูกจัดเก็บเป็น (w, x, y, z) โดยที่ w เป็นส่วนสเกลาร์และ (x, y, z) เป็นส่วนเวกเตอร์.

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)

Methods: aspose.threed.utilities

from aspose.threed.utilities import Quaternion

Methods

MethodsMethods
Quaternion()ควอเทอร์เนียนเอกลักษณ์ (w=1, x=0, y=0, z=0)
Quaternion(w, x, y, z)คอนสตรัคเตอร์ส่วนประกอบแบบชัดเจน

Methods

MethodsMethodsMethods
wfloatส่วนสเกลาร์ (จริง)
xfloatส่วนประกอบ x ของเวกเตอร์
yfloatส่วนประกอบ y ของเวกเตอร์
zfloatส่วนประกอบ z ของเวกเตอร์
lengthfloatขนาดของควอเทอร์เนียน

เมธอดแฟกทอรีแบบสแตติก

Methodsประเภทการคืนค่าMethods
Quaternion.from_euler_angle(pitch, yaw, roll)Quaternionสร้างจากมุมออยเลอร์ในเรเดียน (pitch=X, yaw=Y, roll=Z) นอกจากนี้ยังรับค่า Vector3 เป็นอาร์กิวเมนต์แรก
Quaternion.from_angle_axis(angle, axis)Quaternionสร้างจากมุม (เรเดียน) และ Vector3 แกน
Quaternion.from_rotation(orig, dest)Quaternionการหมุนตามเส้นโค้งสั้นที่สุดจากทิศทาง orig ไปยังทิศทาง dest
Quaternion.interpolate(t, from_q, to_q)Quaternionการแทรกค่า SLERP; t ใน [0, 1]
Quaternion.slerp(t, v1, v2)Quaternionนามแฝงของ interpolate

เมธอดอินสแตนซ์

Methodsประเภทค่าที่คืนMethods
normalize()Quaternionคืนสำเนาที่มีความยาวเป็นหน่วย
conjugate()Quaternionคืนค่าคอนจูเกต (w, -x, -y, -z)
inverse()Quaternionคืนค่าตัวผกผันเชิงคูณ; ยก ValueError หากความยาวเป็นศูนย์
dot(q)floatผลคูณจุดกับควอเทอร์เนียนอื่น
concat(rhs)Quaternionผลคูณแฮมิลตัน (การประกอบการหมุนสองครั้ง)
euler_angles()Vector3สกัดเอาองศาออยเลอร์ (เรเดียน) เป็น Vector3(roll, pitch, yaw)
to_matrix(translation=None)Matrix4แปลงเป็นเมทริกซ์การหมุน 4×4; สามารถฝังการแปลได้ตามต้องการ Vector3
to_angle_axis(angle, axis)Noneแยกเป็นมุม (เรเดียน) และแกน; ผลลัพธ์เขียนลงในรายการที่มีเพียงหนึ่งองค์ประกอบ angle[0] และ axis[0]

Methods

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

ดูเพิ่มเติม

 ภาษาไทย