2012-01-31 18 views
5

मेरे पास मैटलैब में डेटा का 3 डी मैट्रिक्स है, लेकिन मैं उस मैट्रिक्स से डेटा के मनमाने ढंग से घूर्णन टुकड़ा निकालना चाहता हूं और इसे 2 डी मैट्रिक्स के रूप में संग्रहीत करना चाहता हूं, जिसे मैं कर सकता हूं पहुंच। स्लाइस() फ़ंक्शन किसी भी कोण पर कटा हुआ डेटा प्रदर्शित करता है, सिवाय इसके कि मैं डेटा को देखने और संशोधित करने में सक्षम होना चाहूंगा जैसे कि यह एक सरणी थी।2 डी सरणी से डेटा के मनमाने ढंग से घुमाए गए विमान को 2 डी सरणी

मैं विमान की धुरी-बिंदु के निर्देशांक के साथ ही रोटेशन के कोण है (एक्स, वाई और जेड अक्ष में), मैं भी रूप में विमान का समीकरण गणना की है:

Ax + By + Cz = D 

और उस 3 डी मैट्रिक्स को निकालने में केवल उस डेटा को शामिल किया जा सकता है जो उस विमान पर पड़ता है, लेकिन मुझे नहीं पता कि इसे सरल 2 डी सरणी में कैसे परिवर्तित किया जाए।

ऐसा करने का एक और तरीका किसी भी तरह से विमान के कोण की विपरीत दिशा में स्रोत मैट्रिक्स को घुमाने के लिए होगा, ताकि XY धुरी के साथ डेटा के विमान को लाइन करने के लिए, और बस मैट्रिक्स के उस हिस्से को निकालने के लिए , लेकिन मुझे नहीं पता कि एक मैट्रिक्स घूर्णन करना संभव है या नहीं।

मुझे उम्मीद है कि इसका उत्तर कहीं और नहीं दिया गया है, मैं इसे पूरे दिन गुगल रहा हूं, लेकिन कोई भी समस्या बिल्कुल मेरी मेल नहीं खाती है।

धन्यवाद

+0

क्या आपको केवल उस डेटा की आवश्यकता है जो विमान पर *** बिल्कुल *** गिरती है (जो आम तौर पर डेटा बिंदुओं की बहुत छोटी मात्रा होगी) या डेटा को इंटरपोल करना चाहते हैं? – yohai

+0

मैं इंटरपोलेशन की बजाय निकटतम कोशिकाओं को वापस करना चाहता हूं, हालांकि इंटरपोलेशन को बाद में –

+0

माना जाएगा, यह स्पष्ट करने के लिए कि आपके पास 3 इंडेक्स 'ए [i, j, k] = a_ijk' के साथ एक मैट्रिक्स है और आप 2 की सरणी बनाना चाहते हैं 'बी', यू, वी] = b_uv' जहां 'u',' v' 'i',' j', 'k' दुनिया के विमान/टुकड़े पर समन्वयित हैं? (और सभी indeces पूर्णांक हैं) इसके अलावा, क्या कुछ सम्मेलन है जिस पर 'ijk' 'u = 1' और' v = 1' से मेल खाता है? – ja72

उत्तर

1

आप the code here पर एक नज़र ले जा सकते हैं के रूप में इस को मंजूरी देंगे। मुझे लगता है कि यह कार्य आप जो हल करने की कोशिश कर रहे हैं उसके समान है।

function extracts an arbitrary plane from a volume विमान के आकार, विमान का केंद्र बिंदु, और विमान सामान्य, यानी [ए, बी, सी] दिया गया।यह वॉल्यूमेट्रिक इंडेक्स और विमान पर प्रत्येक पिक्सेल के समन्वय को भी आउटपुट करता है।

0

आह! शायद इसे स्वयं हल कर लिया हो सकता है।

विमान समीकरण मैं (0,0,1) रोटेशन मैट्रिक्स का उपयोग करने का एक सामान्य वेक्टर बारी बारी से उत्पादन करने के लिए और फिर डी लगता है मैं भी निम्नलिखित वैक्टर बारी बारी से हैं:

(1,0,0) //step in the x direction of our 2D array 

और

(0,1,0) //step in the y direction of our 2D array 

मेरे पास ऐसे ग्रेडियेंट होंगे जो x, y, z में मेरे निर्देशांक को मेरे सरणी में अगले कॉलम पर या अगली पंक्ति में जाने से पहले बदलना होगा।

मैं इस अप यथाशीघ्र नकली लेंगे और जवाब के रूप में चिह्नित करता है, तो यह काम करता है

संपादित करें: ठीक है थोड़ा-बहुत बदलाव, जब मैं अपने वैक्टर घूर्णन कर रहा हूँ मैं भी 3 डी अंतरिक्ष में मुद्दा यह है कि xyz का प्रतिनिधित्व करता है बारी बारी से करना चाहिए x = 0, y = 0, z = 0 के समन्वय (हालांकि मैं संरचना के केंद्र के चारों ओर घूम रहा हूं, इसलिए यह वास्तव में -इसेक्स/2, -सिज़ी/2, -साइज़/2 है, जहां आकार का आकार है डेटा, और फिर मैं घूर्णन के बाद इसे प्रत्येक समन्वय में आकार/2 जोड़ता हूं, जहां इसे होना चाहिए)।

अब मेरे पास 3 डी में ढाल परिवर्तन है क्योंकि मैं अपने 2 डी सरणी के एक्स समन्वय को बढ़ाता हूं और धीरे-धीरे परिवर्तन करता हूं क्योंकि मैं वाई समन्वय को बढ़ाता हूं, मैं बस सभी संभावित एक्स और वाई निर्देशांक के माध्यम से लूप कर सकता हूं (परिणामी सरणी 50x50x50 सरणी के लिए 50x50 हो, मुझे यकीन नहीं है कि यह अनियमित आकारों के लिए क्या होगा, जो मुझे अंततः काम करने की आवश्यकता होगी) मेरे 2 डी सरणी में और डेटा में मेरे विमान पर परिणामी 3 डी निर्देशांक की गणना करें। मेरा घूर्णन कोने मान प्रारंभ बिंदु के रूप में कार्य करता है। हुर्रे!

बस इस सभी कोणों को शामिल के लिए एक अच्छा परीक्षण बाहर काम मिल गया और उसके बाद मैं एक जवाब