2012-06-03 16 views
8

के बीच रोटेशन मैट्रिक्स प्राप्त करें मेरे पास इस समय एआर के लिए मार्कर डिटेक्शन सिस्टम है, यह दृश्य में मार्कर का पता लगाता है और दृश्य में प्रत्येक मार्कर के लिए कैमरे के ट्रांसफॉर्म मैट्रिक्स देता है।दो दो ट्रांसफॉर्म मैट्रिक्स (एक्सएनए)

मान लें कि मुझे 2 मार्कर मिल गए हैं। मैं रोटेशन मैट्रिक्स को खोजने की कोशिश कर रहा हूं, मुझे अन्य मार्कर के अभिविन्यास से मेल खाने के लिए मार्करों में से एक पर आवेदन करना होगा।

मुझे लगा कि यह एक मार्कर के दूसरे में ट्रांसफॉर्म मैट्रिक्स की गणना करने और एक्स, वाई, जेड यूलर रोटेशन मैट्रिक्स प्राप्त करने के लिए ट्रांसफॉर्म को विघटित करने जैसा ही होना चाहिए, लेकिन मुझे यह काम करने के लिए प्रतीत नहीं होता है। मैं एक्सएनए के साथ सी # का उपयोग कर रहा हूँ।

कोड में:

Matrix marker1 = markerTransforms[0]; 
Matrix marker2 = markerTransforms[1]; 

Matrix relativeTransform = Matrix.Invert(marker1) * marker2; 

Quaternion rotation; 
Vector3 scale; 
Vector3 translation; 
relativeTransform.Decompose(out scale, out rotation, out translation); 
Matrix rotationMatrix = Matrix.CreateFromQuaternion(rotation); 

यह ऊपर काम करने के लिए प्रतीत नहीं होता।

एक और सवाल रोटेशन मैट्रिक्स से एक्स, वाई, जेड यूलर रोटेशन निकालने का तरीका होगा?

संपादित करें: http://forums.create.msdn.com/forums/p/4574/23763.aspx

मेरे कोड को यह लागू करना मैं निम्नलिखित परिणाम मिल गया:

enter image description here

मैं एक्स, वाई, जेड आदेश यहाँ निम्नलिखित यूलर के लिए चार का समुदाय कन्वर्ट करने के लिए एक समारोह पाया

वास्तविक रोटेशन होना चाहिए: एक्स: 0 y: 0 जेड: -0,52

मैं यह भी देखा कि वें ई वाई और जेड ने कैमरे को कैसे रखा है इस पर निर्भर करता है। यहां बताए गए

दो को बदलने मैट्रिक्स मैं मार्कर डिटेक्टर से प्राप्त मार्कर से एक के लिए अभिविन्यास और कैमरे रिश्तेदार का अनुवाद होते हैं: http://www.hitl.washington.edu/artoolkit/documentation/tutorialcamera.htm मैं उन्हें XNA स्वरूप में परिवर्तित कर दिया है और मैं उन्हें सही ढंग से मैं रूप में काम करने को पता है कोनों को स्क्रीन पर खींच सकते हैं और यह कैमरे को देखकर मेल खाता है।

+0

मुझे लगभग यकीन है कि यूलर कोणों की गणना सही ढंग से की जाती है, लेकिन उन्हें कैमरे से संबंधित समन्वय प्रणाली में दिया जाता है। लेकिन आप क्षैतिज विमान से संबंधित यूलर कोण प्राप्त करना चाहते हैं, है ना? – user502144

उत्तर

7

मुझे सबसे ज्यादा पसंद है समाधान quaternions का उपयोग कर रहा है। आप एक उन्मुखीकरण q1, और अन्य q2 द्वारा वर्णित द्वारा वर्णित है, तो आप द्वारा

Q1 = q * Q2

जा रहा है क्ष दूसरे के उन्मुखीकरण से प्राप्त कर सकते वह रोटेशन जिसे आप ढूंढ रहे हैं।

q = q1 * (q2)^- 1; क्यू = क्यू 1 * conj (q2);

आपको बस rotation to quaternion और quaternion to rotation से कनवर्ट करना होगा।

बस सुनिश्चित करें कि आप quaternions सामान्यीकृत करते हैं तो समकक्ष सत्य हैं। मेरे द्वारा लिंक किए गए पृष्ठों में आपके पास सभी आवश्यक सूत्र, स्पष्टीकरण, जावा में भी कोड, सी ++ है। वास्तव में पसंदीदा में जोड़ने लायक है।

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