เหตุใดจึงใช้ควอเทอร์เนียนสำหรับการหมุน


108

ฉันเป็นนักฟิสิกส์และได้เรียนรู้การเขียนโปรแกรมมาบ้างและเจอผู้คนมากมายที่ใช้ควอเทอร์เนียนสำหรับการหมุนแทนที่จะเขียนสิ่งต่าง ๆ ในรูปแบบเมทริกซ์ / เวกเตอร์

ในฟิสิกส์มีเหตุผลที่ดีมากที่เราไม่ใช้ควอเทอร์เนียน (แม้จะมีเรื่องราวแปลกประหลาดที่เล่าเกี่ยวกับแฮมิลตัน / กิ๊บส์ / ฯลฯ เป็นครั้งคราว) ฟิสิกส์ต้องการให้คำอธิบายของเรามีพฤติกรรมการวิเคราะห์ที่ดี (สิ่งนี้มีความหมายที่กำหนดไว้อย่างชัดเจน แต่ด้วยวิธีการทางเทคนิคบางอย่างที่ไปไกลกว่าสิ่งที่สอนในชั้นเรียนแนะนำปกติดังนั้นฉันจะไม่ลงรายละเอียดใด ๆ ) ปรากฎว่าควอเทอร์เนียนไม่มีพฤติกรรมที่ดีเช่นนี้ดังนั้นจึงไม่มีประโยชน์และเวกเตอร์ / เมทริกซ์ทำดังนั้นเราจึงใช้มัน

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

โดยทั่วไปเราต้องการเพียงแค่การทำแผนที่ของจุด X = (x, y, z) ไปยังจุดใหม่ X '= (x', y' Z ') เรื่องกับข้อ จำกัด ที่ X 2 = X' 2 และมีหลายสิ่งหลายอย่างที่ทำเช่นนี้

