quaternion คืออะไรและทำงานอย่างไร นอกจากนี้คุณได้ประโยชน์อะไรจากการใช้สามจุดบนระนาบ 2D ในที่สุดเมื่อไหร่จึงถือว่าการปฏิบัติที่ดีในการใช้ quaternions?
quaternion คืออะไรและทำงานอย่างไร นอกจากนี้คุณได้ประโยชน์อะไรจากการใช้สามจุดบนระนาบ 2D ในที่สุดเมื่อไหร่จึงถือว่าการปฏิบัติที่ดีในการใช้ quaternions?
คำตอบ:
ศาสตร์ quaternion คือจำนวนเชิงซ้อนกับ 4 มิติ แต่ในการพัฒนาเกม Quaternions มักใช้เพื่ออธิบายการหมุนในพื้นที่ 3 มิติด้วยการเข้ารหัส:
โปรดทราบว่าข้อมูลนี้ถูกเข้ารหัสด้วย 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 ซึ่งแกนชี้ไปที่เครื่องบิน (หรือออกจาก) ในทางทฤษฎีมันมักจะเกินกำลัง
นี่คือการเพิ่มคำตอบของ @ Philipp
นอกจากนี้คุณได้ประโยชน์อะไรจากการใช้สามจุดบนระนาบ 2D
คุณไม่จำเป็นต้องมีควอเทอร์เนี่ยนเลยถ้าสิ่งที่คุณสนใจคือหมุนบนระนาบนั่นก็คือเกี่ยวกับแกน z ในกรณีนี้สิ่งที่คุณต้องการคือมุมหันเหและคุณสามารถใช้ประโยชน์จากข้อเท็จจริงที่ว่าการหมุนอย่างต่อเนื่องเกี่ยวกับการเดินทางของแกน z เพื่อให้คุณสามารถใช้การหมุนตามลำดับที่คุณต้องการ
สถานการณ์จะแตกต่างกันถ้าคุณกำลังหมุนบนเครื่องบินที่ไม่ใช่ระนาบ XY การหมุนนี้เทียบเท่ากับการหมุนรอบแกน 3D โดยพลการ ตอนนี้คุณมีสองทางเลือก:
หมุนระนาบของคุณในแบบ 3 มิติเพื่อให้มันเกิดขึ้นพร้อมกับระนาบ XY แล้วหันเหและเปลี่ยนกลับหรือ
คิดว่าการหมุนของคุณเป็นแบบ 3 มิติเพื่อเริ่มต้น
ตัวเลือกที่สองนั้นง่ายต่อการเขียนโค้ด ดังที่ @Phippipp กล่าว quaternions หลีกเลี่ยงการล็อก gimbal (ถ้าคุณหลีกเลี่ยงการแปลง RPY หรือแกน / มุมกลาง)
ในที่สุดเมื่อไหร่จึงถือว่าการปฏิบัติที่ดีในการใช้ quaternions?
เมื่อใดก็ตามที่มีการหมุนแบบสามมิติเป็นแนวปฏิบัติที่ดีในการใช้ควอเทอร์เนียน
เช่น:
ในQt Quats ทำให้ง่ายต่อการแก้ไขระหว่างการหมุนเช่นเดียวกับในฟังก์ชั่นslerp
ROSใช้พวกมันเพื่อเปลี่ยนท่าหุ่นยนต์
ในเครื่องยนต์Bullet Bullet
สำหรับแอปพลิเคชันที่ซับซ้อนมากดูที่นี่สำหรับการใช้งานในกลศาสตร์ 3 มิติแบบคลาสสิก