मुझे नहीं लगता कि इनमें से कोई भी जवाब सही है।
एंड्रेस सही है कि quaternions में सौहार्द नहीं है। हस्तक्षेप (या जिसे मैं "अक्ष सम्मेलन" कहूंगा, वह एक संपत्ति है जो मनुष्य लागू होती है; इस प्रकार हम एक्स, वाई, जेड अक्षों के लिए "आगे, दाएं, ऊपर" की हमारी अवधारणाओं को मानचित्रित करते हैं।
ये चीज़ें सत्य हैं :
- शुद्ध रोटेशन मैट्रिक्स (ओर्थोगोनल, निर्धारक 1, आदि) एक इकाई चार का समुदाय के लिए परिवर्तित किया जा सकता है और वापस, मूल मैट्रिक्स उबरने
- मैट्रिसेस कि नहीं शुद्ध रोटेशन (विशेष रूप से कर रहे हैं, लोगों को। जो एक धुरी को फ़्लिप करता है और इसलिए निर्धारक होता है -1) को यूनिट क्वाटरनियन और बैक में परिवर्तित नहीं किया जा सकता है। आपकी mat_to_quat() दिनचर्या उड़ नहीं सकती है, लेकिन यह आपको नहीं देगी आप सही जवाब (अर्थ में quat_to_mat (mat_to_quat (एम)) == एम)।
- एक परिवर्तन-आधार-आधार जो स्वैप को स्वैप करता है, निर्धारक -1 है। यह एक रोटेशन (शायद पहचान) के बराबर है और कुछ अक्ष के बारे में एक मिररिंग है।
एक quaternion के आधार को बदलने के लिए, आरओएस (दाएं हाथ से) एकता (बाएं हाथ) से कहें, हम विधि का उपयोग कर सकते हैं।
mat3x3 rosToUnity = /* construct this by hand */;
mat3x3 unityToRos = rosToUnity.inverse();
quat q_ros = ...;
mat3x3 m_unity = rosToUnity * mat3x3(q_ros) * unityToRos;
quat q_unity = quat(m_unity);
लाइन्स 1-4 बस https://stackoverflow.com/a/39519079/194921 की विधि इस प्रकार हैं: कैसे आप एक मैट्रिक्स पर एक परिवर्तन के- आधार करते हैं।
लाइन 5 दिलचस्प है। हम जानते हैं mat_to_quat() केवल शुद्ध-रोटेशन मैट्रिस पर काम करता है। हम कैसे जानते हैं कि m_unity एक शुद्ध रोटेशन है? यह निश्चित रूप से कल्पना की जा सकती है कि यह नहीं है, क्योंकि एकता टोरोस और rosToUnity दोनों निर्धारक -1 है (सौहार्द स्विच के परिणामस्वरूप)।
हाथ से चलने वाला जवाब यह है कि सौदा दो बार स्विच हो रहा है, इसलिए परिणाम में कोई सौहार्द स्विच नहीं है।गहन उत्तर इस तथ्य से है कि समानता परिवर्तन ऑपरेटर के कुछ पहलुओं को संरक्षित करता है, लेकिन मेरे पास सबूत बनाने के लिए पर्याप्त गणित नहीं है।
ध्यान दें कि यह आपको सही परिणाम देगा, लेकिन यदि आप एकता मैट्रिक्स एक साधारण मैट्रिक्स (कहें, केवल धुरी स्वैप के साथ) तो आप इसे अधिक तेज़ी से कर सकते हैं। लेकिन आपको यहां गणित का विस्तार करके उस तेज विधि को प्राप्त करना चाहिए।
स्रोत
2016-09-15 20:08:57
कृपया बताएं कि आप वास्तव में क्या करने के लिए कोशिश कर रहे हैं क्या। जैसा कि, आपका प्रश्न समझ में नहीं आता है। यह समझना ठीक नहीं है कि कुछ कैसे करना है, लेकिन आपको पूरी कहानी देना है। मेरा ** अनुमान ** यह है कि आपके प्रश्न को कुछ ऐसा पढ़ना चाहिए जैसे "मेरे पास एक quaternion है जो 3 आयामों में घूर्णन का प्रतिनिधित्व करता है, लेकिन क्योंकि मैं एक समन्वय प्रणाली का उपयोग कर रहा हूं जो इस विशेष तरीके से * एक से अलग है *, quaternion मैं चाहता हूँ कि रोटेशन का प्रतिनिधित्व नहीं करता है। मैं इसे एक quaternion में कैसे परिवर्तित करूँगा जो रोटेशन मैं चाहता हूँ? " यह http://stackoverflow.com/questions/1263072 –
का लगभग एक डुप्लिकेट है, मुझे अधिक देने की आवश्यकता नहीं थी, लेकिन हाँ यह 3 डी में घूर्णन, या शायद एक अभिविन्यास का प्रतिनिधित्व करता है जहां ज़ेड अक्ष का सामना करना पड़ रहा है। अब मुझे ज़ेड और वाई धुरी को अनिवार्य रूप से स्वैप करने की आवश्यकता है ताकि वाई धुरी का सामना हो रहा हो। और हाँ यह मेरे दूसरे प्रश्न के समान है क्योंकि मैं इसे प्राप्त करने की कोशिश कर रहा हूं लेकिन वे दो अलग-अलग प्रश्न हैं। – cmann