วิธีที่ไร้เดียงสาคือเพียงแค่วาดสามเหลี่ยมที่กำหนดและใช้ตรีโกณมิติหรือใช้ไอโซมอร์ฟิซึมระหว่างจุด (x, y, z) และเวกเตอร์ (x, y, z) และฟังก์ชัน f (X) = X 'และ เมทริกซ์ MX = X 'หรือใช้ควอเทอร์เนียนหรือฉายภาพส่วนประกอบของเวกเตอร์เก่าพร้อมกับใหม่โดยใช้วิธีการอื่น (x, y, z) T (a, b, c) (x', y ', z ') ฯลฯ

จากมุมมองทางคณิตศาสตร์คำอธิบายเหล่านี้จะเทียบเท่าในการตั้งค่านี้ (เป็นทฤษฎีบท) พวกเขาทั้งหมดมีองศาอิสระเท่ากันจำนวนข้อ จำกัด เท่ากัน ฯลฯ

เหตุใดควอเทอร์เนียนจึงดูเหมือนจะชอบมากกว่าเวกเตอร์?

เหตุผลทั่วไปที่ฉันเห็นคือไม่มีการล็อก gimbal หรือปัญหาเกี่ยวกับตัวเลข

ไม่มีอาร์กิวเมนต์ gimbal lock ดูแปลกเนื่องจากนี่เป็นเพียงปัญหาของมุมของ euler นอกจากนี้ยังเป็นเพียงปัญหาพิกัด (เช่นเดียวกับความเป็นเอกฐานที่ r = 0 ในพิกัดเชิงขั้ว (จาโคเบียนสูญเสียอันดับ)) ซึ่งหมายความว่าเป็นเพียงปัญหาในท้องถิ่นเท่านั้นและสามารถแก้ไขได้โดยการสลับพิกัดหมุนออกจากความเสื่อม หรือใช้ระบบพิกัดสองระบบที่ทับซ้อนกัน

ฉันไม่ค่อยแน่ใจเกี่ยวกับปัญหาด้านตัวเลขเนื่องจากฉันไม่ทราบรายละเอียดว่าทั้งสองอย่างนี้ (และทางเลือกอื่น ๆ ) จะถูกนำไปใช้อย่างไร ฉันได้อ่านมาว่าการทำให้ควอเทอร์เนียนเป็นปกตินั้นง่ายกว่าการทำแบบนั้นสำหรับเมทริกซ์การหมุน แต่นี่เป็นจริงสำหรับเมทริกซ์ทั่วไปเท่านั้น การหมุนมีข้อ จำกัด เพิ่มเติมที่ทำให้สิ่งนี้เล็กน้อย (ซึ่งสร้างขึ้นในคำจำกัดความของควอเทอร์เนียน) (อันที่จริงสิ่งนี้จะต้องเป็นจริงเนื่องจากมีจำนวนองศาอิสระเท่ากัน)

แล้วสาเหตุของการใช้ควอเทอร์เนียนกับเวกเตอร์หรือทางเลือกอื่น ๆ คืออะไร?


2
สิ่งที่ "ไม่มี gimbal ล็อค" เป็นเรื่องโกหกอยู่แล้ว คุณมีปัญหาการล็อค gimbal แบบเดียวกับที่คุณมีกับมุมออยเลอร์ถ้าคุณใช้การหมุนสองมุมกับควอเทอร์เนียน คุณไม่มีปัญหาสำหรับการหมุนครั้งเดียวเนื่องจากเป็นการดำเนินการ 1 ครั้งไม่ใช่ 3
Damon

2
@Damon นี่ไม่เป็นความจริงอย่างสมบูรณ์ ดูmathoverflow.net/a/95908/97344
plasmacel

คำตอบ:


63

การล็อค Gimbal เป็นเหตุผลหนึ่งแม้ว่าคุณจะบอกว่ามันเป็นเพียงปัญหาเกี่ยวกับมุมออยเลอร์และแก้ไขได้ง่าย ยังคงใช้มุมออยเลอร์เมื่อหน่วยความจำเป็นปัญหาเนื่องจากคุณต้องเก็บตัวเลข 3 ตัวเท่านั้น

สำหรับควอเทอร์เนียนเทียบกับเมทริกซ์การหมุน 3x3 ควอเทอร์เนียนมีข้อได้เปรียบในขนาด (4 สเกลาร์เทียบกับ 9) และความเร็ว (การคูณควอเทอร์เนียนเร็วกว่าการคูณเมทริกซ์ 3x3 มาก)

โปรดทราบว่าทั้งหมดของการเป็นตัวแทนเหล่านี้ผลัดถูกนำมาใช้ในทางปฏิบัติ มุมออยเลอร์ใช้หน่วยความจำน้อยที่สุด เมทริกซ์ใช้หน่วยความจำมากขึ้น แต่ไม่ต้องทนทุกข์ทรมานจากการล็อค Gimbal และมีคุณสมบัติในการวิเคราะห์ที่ดี และควอเทอร์เนียนสร้างความสมดุลที่ดีของทั้งสองอย่างมีน้ำหนักเบา แต่ปราศจากการล็อค Gimbal


แต่เมทริกซ์การหมุนไม่มีส่วนประกอบอิสระมากขนาดนั้น - มันถูก จำกัด การหมุนสองมิติถูกระบุโดยสามพิกัดในสามมิติโดยไม่คำนึงถึงการเป็นตัวแทน เมทริกซ์มีส่วนประกอบมากกว่าโดยทั่วไปเนื่องจากสามารถทำได้มากกว่าการหมุนเวียน แต่ในกรณีของการหมุนเวียนส่วนประกอบพิเศษจะถูกกำหนดในแง่ของส่วนประกอบอื่น ๆ
JMP

2
@JMP: คุณพูดถูก ผู้คนจำนวนมากทำการ "บีบอัด" เมทริกซ์เพื่อให้คุณเก็บข้อมูลได้มากเท่าที่จำเป็นเท่านั้น แต่เมทริกซ์ที่บีบอัดนั้นจัดการได้ยากกว่าดังนั้นคุณจึงสูญเสียประสิทธิภาพไป ทุกอย่างเกี่ยวกับการลดทอนหน่วยความจำและประสิทธิภาพ
Peter Alexander

11
@JMP รูทีนการคูณเมทริกซ์มาตรฐานต้องการทั้ง 9 ค่า แม้ว่าจะมีเพียง 3 ตัวเท่านั้นที่เป็นอิสระ แต่ก็ยังต้องใช้หน่วยความจำที่มีค่าเท่ากับ 9 ตัวเลขเมื่อคุณทำการคำนวณจริง ๆ (อีกครั้งหากคุณกำลังทำการคูณเมทริกซ์ในคอมพิวเตอร์จริงๆ)
David Z

2
"การคูณควอเทอร์เนียนเร็วกว่าการคูณเมทริกซ์ 3x3" จริงเหรอ? การหมุนควอเทอร์เนียนต้องใช้การเพิ่ม / มัล 24 ครั้ง (เนื่องจากการดำเนินการข้ามผลิตภัณฑ์และการดำเนินการเสริมสองครั้ง) เมทริกซ์ 3x3 ต้องการการดำเนินการเพิ่ม / มัลเพียง 15 ครั้ง
Marat Buharov

สามารถใช้เพียงแค่ 2 เวกเตอร์ (6 ลอย) เพื่อแสดงทิศทาง 3 มิติทั้งหมดเวกเตอร์ที่ 3 เป็นเพียงกากบาท เมทริกซ์ที่ได้เปรียบคือมีอยู่แล้วในรูปแบบที่พร้อมใช้งานสำหรับหลาย ๆ แอป ทั้งออยเลอร์และควอตส์ต้องใช้การบรรจุ (จากเมทริกซ์) และการเปิดกล่อง (เป็นเมทริกซ์) ซึ่งใช้การประมวลผลเพิ่มเติม ออยเลอร์และ Quats มีประโยชน์สำหรับการจัดเก็บข้อมูลระยะยาวขนาดกะทัดรัด
user3015682

40

ในฟิสิกส์มีเหตุผลที่ดีมากที่เราไม่ใช้ควอเทอร์เนียน (แม้จะมีเรื่องราวแปลกประหลาดที่เล่าเกี่ยวกับแฮมิลตัน / กิ๊บส์ / ฯลฯ เป็นครั้งคราว) ฟิสิกส์ต้องการให้คำอธิบายของเรามีพฤติกรรมการวิเคราะห์ที่ดี (สิ่งนี้มีความหมายที่กำหนดไว้อย่างชัดเจน แต่ด้วยวิธีการทางเทคนิคบางอย่างที่ไปไกลกว่าสิ่งที่สอนในชั้นเรียนแนะนำปกติดังนั้นฉันจะไม่ลงรายละเอียดใด ๆ ) ปรากฎว่าควอเทอร์เนียนไม่มีพฤติกรรมที่ดีเช่นนี้ดังนั้นจึงไม่มีประโยชน์และเวกเตอร์ / เมทริกซ์ทำดังนั้นเราจึงใช้มัน

ฉันก็เป็นนักฟิสิกส์เหมือนกัน และมีบางสถานการณ์ที่ควอเทอร์เนียนสั่นสะเทือน! ตัวอย่างเช่น Spherical Harmonics คุณมีอะตอมสองตัวที่กระจัดกระจายแลกเปลี่ยนอิเล็กตรอน: การถ่ายเทสปินออร์บิทัลคืออะไร? ด้วยควอเทอร์เนียนเป็นเพียงการคูณเช่นการสรุปเลขชี้กำลังของฟังก์ชันฐาน SH ที่แสดงเป็นควอเทอร์เนียน (การทำให้ Legendre Polynomials เป็นสัญกรณ์ควอเทอร์เนียนเป็นเรื่องที่น่าเบื่อเล็กน้อย)

แต่ฉันยอมรับว่าพวกเขาไม่ใช่เครื่องมือสากลและโดยเฉพาะอย่างยิ่งในกลไกร่างกายที่เข้มงวดพวกเขาจะใช้งานได้ยากมาก ยังต้องอ้างถึงคำตอบของ Bertrand Russell ในคำถามของนักเรียนว่านักฟิสิกส์ต้องรู้คณิตศาสตร์มากแค่ไหน: "ให้มากที่สุด!"

อย่างไรก็ตาม: ทำไมเราถึงชอบควอเทอร์เนียนในคอมพิวเตอร์กราฟิก? เนื่องจากมีคุณสมบัติที่น่าสนใจมากมาย ขั้นแรกสามารถสอดแทรกสิ่งเหล่านี้ได้อย่างสวยงามซึ่งเป็นสิ่งสำคัญหากมีการเคลื่อนไหวของสิ่งที่หมุนได้เช่นแขนขารอบข้อต่อ ด้วยควอเทอร์เนียนมันเป็นเพียงการคูณสเกลาร์และการทำให้เป็นมาตรฐาน การแสดงสิ่งนี้ด้วยเมทริกซ์ต้องมีการประเมินค่า sin และ cos จากนั้นจึงสร้างเมทริกซ์การหมุน จากนั้นการคูณเวกเตอร์ด้วยควอเทอร์เนียนยังคงถูกกว่าเมื่อผ่านการคูณเมทริกซ์เวกเตอร์เต็มรูปแบบ แต่ก็ยังถูกกว่าหากมีการเพิ่มการแปลในภายหลัง หากคุณพิจารณาระบบแอนิเมชั่นโครงกระดูกสำหรับตัวละครมนุษย์ซึ่งต้องประเมินการแปล / การหมุนจำนวนมากสำหรับจุดยอดจำนวนมากสิ่งนี้มีผลกระทบอย่างมาก

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


1
คุณมีข้อมูลอ้างอิงเกี่ยวกับฮาร์โมนิกส์ทรงกลม / พหุนาม Legendre กับควอเทอร์เนียนหรือไม่? ฉันกำลังจะส่งบทความเกี่ยวกับหัวข้อที่เกี่ยวข้องและอยากเห็น (สามารถอ้างอิง) งานอื่น ๆ เกี่ยวกับเรื่องนี้
ไมค์

4
@ ไมค์: ออกจากหัวของฉันน่าเสียดายที่ไม่มีอะไรเผยแพร่ น่าเสียดายที่ควอเทอร์เนียนยังค่อนข้างคลุมเครือสำหรับนักฟิสิกส์ ฉันจำได้เพราะครูสอน Quantum Mechanic 2 ของฉันทำให้เป็นแบบฝึกหัดและฉันก็รู้สึกทึ่งกับมัน โดยพื้นฐานแล้วเราใช้คำว่า exp ((a ·iω + b ·jθ + c ·kη + d) r) โดยที่ r เป็นตัวแปรที่ซับซ้อน หากคุณพล็อตสิ่งนี้คุณจะได้รับการแจกแจงแบบ 3 มิติ (เราต้องพัฒนาอนุกรมเอ็กซ์โพเนนเชียลเกี่ยวกับตัวแปรควอเทอร์เนียนก่อน) สิ่งนี้ช่วยให้สามารถทำการแปลง "ฟูเรียร์" ซึ่งส่งผลให้คุณสามารถเปลี่ยนเป็นคำศัพท์ SH ที่รู้จักได้
datenwolf

32

ไม่มีอาร์กิวเมนต์ gimbal lock ดูแปลกเนื่องจากนี่เป็นเพียงปัญหาของมุมของ euler นอกจากนี้ยังเป็นเพียงปัญหาพิกัด (เช่นเดียวกับความเป็นเอกฐานที่ r = 0 ในพิกัดเชิงขั้ว (จาโคเบียนสูญเสียอันดับ)) ซึ่งหมายความว่าเป็นเพียงปัญหาในท้องถิ่นเท่านั้นและสามารถแก้ไขได้โดยการสลับพิกัดหมุนออกจากความเสื่อม หรือใช้ระบบพิกัดสองระบบที่ทับซ้อนกัน

แอปพลิเคชัน 3 มิติจำนวนมากเช่นการใช้มุมออยเลอร์ในการกำหนดแนวของวัตถุ สำหรับ Flight-sims โดยเฉพาะอย่างยิ่งพวกเขาเป็นตัวแทนของวิธีการจัดเก็บการวางแนวที่มีประโยชน์ในทางทฤษฎีในลักษณะที่ปรับเปลี่ยนได้ง่าย

นอกจากนี้คุณควรทราบด้วยว่าสิ่งต่างๆเช่น "การสลับพิกัดการหมุนออกจากความเสื่อมหรือการใช้ระบบพิกัดที่ทับซ้อนกันสองระบบ" ล้วนต้องใช้ความพยายาม ความพยายามหมายถึงรหัส และรหัสหมายถึงประสิทธิภาพ การสูญเสียประสิทธิภาพเมื่อคุณไม่จำเป็นต้องทำไม่ใช่เรื่องดีสำหรับแอปพลิเคชัน 3 มิติจำนวนมาก ท้ายที่สุดแล้วสิ่งที่จะได้รับจากกลเม็ดเหล่านี้ถ้าเพียงแค่ใช้ quaternions จะทำให้คุณได้รับทุกสิ่งที่คุณต้องการ

ฉันไม่ค่อยแน่ใจเกี่ยวกับปัญหาด้านตัวเลขเนื่องจากฉันไม่ทราบรายละเอียดว่าทั้งสองอย่างนี้ (และทางเลือกอื่น ๆ ) จะถูกนำไปใช้อย่างไร ฉันได้อ่านมาว่าการทำให้ควอเทอร์เนียนเป็นปกตินั้นง่ายกว่าการทำแบบนั้นสำหรับเมทริกซ์การหมุน แต่นี่เป็นจริงสำหรับเมทริกซ์ทั่วไปเท่านั้น การหมุนมีข้อ จำกัด เพิ่มเติมที่ทำให้สิ่งนี้เล็กน้อย (ซึ่งสร้างขึ้นในคำจำกัดความของควอเทอร์เนียน) (อันที่จริงสิ่งนี้จะต้องเป็นจริงเนื่องจากมีจำนวนองศาอิสระเท่ากัน)

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

หากคุณใช้เมทริกซ์ทุกครั้งที่คุณทำการคูณเมทริกซ์คุณต้องจัดเรียงเมทริกซ์ใหม่ให้เป็นปกติ เมทริกซ์ที่คุณเป็น orthonormalizing ยังไม่ใช่เมทริกซ์การหมุนดังนั้นฉันคงไม่แน่ใจเกี่ยวกับ orthonormalization ที่ง่ายเกินไป อย่างไรก็ตามฉันมั่นใจได้ในสิ่งนี้:

มันจะไม่เร็วเท่ากับการทำให้เป็นมาตรฐานเวกเตอร์ 4D นั่นคือสิ่งที่ควอเทอร์เนียนใช้เพื่อทำให้เป็นปกติหลังจากการหมุนเวียนต่อเนื่อง

Quaternion normalization มีราคาถูก ผู้เชี่ยวชาญแม้ฟื้นฟูหมุนเมทริกซ์จะไม่เป็นราคาถูก อีกครั้งประสิทธิภาพมีความสำคัญ

นอกจากนี้ยังมีอีกปัญหาหนึ่งที่เมทริกซ์ไม่สามารถทำได้อย่างง่ายดาย: การแก้ไขระหว่างสองทิศทางที่แตกต่างกัน

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

ในระบบแอนิเมชั่นส่วนใหญ่ในการคำนวณท่าทางของตัวละครในช่วงเวลาหนึ่ง ๆ จะมีการสอดแทรกระหว่างการเปลี่ยนแปลง สิ่งนี้ต้องการการแก้ไขการแปลงที่สอดคล้องกัน

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

สำหรับ quaternions สิ่งที่คุณต้องมีคือ 4D lerp ตามด้วย normalize นั่นคือทั้งหมด: ใช้สองควอเทอร์เนียนและสอดแทรกองค์ประกอบเชิงเส้น ทำให้ผลลัพธ์เป็นปกติ

หากคุณต้องการการแก้ไขที่มีคุณภาพดีขึ้น (และบางครั้งคุณก็ทำได้) คุณสามารถดึงlerp ทรงกลมออกมาได้ ทำให้การแก้ไขทำงานได้ดีขึ้นสำหรับการวางแนวที่แตกต่างกันมากขึ้น คณิตศาสตร์นี้เป็นมากขึ้นยากและต้องใช้การดำเนินงานมากขึ้นสำหรับการฝึกอบรมกว่า quaternions


8

ความคิดเห็น: Quaternions ดี

เมทริกซ์การหมุน: ข้อเสียเล็กน้อย : การคูณเมทริกซ์ช้ากว่าควอเทอร์เนียนประมาณ 2 เท่า ข้อได้เปรียบเล็กน้อย : การคูณเมทริกซ์ - เวกเตอร์เร็วขึ้น ~ 2 เท่าและมีขนาดใหญ่ ข้อเสียอย่างมาก : Normalization! Ghram-Shmit นั้นไม่สมมาตรซึ่งไม่ได้ให้คำตอบที่ถูกต้องในลำดับที่สูงกว่าเมื่อทำสมการเชิงอนุพันธ์ วิธีการที่ซับซ้อนกว่านั้นซับซ้อนและมีราคาแพงมาก

แกน (มุม = ความยาวของแกน) ข้อได้เปรียบเล็กน้อย : เล็ก ข้อเสียปานกลาง : การคูณและการนำไปใช้กับเวกเตอร์นั้นช้าด้วยทริก ข้อเสียปานกลาง : ความเป็นเอกฐานขั้วเหนือที่ความยาว = 2 * pi เนื่องจากทิศทางแกนทั้งหมดไม่ทำอะไรเลย โค้ดเพิ่มเติม (และการดีบัก) เพื่อทำการปรับขนาดใหม่โดยอัตโนมัติเมื่อเข้าใกล้ 2pi


6

โดยทั่วไปเราต้องการเพียงแค่การแมปจุด X = (x, y, z) กับจุดใหม่ X '= (x', y ', z') ภายใต้ข้อ จำกัด ที่ X ^ 2 = X '^ 2 และมีหลายสิ่งหลายอย่างที่ทำเช่นนี้

