दुनिया की धुरी के आसपास चतुर्धातुक और घूर्णन


11

डिस्क्लेमर: मैं एक पेशेवर गेम प्रोग्रामर हूं, और ज्यादातर दिनों क्वाटर का उपयोग करता हूं, लेकिन वे मेरे लिए काले जादू के करीब हैं। मैं गणित के साथ अपेक्षाकृत घर पर हूं, लेकिन काल्पनिक संख्या हमेशा मुझे भ्रमित करती है। मैं quats को उपयोगी मानता हूं और एक से अधिक बार उलटा गुणा करता हूं। मैं उनके बारे में तर्क करने की कोशिश करता हूं जैसे मैं सीमित सफलता के साथ मैट्रिसेस के साथ हूं।

किसी भी तरह....

क्या मुझे चकित करता है, निम्नलिखित है। जब मैं किसी वस्तु को उसके चारों ओर घुमाना चाहता हूं तो वह स्थानीय धुरी होती है, तो मैं उसके रोटेशन को उस चतुर्धातुक के साथ गुणा करता हूं जो उस रोटेशन का प्रतिनिधित्व करता है जिसे मैं लागू करना चाहता हूं। इसलिए यह स्थानीय अंतरिक्ष में एक रोटेशन है।

अब अगर मैं इसे विश्व अंतरिक्ष में एक धुरी के चारों ओर घूमना चाहता हूं, तो मेरा तर्क यह होगा: विश्व अंतरिक्ष में एक चतुर्भुज के रूप में घुमाव लें। इस चतुर्भुज के साथ मेरी वस्तु के घूर्णन का व्युत्क्रम गुणा करें। यह मेरी दुनिया को स्थानीय अंतरिक्ष में घुमाएगा। इस नए चतुर्भुज के साथ मेरी परिक्रमा को गुणा करें। अर्थात: newRot = oldRot * (व्युत्क्रम OldRot * worldRot)

हालाँकि, मुझे जो करने की आवश्यकता है वह है newRot = oldRot * (व्युत्क्रम oldRot * worldRot) * oldRot।

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

जो कोई भी मुझे यह समझा सकता है जैसे मैं 5 साल का हूं?


क्या यह मैट्रिक्स के अनुवादों और बारीकियों की तरह एक सा नहीं है (यानी आपको अपनी वस्तु को केंद्र में ले जाने, घुमाने और फिर वापस ले जाने की आवश्यकता है, जब आप किसी वस्तु को उसके चारों ओर घुमाना चाहते हैं: Minv_transl * Mrot * Mtransl)
वाल्डम ऑग

I try to reason about them like I would with matrices- तब आप सही रास्ते पर हैं। यदि आप समझ गए हैं कि मैट्रेस का उपयोग करके ऑब्जेक्ट की कुल्हाड़ियों और दुनिया की कुल्हाड़ियों को कैसे घुमाया जाए, तो आप क्वाटर्न्स का उपयोग करके भी ऐसा कर सकते हैं। गुणन क्रम दोनों के लिए समान है, मेट्रिसेस और क्वाटरनियन।
माईक सेमर

जवाबों:


11

बटेरियन साहचर्य हैं:

आप उल्लेख करते हैं कि आपका समाधान है:

newRot = oldRot * (inverse oldRot * worldRot) * oldRot

जो निम्नानुसार है:

newRot = oldRot * inverse oldRot * worldRot * oldRot

जो निम्नानुसार है:

newRot = identity * worldRot * oldRot
newRot = worldRot * oldRot

जो वास्तव में आपको वापस लाता है जो वास्तव में हो रहा है:

localTransformed = oldRot * rot
worldTransformed = rot * oldRot

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


1
पहले भाग के लिए +1, दूसरा भाग थोड़ा भ्रामक है। यदि आप 'लोकल रॉट' और 'वर्ल्डरोट' के बजाय अंतिम कोड नमूने में केवल 'रोट' का उपयोग करते हैं, तो उदाहरण स्पष्ट हो जाता है। अन्यथा यह तात्पर्य है कि rots ही किसी भी तरह से अलग हैं । लेकिन अंतर केवल गुणन क्रम में होता है, जैसा कि आपने दिखाया है, न कि अलग-अलग बटेरियन ('लोकलरोट' और 'वर्ल्डरोट') में। 'localTransformed' और 'worldTransformed' इस रूप में बेहतर होंगे: 'RotatedAroundLocalAxis' और 'RotatedAroundWorldAxis'। यह स्वयं समीकरणों की व्याख्या करेगा और अंतिम पैराग्राफ को अप्रचलित बना देगा, जिसमें कुछ खामियां हैं।
माईक सेमर

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

+1 @ माईक शायद आप रोटेशन के बीच उदासीनता और गुणन क्रम के मुद्दे को स्पष्ट करने के लिए एक अलग जवाब लिख सकते हैं? इस तरह से टिप्पणी के लिए धन्यवाद!
मैक्स डोहमे

आह, अब यह समझ में आता है। मुझे नहीं पता था (ouch, यह सामान्य प्रश्न में था) कि quaternion गुणन साहचर्य था, इसलिए वास्तव में रोटेशन और यह उलटा है प्रत्येक अभिभावक को रद्द करें, मुझे आवश्यक अंतर्दृष्टि दे, एक के दाईं ओर एक स्थानीय रोटेशन है और एक पर है। बाईं ओर जो मूल रूप से कहता है कि 'मूल स्थान में रोटेशन लागू करें' या 'स्थानीय अंतरिक्ष में रोटेशन लागू करें' .... मैट्रिस से अलग नहीं। एक बार जब आप इसे देखते हैं तो बहुत अच्छा लगता है! धन्यवाद!
काज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.