ฉันเป็นนักพัฒนาเกมและไม่ได้เรียนวิชาคณิตศาสตร์ ดังนั้นฉันต้องการใช้ Quaternions เป็นเครื่องมือเท่านั้น และเพื่อให้สามารถทำงานกับการหมุน 3 มิติได้จำเป็นต้องใช้ Quaternions (หรือเมทริกซ์ แต่ให้อยู่ที่ Quaternions ที่นี่ในคำถามนี้) ฉันคิดว่ามันสำคัญสำหรับนักพัฒนาหลายคนที่จะใช้พวกเขา นั่นเป็นเหตุผลที่ฉันต้องการแบ่งปันความรู้ของฉันและหวังว่าจะเติมเต็มช่องว่างที่ฉันมี ตอนนี้ ....
เท่าที่ฉันเข้าใจ:
Quaternion สามารถอธิบาย 2 สิ่ง:
- การวางแนวปัจจุบันของวัตถุ 3 มิติ
- การแปลงการหมุนที่วัตถุทำได้ (rotationChange)
คุณสามารถทำอะไรกับ Quaternion:
คูณ:
Quaternion endOrientation = การหมุน QuaternionChange * Quaternion currentOrientation;
ตัวอย่างเช่น: วัตถุ 3 มิติของฉันหันไปทางซ้าย 90 องศา - และการหมุนของฉันฉันคูณคือการหมุน 180 องศาไปทางขวาในที่สุดวัตถุ 3 มิติของฉัน 90 °หันไปทางขวา
Quaternion rotationChange = Quaternion endRotation * Quaternion.Inverse (startRotation);
ด้วยวิธีนี้คุณจะได้รับการหมุนเปลี่ยนซึ่งสามารถนำไปใช้กับการวางแนวอื่น
Vector3 endPostion = การหมุน Quaternion เปลี่ยน * Vector3 currentPosition;
ตัวอย่างเช่น: วัตถุ 3 มิติของฉันอยู่ในตำแหน่ง (0,0,0) และการหมุนของฉันฉันคูณคือการหมุน 180 องศาไปทางขวาการวางตำแหน่งของฉันเป็นอะไรที่คล้ายกัน (0, -50,0) ภายใน Quaternion นั้นมีแกน - และหมุนรอบแกนนั้น คุณหันจุดรอบแกน Y องศานั้น
Vector3 rotatedOffsetVector = การหมุน Quaternion เปลี่ยน * Vector3 currentOffsetVector;
ตัวอย่างเช่น: ทิศทางเริ่มต้นของฉันแสดงขึ้น - (0,1,0) และการหมุนของฉันฉันคูณคือการหมุน 180 องศาไปทางขวาทิศทางสิ้นสุดของฉันแสดงลง (0, -1,0)
การผสม (Lerp และ Slerp):
Quaternion currentOrientation = Quaternion.Slerp (startOrientation, endOrientation, interpolator)
ถ้าผู้แก้ไขคือ 1: currentOrientation = endOrientation
ถ้าตัวแก้ไขคือ 0: currentOrientation = startOrientation
Slerp interpolates แม่นยำยิ่งขึ้น Lerp interpolates ปฏิบัติมากขึ้น
คำถามของฉัน:
ทุกอย่างที่ฉันอธิบายจนถึงตอนนี้ถูกต้องหรือไม่?
นั่นคือ "ทั้งหมด" ที่คุณสามารถทำได้กับ Quaternions (obv. ไม่ได้)
คุณสามารถทำอะไรกับพวกเขาได้อีก?
ผลิตภัณฑ์ Dot และผลิตภัณฑ์ Cross ระหว่าง 2 Quaternions มีประโยชน์อย่างไร
แก้ไข:
อัปเดตคำถามพร้อมคำตอบ
n
ทิศทางที่แตกต่างกัน (ทัศนคติ, ท่าทาง, ฯลฯ ) จากนั้นคุณสามารถหาค่าเฉลี่ยได้โดยใช้ตุ้มน้ำหนักทำการสรุป slerp / lerp อย่างมีประสิทธิภาพ นอกจากนี้คุณยังสามารถแปลงควอเทอเรียนเป็นโรเตอร์ซึ่งเทียบเท่ากับการใช้ความเร็วเชิงมุมในระยะเวลาหนึ่งกับร่างกายที่แข็งเกร็ง ดังนั้นคุณสามารถอธิบายการรวมความเร็วเชิงมุมกับควอเทอร์เนียนได้เช่นกัน นอกจากนี้คุณยังสามารถประมาณได้ว่าการหมุนของทิศทางสองแบบนั้นแตกต่างกันอย่างไร