2012-05-22 10 views
15

मैं कुछ 2 डी ड्राइंग करना चाहता हूं और इस प्रकार कुछ मैट्रिक्स परिवर्तनों को कार्यान्वित करना चाहता हूं। मेरे प्रकाश गणित पृष्ठभूमि के साथ मैं समझने की कोशिश कर रहा हूं कि सी # में ऐसा कैसे करें (किसी भी अन्य ओओपी भाषा स्पष्ट रूप से ऐसा करेगी)।2 डी परिवर्तनों को 3x3 matrices क्यों चाहिए?

जो कुछ मैंने पढ़ा है वह समझा रहा है कि हमें अनुवादों का सामना करने में सक्षम होने के लिए 3x3 मैट्रिस के साथ काम करने की आवश्यकता है। क्योंकि आप गुणाओं के साथ अनुवाद नहीं कर सकते हैं। लेकिन यह matrices के गुणा के साथ है कि हम अपने परिवर्तन बनाते हैं। तो हम कुछ के साथ काम करते हैं:

{ x1, x2, tx } 
{ y1, y2, ty } 
{ 0, 0, 1 } 

मैं तीसरे कॉलम के माध्य को समझता हूं, लेकिन हमें तीसरी पंक्ति क्यों चाहिए? एक पहचान मैट्रिक्स के साथ-साथ घूर्णन, स्केल या रोटेशन में अंतिम पंक्ति समान होती है। क्या ऐसे ऑपरेशन हैं जिन पर मैं अभी तक नहीं पहुंच पाया था, जिसके लिए इसकी आवश्यकता होगी? ऐसा इसलिए है क्योंकि कुछ भाषाएं (जावा) "स्क्वायर आयाम" सरणी के साथ बेहतर प्रदर्शन करती हैं? यदि ऐसा है तो मैं सी # में 3 कॉलम और 2 पंक्तियों का उपयोग कर सकता हूं (क्योंकि जंजीर सरणी भी काम करती है या बेहतर)।

उदाहरण के लिए, एक रोटेशन + अनुवाद के लिए मैं इस

{ cos(rot)*x1, (-sin(rot))*x2, tx } 
{ sin(rot)*y1, cos(rot)*y2, ty } 
{ 0,   0,    1 } 

अंतिम पंक्ति की कोई ज़रूरत नहीं की तरह एक मैट्रिक्स है।

+1

), तो http://en.wikipedia.org/wiki/Homogeneous_coordinates –

+1

@HighPerformanceMark के लिंक में से एक का पालन करें मैं यहाँ हूँ इन अवधारणाओं के किस बिंदु को समझाने की कोशिश कर रहा हूं, मुझे समझ में नहीं आता है। हां ये 2 पहले दस्तावेज हैं जिनके साथ मैंने अपना पढ़ना शुरू किया। –

उत्तर

26

इस मैट्रिक्स है कि हम अपने परिवर्तनों

यह कारण है कि हम वर्ग मैट्रिक्स चाहते बनाने के गुणा के साथ है।

मान लीजिए कि हमने जो प्रस्ताव दिया है, वह हमने किया है, और हमारे परिवर्तनों के लिए 2x3 मैट्रिक्स का उपयोग किया है।

फिर एक रोटेशन

(x1, x2, 0) 
(y1, y2, 0) 

हो सकता है और एक अनुवाद

(1, 0, tx) 
(0, 1, ty) 

होगा और हम एक स्तंभ वेक्टर बिंदु करके हमारा मैट्रिक्स गुणा करके या तो रोटेशन या अनुवाद प्रदर्शन कर सकता है:

सही जवाब पाने के लिए
(x) 
M (y) 
    (0) 

हालांकि - हम रूपांतरणों को लिखने के बारे में कैसे जाएंगे? दरअसल, आपके "घूर्णन के लिए + अनुवाद के लिए मेरे पास एक मैट्रिक्स है" उदाहरण के लिए, आपने को पर मैट्रिक्स कैसे प्राप्त किया? निश्चित रूप से, इस मामले में आप इसे लिख सकते हैं, लेकिन सामान्य रूप से?

इस

तो यह एक और परिवर्तन मैट्रिक्स देने के लिए गुणा दो परिवर्तन मैट्रिक्स के लिए संभव होना चाहिए मैट्रिक्स है कि हम अपने परिवर्तनों को बनाने का गुणा के साथ है: ठीक है, आप उत्तर जानते हैं। और मैट्रिक्स गुणा के नियम दिखाते हैं कि यह:

(. . .) (. . .) 
(. . .) (. . .) = ??? 

मान्य मैट्रिक्स गुणक नहीं है। हमें उन मैट्रिक्स की आवश्यकता है जिन्हें हमारे परिवर्तनों को संगत करने के क्रम में गुणा किया जा सकता है। तो हमारे पास वह अतिरिक्त पंक्ति है।


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

http://en.wikipedia.org/wiki/Translation_(geometry पर अपने पढ़ने शुरू
+0

उह यह वह बिंदु है जिसे मैं अभी तक नहीं देख रहा था! धन्यवाद आप आकाशम। मेरी सोच में छेद को खोजने के लिए समय निकालने के लिए धन्यवाद। –

+0

+1 महान जवाब। – Doug

+0

और '(tx, ty) 'के अनुवाद के लिए वास्तविक गणना' [x y 1] x [1 0 0; 0 1 0; टीएक्स टाई 1] = [एक्स + टीएक्स वाई + टाई 1] '। – Gerard

5

उत्तर समरूप समन्वय है। एक ऑपरेशन में रोटेशन और अनुवाद को गठबंधन करने के लिए मॉडल की आवश्यकता के मुकाबले एक अतिरिक्त आयाम की आवश्यकता होती है। प्लानर चीजों के लिए यह 3 घटक हैं और स्थानिक चीजों के लिए यह 4 घटक हैं। ऑपरेटर 3 घटक लेते हैं और 3 घटकों को 3x3 मैट्रिक्स की आवश्यकता होती है।

+0

लेकिन 2 डी में {0,0,1} पंक्ति का उद्देश्य क्या है? हम बिना अनुवाद के साथ-साथ रैखिक परिवर्तन की गणना कर सकते हैं। (अगर मैं सही ढंग से समझ गया) –

+0

जैसा कि मैंने कहा, 3 घटक परिणाम उत्पन्न करने के लिए तीसरी पंक्ति की आवश्यकता है। यह संभव है कि तीसरा घटक हमेशा '1' के बराबर न हो और तीसरी पंक्ति अन्य affine परिवर्तनों में' 0 0 1] 'नहीं है। – ja72

+0

मैंने इस तथ्य के बारे में नहीं सोचा था कि हमें मैट्रिक्स परिचालनों के लिए इसकी आवश्यकता है; यह एक "गणितीय बाधा" है जिसे मैंने पूर्ववत नहीं किया था। (धीमे होने के लिए खेद है) –