quaternion คืออะไร


50

quaternion คืออะไรและทำงานอย่างไร นอกจากนี้คุณได้ประโยชน์อะไรจากการใช้สามจุดบนระนาบ 2D ในที่สุดเมื่อไหร่จึงถือว่าการปฏิบัติที่ดีในการใช้ quaternions?



ประวัติศาสตร์ฉันคิดว่า quaternions มาก่อนและต่อมาจุดและผลิตภัณฑ์ข้ามมาจาก quaternions

2
ฉันพบบทความภาพเคลื่อนไหวนี้มีข้อมูลมาก: acko.net/blog/animate-your-way-to-glory-pt2/#quaternions
AShelly

ในคณิตศาสตร์บริสุทธิ์ฉันเชื่อว่าควอเทอร์เนียนเป็น 3 จำนวนเชิงซ้อนเช่นi² = j² = k² = ijk
Vinz243

Quaternions เป็นวิธีที่ดีที่สุดในการสอดแทรกการหมุนอย่างราบรื่น เพียงแค่การแก้ไขเมทริกซ์การหมุนไม่ได้ผลเพราะคุณจะไม่ได้เมทริกซ์การหมุนตามผลลัพธ์ การปรับมุมของออยเลอร์ไม่ทำให้การหมุนราบรื่น ดังนั้นสำหรับการหมุนภาพเคลื่อนไหวเหมือนที่จำเป็นในคอมพิวเตอร์กราฟิกหรือหุ่นยนต์ quaternions เป็นวิธีที่จะไป และมีประโยชน์ แต่อย่างใดไม่ว่ามักจะใช้นามสกุลเรียกว่า quaternions คู่ที่ช่วยให้คุณเป็นตัวแทนของการเปลี่ยนแปลงและการหมุน
โทเบียส B

คำตอบ:


43

ศาสตร์ quaternion คือจำนวนเชิงซ้อนกับ 4 มิติ แต่ในการพัฒนาเกม Quaternions มักใช้เพื่ออธิบายการหมุนในพื้นที่ 3 มิติด้วยการเข้ารหัส:

  1. แกนหมุน (ในรูปของเวกเตอร์ 3 มิติ)
  2. ไกลแค่ไหนที่จะหมุนรอบแกนนั้น

โปรดทราบว่าข้อมูลนี้ถูกเข้ารหัสด้วย sines และ cosines ภายใน quaternion ดังนั้นโดยทั่วไปคุณไม่ควรพยายามตั้งค่าหรืออ่านองค์ประกอบภายในของ quaternion (xyzw) อย่างชัดเจน มันง่ายที่จะทำผิดแบบนั้นและรับผลลัพธ์ที่ไม่มีความหมาย ห้องสมุดคณิตศาสตร์ quaternion มักจะให้ฟังก์ชั่นในการทำงานกับ quaternions (เช่นการแปลงเป็น & จากมุมออยเลอร์หรือมุมแกน) ซึ่งทำให้แน่ใจว่าคณิตศาสตร์ถูกต้องและมีประโยชน์ด้านการทำให้อ่านและเข้าใจรหัสของคุณง่ายขึ้น

อีกทางเลือกหนึ่งในการอธิบายการหมุนคือการอธิบายว่าจะหมุนรอบแกน 3 แกนคงที่คือ 'x, y, และ z (มุมของออยเลอร์) ซึ่งต้องการตัวเลข 3 ตัวแทนที่จะเป็น 4 และมักจะใช้งานได้ง่ายกว่า อย่างไรก็ตามออยเลอร์ - มุมอาจมีปัญหาที่เรียกว่าgimbal-lock : เมื่อคุณหมุน 90 °รอบแกนหนึ่งแกนอีกสองแกนจะเท่ากัน กับ quaternions ปัญหานี้จะไม่เกิดขึ้น

วิธีการแสดงหมุนเวียนในพื้นที่ 3 มิติก็คือมี 4x4 เมทริกซ์การเปลี่ยนแปลง แต่ด้วยเมทริกซ์การแปลงคุณไม่สามารถหมุนได้ แต่ยังสามารถปรับขยายแปลและเอียงได้อีกด้วย เมื่อคุณต้องการเพียงการหมุนเมทริกซ์จะ overkill และ quaternion เป็นวิธีที่เร็วและง่ายกว่ามาก

ปัญหานี้เกี่ยวข้องเฉพาะในพื้นที่ 3 มิติ ในพื้นที่ 2d คุณมีแกนหมุนเพียงแกนเดียว การหมุนใด ๆ สามารถแสดงด้วยเลขทศนิยมเดียวหรือจำนวนเชิงซ้อนเดียวดังนั้นคุณจึงไม่มีปัญหานี้ ในขณะที่คุณสามารถแสดงการหมุนบนเครื่องบินแบบ 2d โดยมี quaternion ซึ่งแกนชี้ไปที่เครื่องบิน (หรือออกจาก) ในทางทฤษฎีมันมักจะเกินกำลัง


6
gimbal lock ไม่ใช่ปัญหาใน quaternions ถ้าคุณเริ่มจาก quaternions และลงท้ายด้วย quaternions ล็อค gimbal จะตั้งขึ้นเมื่อคุณมีขั้นตอนที่แปลงเป็นมุมของออยเลอร์หรือด้านหลัง
วงล้อประหลาด

2
Quaternions ไม่ใช่แกน + มุมพวกมันคือ 3 จำนวนเชิงซ้อนและสเกล
transistor09

