क्या 3 डी रोटेशन मैट्रिक्स (4x4) को इसके घटक भागों (रोटेशन, स्केल, आदि) में बदलना संभव है?


11

अधिक ठोस होने के लिए, मैं एक iOS ऐप पर काम कर रहा हूं, और एक CATransform3Dसंरचना (मूल रूप से एक 4x4 ट्रांसफ़ॉर्म सरणी) है।

क्या यह मैट्रिक्स अलग-अलग सभी "ऑपरेशन" को कम करना संभव है? कितनी चीजें घूमती हैं, पैमाने आदि, इसका मतलब है?

जवाबों:


10

आप मूल रूपांतरण में मैट्रिक्स म=टीआरएस को विघटित कर सकते हैं : अनुवाद, स्केलिंग और रोटेशन। इस मैट्रिक्स को देखते हुए:

म=[ए00ए01ए02ए03ए10ए1 1ए12ए13ए20ए21ए22ए230001]

आप पिछले स्तंभ का उपयोग निरीक्षण द्वारा अनुवाद विघटित कर सकते हैं ।टी=(ए03,ए13,ए23)

स्केलिंग के लिए, हम जानते हैं कि मैट्रिक्स के पहले तीन कॉलम आधारों (अक्षों) से मेल खाते हैं। हम इन वैक्टरों की लंबाई / मान के आधार पर पैमाना प्राप्त कर सकते हैं, अर्थात आधारों को कितना छोटा किया गया था। तो पैमाने जहां:रों=(रों0,रों1,रों2)

रों0=‖(ए00,ए10,ए20)‖रों1=‖(ए01,ए1 1,ए21)‖रों2=‖(ए02,ए12,ए22)‖

अब आप पैमाने, आप इसे का उपयोग करते हुए छुटकारा पा सकते हैं है उप मैट्रिक्स कि मेल खाती है करने के लिए पैमाने का प्रतिलोम के साथ मैट्रिक्स गुणा करके के लिए प्राप्तआर एस एस - 1 आर3×3आरएसएस-1आर

(आरएस)एस-1=[ए00ए01ए02ए10ए1 1ए12ए20ए21ए22][रों0000रों1000रों2]-1=[ए00ए01ए02ए10ए1 1ए12ए20ए21ए22][1/रों00001/रों10001/रों2]

इस प्रकार ( ):(आरएस)एस-1=आरमैं=आर

आर=[ए00/रों0ए01/रों1ए02/रों2ए10/रों0ए1 1/रों1ए12/रों2ए20/रों0ए21/रों1ए22/रों2]

यह अंतिम रोटेशन मैट्रिक्स है। आप आगे कई तरीकों का उपयोग करके इसे विघटित कर सकते हैं। इसे लंबा छोड़ दिया जाता है, लेकिन आप रोटेशन मैट्रिक्स को डिकम्पोज करने के लिए खोज सकते हैं ।


यह विधि केवल अनुवाद, स्केलिंग और रोटेशन (मूल मैट्रिक्स शायद अन्य प्रकार के परिवर्तनों का परिणाम) के रूप में एक समान मूल्य देती है। यदि आप आगे विघटित कोणों का उपयोग करते हैं, तो यह रोटेशन कोणों के साथ फ़्लोटिंग पॉइंट परिशुद्धता के साथ समस्या हो सकती है, कम्प्यूटिंग में राउंडिंग त्रुटियां जमा हो सकती हैं। आपको इसका उपयोग तब तक नहीं करना चाहिए जब तक आप स्वयं मैट्रिक्स का निर्माण नहीं करते हैं।

यदि आप मैट्रिक्स का निर्माण करते हैं और चाहते थे कि अपघटन हो जाए, ताकि अनुवाद, स्केल और रोटेशन को अलग-अलग और स्वतंत्र रूप से संपादित करने और प्रदर्शित करने में सक्षम हो , तो संभवतया सबसे साफ-सुथरा क्यों है क्योंकि , के घटकों को संग्रहीत करना है और एक ट्रांसफॉर्मर वर्ग में वैक्टर के रूप में व्यक्तिगत रूप से (शायद रोटेशन के लिए चतुर्धातुक)। केवल तभी जब आपको ट्रांसफ़ॉर्म मैट्रिक्स की आवश्यकता हो, इन घटकों से एक मैट्रिक्स का निर्माण करें (आप मैट्रिक्स को कैश कर सकते हैं जब तक कि कुछ घटक नहीं बदला जाता है)।टीरोंआरटीआरएस


2
क्या आप स्पष्ट कर सकते हैं कि फ्लोटिंग-पॉइंट परिशुद्धता के साथ समस्याएं क्या हैं? मुझे इस पद्धति में ऐसा कुछ भी दिखाई नहीं दे रहा है जो सटीक समस्या पैदा करे, जब तक कि यह पैमाना वास्तव में चरम न हो। इसके अलावा, यह ध्यान देने योग्य है कि यह विधि विफल हो सकती है यदि मैट्रिक्स को मैट्रिस के अनुक्रम से बनाया गया था जिसमें गैर-समान पैमाने और घुमाव दोनों शामिल हैं। मैट्रिक्स बाहर नहीं बारी उस मामले में एक रोटेशन हो जाएगा, लेकिन कुछ कतरनी शामिल होंगे। आर
— नाथन रीड

2
सभी फ़्लोटिंग पॉइंट नंबरों में आंतरिक (बाध्य) त्रुटि होती है। जब भी आप ऑपरेशन करते हैं, और विशेष रूप से जोड़ या घटाव करते हैं, तो आप सीमा को बढ़ाते हुए त्रुटि को कम करते हैं। अपघटन एल्गोरिथ्म में छिपे हुए कई अतिरिक्त संचालन हैं (मैट्रिक्स गुणा और स्केल परिमाण गणना दोनों) और एक वर्गमूल (स्केल में)। आगे के अपघटन आगे त्रुटि का परिचय देगा।
— टिम्बो

1
@ टिम्बो यहाँ कोई पूर्ण मैट्रिक्स गुणन नहीं है, हालाँकि, मैट्रिक्स के स्तंभों को व्युत्क्रम तराजू से गुणा करें। और एक वेक्टर परिमाण में सभी सकारात्मक मात्राओं को शामिल करना शामिल है, इसलिए वहां कोई भयावह रद्द नहीं है; यह बहुत सापेक्ष त्रुटि उत्पन्न नहीं करता है, AFAICT। वैसे भी, लेखक ने स्पष्ट किया कि वे रोटेशन मैट्रिक्स को आगे यूलर एंगल या इस तरह के डिकम्पोजिंग के बारे में बात कर रहे हैं, जो अधिक समझ में आता है।
— नाथन रीड

साभार - शानदार जवाब अनुवर्ती: मूल मैट्रिक्स को वापस लाने के लिए, मैं मान रहा हूं कि हमें पहचान मैट्रिक्स से शुरू होकर संचालन के एक निश्चित क्रम का पालन करने की आवश्यकता है। क्या यह आदेश टीआरएस होगा?
— elsurudo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.