यह अक्सर मामला है कि आप आगे के एक सेट से एक मैट्रिक्स को बदलना चाहते हैं/सही/ऊपर सम्मेलनों आगे/सही/ऊपर सम्मेलनों का एक और सेट है। उदाहरण के लिए, आरओएस जेड-अप का उपयोग करता है, और अवास्तविक वाई-अप का उपयोग करता है। प्रक्रिया काम करती है कि आपको एक सौहार्द-फ्लिप करने की आवश्यकता है या नहीं।
ध्यान दें कि वाक्यांश "दाएं हाथ से बाएं हाथ से स्विच" अस्पष्ट है। कई बाएं हाथ के आगे/दाएं/ऊपर सम्मेलन हैं। उदाहरण के लिए: आगे = z, दाएं = एक्स, ऊपर = वाई; और आगे = एक्स, दाएं = वाई, ऊपर = जेड। आपको वास्तव में इसके बारे में "" के बारे में सोचना चाहिए, मैं आरओएस की अगली/दाएं/ऊपर की अवास्तविक धारणा को आगे/दाएं/ऊपर "के रूप में कैसे परिवर्तित करूं?
तो, यह एक मैट्रिक्स बनाने के लिए एक सीधा काम है जो सम्मेलनों के बीच परिवर्तित होता है। के मान लेते हैं कि हम उस किया है और अब हम
mat4x4 unrealFromRos = /* construct this by hand */;
mat4x4 rosFromUnreal = unrealFromRos.inverse();
है चलो कहते हैं कि ओपी एक मैट्रिक्स है कि आरओएस से आता है, और वह अवास्तविक में इसका इस्तेमाल करना चाहता है। उसका मूल मैट्रिक्स एक आरओएस-स्टाइल वेक्टर लेता है, इसमें कुछ सामान होता है, और एक आरओएस-शैली वेक्टर उत्सर्जित करता है। उसे एक मैट्रिक्स की आवश्यकता होती है जो एक अवास्तविक-शैली वेक्टर लेता है, वही सामान करता है, और एक अवास्तविक-शैली वेक्टर उत्सर्जित करता है। ऐसा लगता है:
mat4x4 turnLeft10Degrees_ROS = ...;
mat4x4 turnLeft10Degrees_Unreal = unrealFromRos * turnLeft10Degrees_ROS * rosFromUnreal;
यह स्पष्ट होना चाहिए कि यह क्यों काम करता है। आप एक अवास्तविक वेक्टर लेते हैं, इसे आरओएस-शैली में परिवर्तित करते हैं, और अब आप उस पर आरओएस-स्टाइल मैट्रिक्स का उपयोग कर सकते हैं। यह आपको एक आरओएस वेक्टर देता है, जिसे आप वापस अवास्तविक शैली में बदल देते हैं।
गेरिट का जवाब बिल्कुल सामान्य नहीं है, क्योंकि सामान्य मामले में, rosFromUnreal! = UnrealFromRos। यह सच है यदि आप केवल एक अक्ष को बदल रहे हैं, लेकिन यदि आप एक्स-> वाई, वाई-> जेड, जेड-> एक्स को परिवर्तित करने की तरह कुछ कर रहे हैं तो सच नहीं है। मैंने पाया है कि यह हमेशा एक सही मैट्रिक्स का उपयोग करने के लिए कम त्रुटि प्रवण है और इन सम्मेलन स्विच करने के विपरीत है, बजाय सही सदस्यों को फ़्लिप करने वाले विशेष कार्यों को लिखने की कोशिश करने के बजाय।
इस प्रकार का मैट्रिक्स ऑपरेशन inverse(M) * X * M
बहुत कुछ आता है। आप इसे "आधार परिवर्तन" ऑपरेशन के रूप में सोच सकते हैं; इसके बारे में और जानने के लिए, https://en.wikipedia.org/wiki/Matrix_similarity देखें।
मुझे यहां भ्रमित किया जा सकता है, आप केवल y और z मानों को स्वैप क्यों नहीं कर सकते? और मुझे लगता है कि आपका मतलब 4x4x4 मैट्रिक्स है, क्योंकि 4x4 में ज़ेड नहीं होगा। – derobert
बस एक 4x4 मैट्रिक्स। बस वाई और जेड अनुवाद मानों को फ़्लिप करना काम नहीं लगता है और एक मैट्रिक्स में घूर्णन के लिए एक ऑपरेशन भी शामिल है, इसलिए मैं समस्या को समझ रहा हूं। – cmann
मुझे लगता है कि किसी को भी आपके प्रश्न का उत्तर देने से पहले आपको यह स्पष्ट करना होगा कि आप क्या चाहते हैं। एक वेक्टर '(एक्स, वाई, जेड, डब्ल्यू) 'के लिए, आपने समझाया है कि" दाएं हाथ से बाएं हाथ से बदलने "का अर्थ है कि आप इसे वेक्टर' (x, z, y, w) में बदलते हैं। ', लेकिन यह बिल्कुल स्पष्ट नहीं है कि वाक्यांश का अर्थ मैट्रिक्स के लिए क्या है। उदाहरण के लिए, मान लें कि एक मैट्रिक्स वेक्टर '(1,2,3,4)' वेक्टर '(5,6,7,8) 'लेता है, फिर जब आप" दाएं हाथ से बाएं हाथ से बदलते हैं " क्या इसे '(1,2,3,4)' से '(5,7,6,8)' लेना चाहिए, या इसे '(1,3,2,4)' से '(5,7,6 , 8) ', या आप इसका मतलब कुछ और करने के लिए किया था? –