เราไม่ต้องการเพียงแค่นั้น มีความละเอียดอ่อนที่สำคัญมากที่มีผู้คนจำนวนมากพลาด โครงสร้างที่คุณกำลังพูดถึง (วาดสามเหลี่ยมและใช้ตรีโกณมิติ ฯลฯ ) จะหมุนเวกเตอร์หนึ่งไปยังอีกอันได้อย่างถูกต้อง แต่มีการหมุนเวียนมากมายที่จะทำเช่นนี้ โดยเฉพาะอย่างยิ่งฉันสามารถตามมาหลังจากคุณหมุนเสร็จแล้วจากนั้นหมุนทั้งระบบรอบเวกเตอร์ X ' นั่นจะไม่เปลี่ยนตำแหน่งของ X เลย การรวมกันของการหมุนของคุณและของฉันจะเทียบเท่ากับการหมุนครั้งเดียวอีกครั้ง (เนื่องจากการหมุนเป็นกลุ่ม ) โดยทั่วไปคุณต้องสามารถแสดงการหมุนเวียนดังกล่าวได้

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


5

เหตุผลทั่วไปที่ฉันเห็นคือไม่มีปัญหาการล็อกหรือปัญหาเกี่ยวกับตัวเลข

และเป็นเหตุผลที่ดี

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