11
@ transistor09 คุณจะเชื่อว่าคุณทั้งคู่ใช่ไหม? ส่วนจินตภาพ 3 องค์ประกอบของหน่วย quaternion สามารถตีความได้ว่าเป็นเวกเตอร์หน่วยตามแกนของการหมุนปรับขนาดโดยไซน์ของครึ่งมุมของการหมุน ส่วนที่แท้จริงของหน่วย quaternion คือโคไซน์ของครึ่งมุมของการหมุน ดังนั้นคุณถูกต้องว่ามันไม่ใช่รูปแบบแกนมุม แต่เป็นความจริงที่ส่วนประกอบของควอเทอเนียนสามารถตีความได้ว่าเป็นแกนและการวัดแบบไม่เป็นเชิงเส้นของการหันไปรอบแกนนั้น
DMGregory

2
นอกจากนี้คุณยังสามารถพูดถึงข้อดีที่ quaternions มีมากกว่าเมทริกซ์การหมุน: พวกมันรวมกันได้เร็วขึ้น เมื่อรวมการหมุนการคูณสองควอเทอร์เนียนต้องใช้การดำเนินการน้อยกว่าการคูณเมทริกซ์
Reinstate Monica

3
ที่จริงแล้วในสเปซ 2D ตัวเลขที่ซับซ้อนเป็นอะนาล็อกที่แน่นอน คูณจุด 2 มิติด้วยจำนวนเชิงซ้อนและคุณหมุนไปแล้ว - อันที่จริงมันเหมือนกับการหมุนบาป / cos ปกติ (ซึ่งควรชัดเจนถ้าคุณเข้าใจจำนวนเชิงซ้อนที่ดีพอ) สิ่งนี้สามารถนำไปใช้ประโยชน์ได้เล็กน้อย แต่ในที่สุดกราฟิก 2D ไม่ได้มีประสิทธิภาพมากในทุกวันนี้ดังนั้นมันจึงไม่ให้การปรับปรุงมากนักถ้าคุณไม่สะดวกสบายในการใช้ตัวเลขที่ซับซ้อน (ซึ่งคนส่วนใหญ่ไม่ต้องการอย่างแน่นอน - ตามหลักฐานจากรหัส quaternion ที่น่าสงสารอย่างไม่น่าเชื่อออกมี: D)
Luaan

13

นี่คือการเพิ่มคำตอบของ @ Philipp

นอกจากนี้คุณได้ประโยชน์อะไรจากการใช้สามจุดบนระนาบ 2D

คุณไม่จำเป็นต้องมีควอเทอร์เนี่ยนเลยถ้าสิ่งที่คุณสนใจคือหมุนบนระนาบนั่นก็คือเกี่ยวกับแกน z ในกรณีนี้สิ่งที่คุณต้องการคือมุมหันเหและคุณสามารถใช้ประโยชน์จากข้อเท็จจริงที่ว่าการหมุนอย่างต่อเนื่องเกี่ยวกับการเดินทางของแกน z เพื่อให้คุณสามารถใช้การหมุนตามลำดับที่คุณต้องการ

สถานการณ์จะแตกต่างกันถ้าคุณกำลังหมุนบนเครื่องบินที่ไม่ใช่ระนาบ XY การหมุนนี้เทียบเท่ากับการหมุนรอบแกน 3D โดยพลการ ตอนนี้คุณมีสองทางเลือก:

  • หมุนระนาบของคุณในแบบ 3 มิติเพื่อให้มันเกิดขึ้นพร้อมกับระนาบ XY แล้วหันเหและเปลี่ยนกลับหรือ

  • คิดว่าการหมุนของคุณเป็นแบบ 3 มิติเพื่อเริ่มต้น

ตัวเลือกที่สองนั้นง่ายต่อการเขียนโค้ด ดังที่ @Phippipp กล่าว quaternions หลีกเลี่ยงการล็อก gimbal (ถ้าคุณหลีกเลี่ยงการแปลง RPY หรือแกน / มุมกลาง)

ในที่สุดเมื่อไหร่จึงถือว่าการปฏิบัติที่ดีในการใช้ quaternions?

เมื่อใดก็ตามที่มีการหมุนแบบสามมิติเป็นแนวปฏิบัติที่ดีในการใช้ควอเทอร์เนียน

เช่น:

  • ในQt Quats ทำให้ง่ายต่อการแก้ไขระหว่างการหมุนเช่นเดียวกับในฟังก์ชั่นslerp

  • ROSใช้พวกมันเพื่อเปลี่ยนท่าหุ่นยนต์

  • ในเครื่องยนต์Bullet Bullet

  • สำหรับแอปพลิเคชันที่ซับซ้อนมากดูที่นี่สำหรับการใช้งานในกลศาสตร์ 3 มิติแบบคลาสสิก


" เมื่อใดก็ตามที่มีการหมุน 3D มันเป็นแนวปฏิบัติที่ดีที่จะใช้ควอเทอร์เนียน" เป็นเพียงเล็กน้อยแรงเกินไป เกือบจะดีกว่าเสมอ มีสถานการณ์ที่ทางเลือกมีความเหมาะสม (เป็นตัวอย่างของความไม่สมบูรณ์รากที่สี่ของควอเทอเรียนมีค่าหลายค่า)
Yakk

1
Quaternions เป็นสินค้าที่จะใช้และความเจ็บปวดที่จะใช้ คุณสามารถเข้ากันได้โดยไม่มีพวกเขาหากคุณตระหนักถึง gimbal-lock
Hatoru Hansou
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.