2009-08-13 17 views
6

मैं सही से एक चौका फ्लिप करने की जरूरत है:
x = left to right
y = top to bottom
z = front to back
सौंप दिया दाएं से बाएं एक चौका Flipping निर्देशांक

कैसे मैं यह कर के बारे में जाना होगा:
x = left to right
y = front to back
z = top to bottom

सौंप दिया निर्देशांक जहां छोड़ दिया करने के लिए?

+1

कृपया बताएं कि आप वास्तव में क्या करने के लिए कोशिश कर रहे हैं क्या। जैसा कि, आपका प्रश्न समझ में नहीं आता है। यह समझना ठीक नहीं है कि कुछ कैसे करना है, लेकिन आपको पूरी कहानी देना है। मेरा ** अनुमान ** यह है कि आपके प्रश्न को कुछ ऐसा पढ़ना चाहिए जैसे "मेरे पास एक quaternion है जो 3 आयामों में घूर्णन का प्रतिनिधित्व करता है, लेकिन क्योंकि मैं एक समन्वय प्रणाली का उपयोग कर रहा हूं जो इस विशेष तरीके से * एक से अलग है *, quaternion मैं चाहता हूँ कि रोटेशन का प्रतिनिधित्व नहीं करता है। मैं इसे एक quaternion में कैसे परिवर्तित करूँगा जो रोटेशन मैं चाहता हूँ? " यह http://stackoverflow.com/questions/1263072 –

+1

का लगभग एक डुप्लिकेट है, मुझे अधिक देने की आवश्यकता नहीं थी, लेकिन हाँ यह 3 डी में घूर्णन, या शायद एक अभिविन्यास का प्रतिनिधित्व करता है जहां ज़ेड अक्ष का सामना करना पड़ रहा है। अब मुझे ज़ेड और वाई धुरी को अनिवार्य रूप से स्वैप करने की आवश्यकता है ताकि वाई धुरी का सामना हो रहा हो। और हाँ यह मेरे दूसरे प्रश्न के समान है क्योंकि मैं इसे प्राप्त करने की कोशिश कर रहा हूं लेकिन वे दो अलग-अलग प्रश्न हैं। – cmann

उत्तर

0

http://www.gamedev.net/community/forums/topic.asp?topic_id=459925

, व्याख्या अक्ष नकारना करने के लिए।

+0

आपके द्वारा उद्धृत पोस्ट वास्तव में एक अलग प्रश्न का उत्तर देता है - मूल पोस्टर का मतलब है "बाएं हाथ" का अर्थ "विपरीत दिशा में घूमना" है। यह वाई और जेड अक्ष को स्वैप करने से काफी अलग है क्योंकि cmann करना चाहता है। –

0

एक बार ऐसा करने के बाद, आपके पास अब quaternion नहीं है, यानी गुणा करने के सामान्य नियम वे काम नहीं करेंगे। पहचान i^2 = j^2 = k^2 = ijk = -1 अब जे और के (आपके दाहिने हाथ सिस्टम में वाई और जेड) को स्वैप कर देगा।

+0

तो क्या आप कह रहे हैं कि आप quaternion नहीं बदल सकते हैं? – cmann

+0

@cmann अगर आप सामान्य गुणों को संरक्षित नहीं करना चाहते हैं। मुझे लगता है कि कोई एलएच-क्वाटरनियंस के लिए नियमों का एक और सेट सेट कर सकता है ... लेकिन क्यों? आप क्या खत्म करने की कोशिश कर रहे हैं? शायद एक आसान तरीका है; शायद एलएच से आरएच समन्वय में परिवर्तित हो रहा है, अपने घूर्णन या जो कुछ भी कर रहा है, फिर एलएच सिस्टम में परिवर्तित हो रहा है? –

+1

मैं ब्लेंडर से ओपनजीएल – cmann

5