นอกจากนี้บางรูปแบบของการแก้ไขจะกลายเป็นดีและง่ายที่จะทำเช่นSLERP

... หรือใช้ระบบพิกัดสองระบบที่ทับซ้อนกัน

จากมุมมองด้านประสิทธิภาพเหตุใดโซลูชันของคุณจึงดีกว่า

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


เมทริกซ์การหมุนยังทำเช่นเดียวกันรวมทั้งมีคุณสมบัติทางพีชคณิตมากขึ้นที่สามารถใช้งานได้อย่างเรียบร้อย นอกเหนือจากการจัดการเมทริกซ์นั้นเป็นสิ่งหนึ่งที่คอมพิวเตอร์ถนัดเป็นพิเศษ
paul23

4

ควรระลึกไว้เสมอว่าคุณสมบัติทั้งหมดที่เกี่ยวข้องกับการหมุนไม่ใช่คุณสมบัติที่แท้จริงของ Quaternions: เป็นคุณสมบัติของEuler-Rodrigues Parameterisationsซึ่งเป็นโครงสร้าง 4 องค์ประกอบจริงที่ใช้อธิบายการหมุน 3 มิติ

ความสัมพันธ์ของพวกเขากับควอเทอร์เนียนเป็นผลมาจากเอกสารของเคย์ลีย์ "เกี่ยวกับผลลัพธ์บางอย่างที่เกี่ยวข้องกับควอเทอร์เนียน" ซึ่งผู้เขียนสังเกตความสัมพันธ์ระหว่างการคูณควอเทอร์เนียนและการรวมกันของพารามิเตอร์ออยเลอร์ - โรดริเกซ ทฤษฎีควอเทอร์เนียนที่เปิดใช้งานนี้เพื่อนำไปใช้กับการแสดงการหมุนและโดยเฉพาะอย่างยิ่งกับการสอดแทรกระหว่างพวกเขา

