เป็นไปได้หรือไม่ที่จะเปลี่ยนเมทริกซ์การหมุน 3 มิติ (4x4) เป็นชิ้นส่วนของมัน (การหมุน, สเกล, ฯลฯ )?


11

เพื่อให้เป็นรูปธรรมมากขึ้นฉันกำลังทำงานกับแอพ iOS และมีโครงสร้างCATransform3D(โดยทั่วไปคืออาร์เรย์แปลง 4x4)

เป็นไปได้ไหมที่จะอนุมาน "การดำเนินการ" ที่แตกต่างกันของเมทริกซ์นี้? สิ่งต่าง ๆ เช่นการหมุน, สเกล, ฯลฯ มันหมายถึงอะไร?

คำตอบ:


10

คุณสามารถแยกเมทริกซ์ลงในการแปลงพื้นฐาน: การแปลการปรับสเกลและการหมุน รับเมทริกซ์นี้:M=TRS

M=[a00a01a02a03a10a11a12a13a20a21a22a230001]

t=(a03,a13,a23)

s=(s0,s1,s2)

s0=(a00,a10,a20)s1=(a01,a11,a21)s2=(a02,a12,a22)

ตอนนี้คุณมีขนาดที่คุณสามารถกำจัดมันใช้ย่อยเมทริกซ์ที่สอดคล้องกับโดยการคูณเมทริกซ์ที่มีการผกผันของขนาดการ รับ3×3RSS1R

(RS)S1=[a00a01a02a10a11a12a20a21a22][s0000s1000s2]1=[a00a01a02a10a11a12a20a21a22][1/s00001/s10001/s2]

ดังนั้น ( ):(RS)S1=RI=R

R=[a00/s0a01/s1a02/s2a10/s0a11/s1a12/s2a20/s0a21/s1a22/s2]

นี่คือเมทริกซ์การหมุนรอบสุดท้าย คุณสามารถย่อยสลายมันได้หลายวิธี มันจะออกยาว แต่คุณสามารถค้นหาเน่าเฟะเมทริกซ์หมุน


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

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


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

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

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

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