ठीक है, बस स्पष्ट होने के लिए, quaternions वास्तव में सौहार्द नहीं है। वे हाथहीन हैं (quaternions पर विकिपीडिया लेख देखें)। हालांकि, quaternion से एक मैट्रिक्स में रूपांतरण के साथ जुड़ाव है। देखें http://osdir.com/ml/games.devel.algorithms/2002-11/msg00318.html यदि आपका कोड इस रूपांतरण को निष्पादित करता है, तो आपको बाएं हाथ मैट्रिक्स या दाहिने हाथ मैट्रिक्स में कनवर्ट करने के लिए दो अलग-अलग फ़ंक्शन हो सकते हैं।

उम्मीद है कि मदद करता है।

+2

में डेटा निर्यात करने की कोशिश कर रहा हूं, मुझे लगता है कि उपयोगकर्ता वास्तव में क्या पूछ रहा है "मेरे आधार की सौहार्द को बदलने से मेरे घूर्णन quaternion को कैसे प्रभावित करता है?" जो एक वैध सवाल है। अभिविन्यास वैक्टरस्पेस के बारे में एक डाटाम है, न कि इसके परिवर्तन (quaternion और मैट्रिक्स प्रस्तुतियों सहित।) – rschwieb

+0

कि osdir धागा सही नहीं है। Quaternion से 3x3 मैट्रिक्स में रूपांतरण किसी भी प्रकार की सौहार्द शामिल नहीं है। यह पूरी तरह से "मैट्रिक्स एम के लिए हल करें जैसे कि एमवी = क्यूवी" (मान लें कि आप कॉलम वैक्टर का उपयोग कर रहे हैं)। व्युत्पन्न के लिए http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToMatrix/ देखें। –

1

मुझे नहीं लगता कि इनमें से कोई भी जवाब सही है।

एंड्रेस सही है कि 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 है (सौहार्द स्विच के परिणामस्वरूप)।

हाथ से चलने वाला जवाब यह है कि सौदा दो बार स्विच हो रहा है, इसलिए परिणाम में कोई सौहार्द स्विच नहीं है।गहन उत्तर इस तथ्य से है कि समानता परिवर्तन ऑपरेटर के कुछ पहलुओं को संरक्षित करता है, लेकिन मेरे पास सबूत बनाने के लिए पर्याप्त गणित नहीं है।

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

3

मुझे लगता है कि समाधान है:

Given: Right Hand: {w,x,y,z} 
Option 1: Left Hand: {y,-z,-w,-x} 
Option 2: Left Hand: {-y,z,w,x} (equivalent) 
+0

यह वास्तव में यहां काम करता है; एकमात्र चीज यह थी कि हमें {y, z, -w, x} की आवश्यकता थी (इसलिए 'y' को निषेध की आवश्यकता थी)। ऐसा इसलिए हो सकता है क्योंकि मैं कुछ गलत कर रहा हूं; यह एक ओपनजीएल ऐप में था जहां मैं एक मॉडल व्यू मैट्रिक्स की गणना करता हूं, फिर इसे एकता के लिए quaternion के रूप में भेजें और वहां कैमरे को सेट करने का प्रयास करें। –

+0

यह तब तक काम नहीं करना चाहिए जब तक आप वास्तव में अजीब quaternion डेटा संरचनाओं का उपयोग नहीं कर रहे हैं। डब्ल्यू वैल्यू पारंपरिक रूप से टुपल में पहला या अंतिम मान है, और यह सीधे किसी भी स्थानिक दिशा से जुड़ा हुआ नहीं है, इसलिए इसे तीसरे स्थान पर कभी खत्म नहीं होना चाहिए। – Sty

+0

मैं एक हाथ से एक हड्डी के घूर्णन को अलग-अलग सौंपने के साथ समायोजित करने की कोशिश कर रहा था, मुझे लगता है कि यह मेरी सुन्दरता से हल हो गया है! धन्यवाद! – Logic1

संबंधित मुद्दे