คุณสามารถอ่านกระดาษที่นี่: https://archive.org/details/collmathpapers01caylrich แต่ในเวลานั้นไม่มีการเชื่อมต่อระหว่าง Quaternions และการหมุนและ Cayley ค่อนข้างแปลกใจที่พบว่ามี:

Olinde Rodrigues Liouville, tv, "Des lois géométriques qui régissent les déplacements d'un système solide [... ]" (หรือ Comb. Math Journal, t. iii หน้า 224 [6]) คงเป็นคำถามที่น่าสนใจสำหรับการพิจารณาการปรากฏตัวของสัมประสิทธิ์เหล่านี้ที่นี่

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


2

คำตอบที่ใครบางคนอาจอ่าน: มีปัญหาน่าเบื่อกับการเป็นตัวแทนทั้งหมด ควอเทอร์เนียนมีขนาดเล็กกว่าเมทริกซ์ แต่การคูณควอเทอร์เนียนไม่ใช่ผลิตภัณฑ์จุดเวกเตอร์เพียงอย่างเดียวและในความเป็นจริงใช้เวลาบนคอมพิวเตอร์มากกว่าผลิตภัณฑ์ดอทของเมทริกซ์ 3x3 สองตัว (คอมพิวเตอร์ใช้งานร่วมกับเมทริกซ์ธรรมดาได้ดีมาก)

