2009-11-06 16 views
6

Quaternions उनके बीच इंटरपोलेट घूर्णन के लिए अच्छे हैं। अब तक तो सब ठीक है।क्या मैं यॉ/पिच/रोल से बनाए गए दो क्वाटरनियंस से रोटेशन को अलग कर सकता हूं?

यदि मेरे पास नेटवर्किंग गेम है, तो क्या यह रोटेशन को vector3f के रूप में स्थानांतरित करने के लिए पर्याप्त होगा या क्या मुझे क्वाटरनियन का उपयोग करना चाहिए? खेल को आसान बनाने के लिए मुझे अंतिम प्रेषित रोटेशन और वर्तमान के बीच अंतर करना पड़ सकता है।

लेकिन क्या मैं दो क्वाटरनियंस के बीच घूर्णन को घुमा सकता हूं जो यॉ/पिच/रोल से बनाए गए थे?

Quaternion a = Quaternion.FromYawPitchRoll(x1,y1,z1); 

Quaternion b = Quaternion.FromYawPitchRoll(x2,y2,z2); 

a.Interpolate(b, value); // will this work correctly? 

उत्तर

6

हाँ आप कर सकते हैं। यूलर कोण के साथ समस्या जिम्बल लॉक है, कुछ ओरिएंट आयनों की स्वतंत्रता की एक कम डिग्री के साथ समाप्त होता है। जब आप यूलर कोण से quaternion में कनवर्ट करते हैं, तो उस समस्या को हल किया जाता है। आप जानकारी के किसी भी नुकसान के बिना लगभग किसी भी 3 डी-अक्ष प्रतिनिधित्व को quaternion रूप और पीछे में परिवर्तित कर सकते हैं। Matrices isotropic (कोई पैमाने या कतरनी) होना चाहिए, और वैक्टर इकाई लंबाई की होना चाहिए।

quaternions के बीच रैखिक इंटरपोलेशन स्लर्प कहा जाता है। Quaternions के बीच वर्गबद्ध interpolation टीम कहा जाता है। चूंकि quaternions तीन काल्पनिक भागों के साथ जटिल संख्याएं हैं, वही समीकरण जो वास्तविक संख्याओं और वैक्टरों पर काम करते हैं, quaternions पर लागू होते हैं। गुणा, जोड़, लॉग और एक्सपोनिएशनिंग करते समय बस सही नियमों का उपयोग करना याद रखें। यह कल्पना करने में मदद कर सकता है कि काल्पनिक भागों I, j और k एक साथ धुरी वेक्टर बनाते हैं, जबकि वास्तविक भाग एक पैमाने है।

+0

आपको उल्लेख करना चाहिए (जैसा कि @ जस्टिकल ने किया था) कि सादे-ओल 'लेर्प कई मामलों में quaternions के लिए ठीक काम करता है। –

+0

मैंने पढ़ा है कि यूलर रोटेशन स्पष्ट नहीं हैं, इसलिए आप उनके बीच अंतर नहीं कर सकते हैं। क्या उन्हें quaternions में परिवर्तित करने वास्तव में उन्हें स्पष्ट बनाते हैं, जो मेरे लिए थोड़ा अजीब लग रहा है। – codymanix

+0

@ कोडीमेनिक्स: शायद, लेकिन यह मामला है। आप _use_ euler कोण सीधे या तो नहीं कर सकते हैं।चूंकि quaternions की स्वतंत्रता की एक अतिरिक्त डिग्री है, इसलिए वे जिम्बल लॉक के साथ पूरी समस्या से बचते हैं, इससे कोई फर्क नहीं पड़ता कि पिछले प्रतिनिधित्व क्या था, या बाद में इसे किस प्रकार परिवर्तित किया गया। यूलर कोण -> quaternion -> मैट्रिक्स पूरी तरह से कोशेर है। –

5

आप quaternions के बीच interpolate कर सकते हैं। मैंने एक बार एक quaternion- आधारित keyframe एनीमेशन जनरेटर लिखा था जो कुछ विशिष्ट बिंदुओं से एक प्रतिपादन प्रणाली के लिए फ्रेम उत्पन्न किया। मैं कोड साझा नहीं कर सकता क्योंकि इसे वर्गीकृत किया गया है :-(

इस विषय के बारे में 80 के दशक में कभी-कभी सिगग्राफ कार्यवाही में एक पेपर था। Quaternions का मुख्य लाभ यह है कि यूलर कोणों के साथ कोई एकवचन नहीं है ।

मोची, "Quaternion वक्र के साथ animating रोटेशन" केन SIGGRAPH '85, सान फ्रांसिस्को, जुलाई 22-26 1985, वॉल्यूम 19, नंबर 3, 1985,:।।

आह, यहाँ संदर्भ है एसीएम 0-89791-166-0/85/007/0245, पीपी 245-254

+0

Quaternions गिंबल लॉक से पीड़ित नहीं हैं, लेकिन उनके पास अस्पष्टता है। [1, आई, जे, के] और [-1, आई, जे, के] एक ही उन्मुखीकरण का प्रतिनिधित्व करते हैं। मुझे यह अजीब लगता है कि -1 वैक्टर के लिए सामान्य 180 की बजाय जटिल विमान में 360 डिग्री घूर्णन का प्रतिनिधित्व करता है :-) –

+2

कुंजीफ्रेम के रूप में उपयोग किए जाने पर यह काफी अस्पष्ट नहीं है। (1,0,0,0) -> (0,0,0,0) -> (1,0,0,0) फिर एक और आंदोलन का प्रतिनिधित्व करता है (1,0,0,0) -> (0,0 , 0,0) -> (- 1,0,0,0) हालांकि प्रारंभ और अंत स्थिति और यहां तक ​​कि मध्यवर्ती स्थिति समान हैं। – WorldSEnder

4

हां और नहीं। यहां एक अच्छी चर्चा है: http://number-none.com/product/Understanding%20Slerp,%20Then%20Not%20Using%20It/

ध्यान दें कि इससे कोई फर्क नहीं पड़ता कि आपको quaternions कैसे मिला, वही नियम लागू होते हैं।

संपादित करें: मैंने कई परियोजनाओं पर पेपर में प्रस्तुत स्रोत कोड का उपयोग किया है और इसके लिए प्रतिबद्ध हो सकता है।

+0

एक व्यक्ति के रूप में उतनी चर्चा नहीं है जिसने स्पष्ट रूप से अपना मन बना लिया है ;-) यदि आप इंटरपोलेशन के लिए quaternions का उपयोग करते हैं, तो आपको कुछ अजीब गुणों के साथ निपटना होगा। मुझे लगता है कि हम प्रश्न के लेखक को संदेह के लाभ दे सकते हैं; कि उसने इस बारे में सोचा है। फिर भी एक अच्छा पढ़ा। –

+0

"चर्चा" "रान" के लिए एक विनम्र शब्द है :-) – Justicle

+0

हाँ, मैं सिर्फ विनम्रतापूर्वक अपनी गेंदों को दबाने वाला हूं ;-) आखिरी सप्ताहांत! –