Matrices แม้ว่าจะมีคุณสมบัติที่น่ารำคาญอื่น ๆ ตัวอย่างเช่นพวกมันไม่ใช่สิ่งมีชีวิตที่มั่นคงในระยะยาว เมื่อสร้างแบบจำลองการหมุนในพื้นที่ 3 มิติโดยปกติจะมีการสะสมการหมุนด้านบนซึ่งกันและกันเป็นเมทริกซ์การวางแนวซึ่งเป็นเพียงเมทริกซ์การหมุนเดียวที่จัดเก็บการวางแนวของกรอบอ้างอิง กระบวนการนี้จะมีการเพิ่มหลายล้านครั้งทำให้ O-matrix แตกต่างจากรูปแบบเมทริกซ์การหมุนที่เข้มงวด สิ่งนี้สามารถหลีกเลี่ยงได้โดยการกำหนดค่าเมทริกซ์ใหม่เป็นระยะ แต่มีเงื่อนไขเมื่อสิ่งนี้ไม่สำคัญ ได้แก่ กรณีที่ไม่มีการหมุนเวียนของเมทริกซ์เอกลักษณ์

คุณต้องการค้นหาการแทนค่ามุมแกน (หรือการแทนค่าควอเทอร์เนียน) ของการหมุนจากนั้นสร้างเมทริกซ์สำหรับสิ่งนั้น อัลกอริทึมส่วนใหญ่สร้างเวกเตอร์ที่เป็นศูนย์จากนั้นพบการหารศูนย์ในกรณีนี้ ในกรณีเหล่านี้เป็นความคิดที่ไม่ดีที่จะพยายามหลีกเลี่ยงกรณีเช่นนี้ด้วย "if 0 then ... " - ประเภทของวิธีแก้ปัญหาเนื่องจาก a) ส้อมทำงานช้าและ b) คุณยังสามารถจบ epsilon ของเครื่องจักรได้นอกเหนือจาก ความเป็นเอกฐานและจบลงด้วยข้อผิดพลาดที่น่ากลัว

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