3 डी में चीजों को बदलने के लिए हम 4x4 मैट्रेस का उपयोग क्यों करते हैं?


36

एक्स दिशा में 10 इकाई द्वारा एक वेक्टर का अनुवाद करने के लिए, हमें मैट्रिक्स का उपयोग क्यों करना है?

यहाँ छवि विवरण दर्ज करें

हम चटाई में केवल 10 जोड़ सकते हैं [0] [0], और हमें वही परिणाम मिला।

जवाबों:


28

हां, आप अनुवाद के मामले में एक वेक्टर जोड़ सकते हैं। मैट्रिक्स का उपयोग करने का कारण अलग-अलग संयुक्त परिवर्तनों को संभालने के लिए एक समान तरीके से फोड़ा जाता है।

उदाहरण के लिए, रोटेशन आमतौर पर एक मैट्रिक्स का उपयोग करके किया जाता है (घुमावों से निपटने के अन्य तरीकों के लिए @MickLH टिप्पणी करें), इसलिए एक समान तरीके से कई परिवर्तनों (रोटेशन / अनुवाद / स्केलिंग / प्रोजेक्शन ... आदि) से निपटने के लिए, आपको उन्हें एक मैट्रिक्स में एनकोड करने की आवश्यकता है।

ठीक है, अधिक तकनीकी रूप से बोलना; एक रूपांतरण एक बिंदु / वेक्टर को दूसरे बिंदु / वेक्टर पर मैप कर रहा है।

p` = T(p); 

जहाँ p` रूपांतरित बिंदु है और T (p) परिवर्तन कार्य है।

यह देखते हुए कि हम एक मैट्रिक्स का उपयोग नहीं करते हैं हमें कई परिवर्तनों को संयोजित करने के लिए ऐसा करने की आवश्यकता है:

p1 = T (p);

p अंतिम = M (p1);

न केवल एक मैट्रिक्स एक ही मैट्रिक्स में कई प्रकार के परिवर्तनों को जोड़ सकता है (जैसे affine, रैखिक, प्रक्षेप्य)।

मैट्रिक्स का उपयोग करने से हमें परिवर्तनों की श्रृंखलाओं को संयोजित करने और फिर उन्हें गुणा करने का अवसर मिलता है। यह आमतौर पर GPU द्वारा एक टन चक्र बचाता है (इसे इंगित करने के लिए @ChristianRau के लिए धन्यवाद)।

टी अंतिम = टी * आर * पी; // ट्रांसलेट रोटेट प्रोजेक्ट

पी फाइनल = टी फाइनल * पी;

यह भी बताने के लिए अच्छा है कि GPU और यहां तक ​​कि कुछ CPU वेक्टर ऑपरेशन के लिए अनुकूलित हैं; सीपीयू और जीपीयू का उपयोग करके सीपीयू डिजाइन द्वारा डेटा संचालित समानांतर प्रोसेसर होते हैं, इसलिए मैट्रिस का उपयोग हार्डवेयर त्वरण के साथ पूरी तरह से फिट बैठता है (वास्तव में, GPUs को मैट्रिक्स / वेक्टर संचालन के लिए डिज़ाइन किया गया था)।


हाँ, मुझे पता है कि मैट्रिक्स रोटेशन के लिए उपयोगी है। लेकिन हर ट्यूटोरियल मुझे इस तरह की सरल गणना करने के लिए मैट्रिक्स का उपयोग करके मार्गदर्शन करता है: D
ngoaho91

1
यह कहना कि एक मैट्रिक्स के साथ केवल "रोटेशन" गलत किया जा सकता है, मेरे सिर के ऊपर से Quaternions और त्रिकोणमिति बस ठीक काम करेगा
मिकेल

17
और इससे भी अधिक, एक बार जब आप 4x4 मैट्रिसेस के रूप में रोटेशन और अनुवाद दोनों करते हैं, तो आप उन्हें केवल एक ही मैट्रिक्स में बदल सकते हैं और एक ही मैट्रिक्स में संयुक्त परिवर्तन कर सकते हैं, प्रत्येक वर्टेक्स को विभिन्न निर्माणों का उपयोग करके हजारों अलग-अलग परिवर्तनों द्वारा बदल सकते हैं। तथ्य यह है कि 4x4 मैट्रिक्स एकल अनुवाद के लिए ओवरकिल है या एकल रोटेशन इस तथ्य से बाहर है कि आप आमतौर पर एक अनुवाद या एक एकल रोटेशन द्वारा केवल एक शीर्ष को नहीं बदलते हैं।
क्रिस का कहना है कि मोनिका

1
@ concept3d हाँ, मुझे पता है, जवाब अच्छा है। फिर भी एक मैट्रिक्स का उपयोग करने के समान तरीके से प्राप्त बड़ा लाभ न केवल एकरूपता है, बल्कि एक एकल ऑपरेशन में परिवर्तनों की एक पूरी श्रृंखला का प्रतिनिधित्व है। जबकि यह निहित हो सकता है, मैंने स्पष्ट रूप से उल्लेख करने के लिए इसे स्पष्ट और महत्वपूर्ण पाया। लेकिन जवाब फिर भी अच्छा था, यह एक आलोचना नहीं थी।
क्रिस का कहना है कि मोनिका

1
हां, ट्रिगर घूर्णी मैट्रिक्स की गणना करता है, लेकिन वेक्टर गणित वास्तव में ट्रिगर-इन्फ्यूज्ड डेटासेट का उपयोग करके "रोटेट" करता है। जब मैंने त्रिकोणमिति कहा, तो मैं कुछ सरल चीजों को उत्पन्न करने के लिए, मैट्रिक्स के माध्यम से सीधे इसका उपयोग कर रहा था।
मिकेल

6

यदि आप कभी भी ऐसा करने जा रहे हैं, तो एक ही धुरी पर जाना है और कभी भी किसी अन्य परिवर्तन को लागू नहीं करना है तो आप जो सुझाव दे रहे हैं वह ठीक है।

एक मैट्रिक्स का उपयोग करने की वास्तविक शक्ति यह है कि आप आसानी से एक साथ जटिल ऑपरेशन की एक श्रृंखला को समेट सकते हैं, और एक ही श्रृंखला को कई ऑब्जेक्ट्स पर लागू कर सकते हैं।

अधिकांश मामले इतने सरल नहीं होते हैं और यदि आप पहले वस्तु को घुमाते हैं, और दुनिया की कुल्हाड़ियों के बजाय अपने स्थानीय अक्षों के साथ बदलना चाहते हैं, तो आप पाएंगे कि आप बस एक संख्या में 10 नहीं जोड़ सकते हैं और इसे सही ढंग से पूरा कर सकते हैं ।


5

सफलतापूर्वक "क्यों" सवाल का जवाब देने के लिए, यह इसलिए है क्योंकि 4x4 मैट्रिक्स एक ही बार में रोटेशन, अनुवाद और स्केलिंग ऑपरेशन का वर्णन कर सकता है। सुसंगत तरीके से इनमें से किसी का वर्णन करने में सक्षम होना बहुत सारी चीजों को सरल बनाता है।

विभिन्न प्रकार के परिवर्तनों को एक अलग गणितीय कार्यों के साथ अधिक सरल रूप से दर्शाया जा सकता है। जैसा कि आप ध्यान दें, अनुवाद सिर्फ जोड़कर किया जा सकता है। एक स्केलर द्वारा गुणा करके यूनिफ़ॉर्म स्केलिंग। लेकिन उचित रूप से तैयार किए गए 4x4 मैट्रिक्स कुछ भी कर सकते हैं। तो 4x4 का लगातार उपयोग करने से कोड और इंटरफेस बहुत सरल हो जाता है। आप इन 4x4 को समझने में कुछ जटिलता का भुगतान करते हैं, लेकिन फिर इसके कारण बहुत सी चीजें आसान और तेज हो जाती हैं।


2
यह चयनित उत्तर होना चाहिए था।
इंजीनियर

4

4x4 मैट्रिक्स का उपयोग करने का कारण यह है कि ऑपरेशन एक रैखिक परिवर्तन है । यह सजातीय निर्देशांक का एक उदाहरण है । यही बात 2d मामले में (3x3 मैट्रिक्स का उपयोग करके) की जाती है। सजातीय निर्देशांक का उपयोग करने का कारण इतना है कि एक ऑपरेशन का उपयोग करके सभी 3 ज्यामितीय टैंसफॉर्मेशन किए जा सकते हैं; अन्यथा एक 3x3 मैट्रिक्स को गुणा और एक 3x3 मैट्रिक्स के अलावा (अनुवाद के लिए) करने की आवश्यकता होगी। सीगप्रकाश का यह लिंक उपयोगी है।


2
आपको विस्तृत होना चाहिए। एक संक्षिप्त व्याख्या केवल विकिपीडिया से जोड़ने से बेहतर है।
सेठ बैतीन

3

अनुवादों को 3D मैट्रिसेस द्वारा प्रस्तुत नहीं किया जा सकता है

एक साधारण तर्क यह है कि अनुवाद मूल वेक्टर ले सकता है:

0
0
0

मूल से दूर, करने के लिए कहें x = 1:

1
0
0

लेकिन इसके लिए एक मैट्रिक्स की आवश्यकता होगी जैसे:

| a b c |   |0|   |1|
| d e f | * |0| = |0|
| g h i |   |0|   |0|

लेकिन यह असंभव है।

एक अन्य तर्क एकवचन मूल्य अपघटन प्रमेय है , जो कहता है कि प्रत्येक मैट्रिक्स को दो रोटेशन और एक स्केलिंग ऑपरेशन के साथ बनाया जा सकता है। वहां कोई अनुवाद नहीं।

मैट्रिस का उपयोग क्यों किया जा सकता है?

कई मॉडल किए गए ऑब्जेक्ट (जैसे कार चेसिस) या मॉडलिंग की गई वस्तुओं का हिस्सा (जैसे कार टायर, ड्राइविंग व्हील) ठोस होते हैं: वर्टेक्स के बीच की दूरी कभी नहीं बदलती है।

केवल रूपांतरण जो हम उन पर करना चाहते हैं, वे हैं रोटेशन और अनुवाद।

मैट्रिक्स गुणन रोटेशन और अनुवाद दोनों को एन्कोड कर सकता है।

रोटेशन मैट्रिसेस के स्पष्ट सूत्र हैं, उदाहरण के लिए: कोण के लिए एक 2 डी रोटेशन मैट्रिक्स aहै:

cos(a) -sin(a)
sin(a)  cos(a)

3 डी के लिए अनुरूप सूत्र हैं , लेकिन ध्यान दें कि 3 डी घुमाव केवल 1 के बजाय 3 पैरामीटर लेते हैं

अनुवाद कम तुच्छ हैं और बाद में चर्चा की जाएगी। वे कारण हैं जिन्हें हमें 4D मैट्रिस की आवश्यकता है।

मैट्रिस का उपयोग करना क्यों अच्छा है?

क्योंकि मल्टीपल मैट्रिसेस की संरचना को कई गुणा मैट्रिक्स से प्री-कैलकुलेट किया जा सकता है

उदाहरण के लिए, यदि हम vमैट्रिक्स के साथ अपनी कार चेसिस के एक हजार वैक्टर का अनुवाद करने जा रहे हैं Tऔर फिर Rकरने के बजाय मैट्रिक्स के साथ घूमते हैं:

v2 = T * v

और फिर:

v3 = R * v2

प्रत्येक वेक्टर के लिए, हम पूर्व-गणना कर सकते हैं:

RT = R * T

और फिर हर शीर्ष के लिए सिर्फ एक गुणा करें:

v3 = RT * v

इससे भी बेहतर: अगर हम कार के सापेक्ष टायर और ड्राइविंग व्हील के शीर्ष स्थान चाहते हैं, तो हम कार के सापेक्ष मैट्रिक्स RTद्वारा पिछले मैट्रिक्स को केवल गुणा करते हैं ।

यह स्वाभाविक रूप से मैट्रिस के ढेर को बनाए रखने की ओर जाता है :

  • चेसिस मैट्रिक्स की गणना करें
  • टायर मैट्रिक्स (पुश) द्वारा गुणा करें
  • टायर मैट्रिक्स (पॉप) निकालें
  • पहिया मैट्रिक्स को बढ़ाकर (पुश)
  • ...

कैसे एक आयाम जोड़ने से समस्या हल हो जाती है

आइए 1 डी से 2 डी तक के मामले पर विचार करें जो कल्पना करना आसान है।

1D में एक मैट्रिक्स सिर्फ एक संख्या है, और जैसा कि हमने 3D में देखा है कि यह अनुवाद नहीं कर सकता, केवल स्केलिंग है।

लेकिन अगर हम अतिरिक्त आयाम जोड़ते हैं:

| 1 dx | * |x|  = | x + dx |
| 0  1 |   |1|    |      1 |

और फिर हम नए अतिरिक्त आयाम के बारे में भूल जाते हैं, हम प्राप्त करते हैं:

x + dx

जैसा हम चाहते थे।

यह 2 डी परिवर्तन इतना महत्वपूर्ण है कि इसका एक नाम है: कतरनी परिवर्तन

इस परिवर्तन की कल्पना करना अच्छा है:

छवि स्रोत

ध्यान दें कि हर क्षैतिज रेखा (निश्चित y) का अनुवाद कैसे किया जाता है।

हम बस लाइन y = 1को अपनी नई 1 डी लाइन के रूप में लेते हैं , और इसे 2 डी मैट्रिक्स के साथ अनुवाद करते हैं।

3 डी में चीजें समरूप हैं, 4 डी कतरनी के रूप में:

| 1 0 0 dx |   | x |   | x + dx |
| 0 1 0 dy | * | y | = | y + dy |
| 0 0 1 dz |   | z |   | z + dz |
| 0 0 0  1 |   | 1 |   |      1 |

और हमारे पुराने 3D घुमाव / स्केलिंग अब रूप में हैं:

| a b c 0 |
| d e f 0 |
| g h i 0 |
| 0 0 0 1 |

यह जेमी किंग वीडियो ट्यूटोरियल भी देखने लायक है।

अंतरिक्ष को प्रभावित करें

Affine स्पेस हमारे सभी 3 डी रैखिक परिवर्तनों (मैट्रिक्स गुणन) द्वारा 4D कतरनी (3D अनुवाद) के साथ मिलकर उत्पन्न होता है।

यदि हम एक कतरनी मैट्रिक्स और एक 3 डी रैखिक परिवर्तन को गुणा करते हैं, तो हमें हमेशा फॉर्म का कुछ मिलता है:

| a b c dx |
| d e f dy |
| g h i dz |
| 0 0 0  1 |

यह सबसे सामान्य संभव चक्करदार परिवर्तन है, जो 3 डी रोटेशन / स्केलिंग और अनुवाद करता है।

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

| a b c dx |   | a2 b2 c2 dx2 |
| d e f dy | * | d2 e2 f2 dy2 |
| g h i dz |   | g2 h2 i2 dz2 |
| 0 0 0  1 |   |  0  0  0   1 |

हमें हमेशा फॉर्म का एक और एफिन मैट्रिक्स मिलता है:

| a3 b3 c3 (dx + dx2) |
| d3 e3 f3 (dy + dy2) |
| g3 h3 i3 (dz + dz2) |
|  0  0  0          1 |

गणितज्ञ इस संपत्ति को बंद करते हैं , और एक स्थान को परिभाषित करने के लिए आवश्यक है।

हमारे लिए, इसका अर्थ है कि हम अंतिम रूपांतरों को ख़ुशी से परिकलन करने के लिए मैट्रिक्स गुणा कर सकते हैं, यही वजह है कि पहली बार में उपयोग किए गए मेट्रिसेस का उपयोग करें, बिना सामान्य रूप से अधिक 4 डी रैखिक परिवर्तन किए जो कि नमकीन नहीं हैं।

फ्रस्ट्रम प्रोजेक्शन

लेकिन रुकिए, एक और महत्वपूर्ण परिवर्तन है जो हम हर समय करते हैं: glFrustumजो आगे 2x एक वस्तु बनाता है, 2x छोटा दिखाई देता है।

पहले के बारे में कुछ अंतर्ज्ञान प्राप्त glOrthoबनाम glFrustumपर: https://stackoverflow.com/questions/2571402/explain-the-usage-of-glortho/36046924#36046924

glOrthoकेवल अनुवाद + स्केलिंग के साथ किया जा सकता है, लेकिन हम glFrustumमैट्रिसेस के साथ कैसे लागू कर सकते हैं ?

मान लो कि:

  • हमारी आंख मूल पर है, देख-ज़ पर
  • स्क्रीन (विमान के पास) z = -1उस पर लंबाई 2 का एक वर्ग है
  • फ्रूटम का सबसे दूर का विमान है z = -2

यदि केवल हम सामान्य प्रकार के 4 से अधिक वैक्टर की अनुमति देते हैं:

(x, y, z, w)

के साथ w != 0, और इसके अलावा हम हर के (x, y, z, w)साथ की पहचान करते हैं (x/w, y/w, z/w, 1), तब मैट्रिक्स के साथ एक फ्रुम परिवर्तन होगा:

| 1 0  0 0 |   | x |   |  x |               | x / -z |
| 0 1  0 0 | * | y | = |  y | identified to | y / -z |
| 0 0  1 0 |   | z |   |  z |               |     -1 |
| 0 0 -1 0 |   | w |   | -z |               |      0 |

यदि हम दूर zऔर wअंत में फेंक देते हैं, तो हम प्राप्त करते हैं:

  • x_proj = x / -z
  • y_proj = y / -z

जो वास्तव में हम चाहते थे! हम कुछ मूल्यों के लिए इसे सत्यापित कर सकते हैं, जैसे:

  • यदि z == -1, ठीक उसी तल पर, जिस पर हम प्रोजेक्ट कर रहे हैं, x_proj == xऔर y_proj == y
  • यदि z == -2, तो x_proj = x/2: वस्तुएं आधे आकार की हैं।

ध्यान दें कि glFrustumट्रांसफॉर्मेशन एफाइन फॉर्म का नहीं है: इसे सिर्फ घुमाव और अनुवाद के साथ लागू नहीं किया जा सकता है।

wइसे जोड़ने और विभाजित करने के गणितीय "प्रवंचना" को सजातीय निर्देशांक कहा जाता है

इसे भी देखें: संबंधित स्टैक ओवरफ्लो प्रश्न: https://stackoverflow.com/questions/2465116/understanding-opengl-matrices


@Downvoters, कृपया समझाएं ताकि मैं सीखूं और सुधार कर सकूं।
सिरो सेंटिल्ली 新疆 改造 iro 六四 事件 '

व्यक्तिगत रूप से मुझे लगता है कि यह सिर्फ लंबा और जुआ है, जो मूल प्रश्न को संबोधित करता है वह कुछ भी नया नहीं है (जो कि अन्य उत्तरों से अच्छी तरह से कवर नहीं है) और इसके बाकी हिस्से अप्रासंगिक हैं, जिससे यह वास्तव में कठिन हो सकता है।
जोश

@JoshPetrie प्रतिक्रिया के लिए धन्यवाद! मुझे लगता है कि जो लोग पहले से नहीं समझते हैं वे मेरे उत्तर से समझने की अधिक संभावना रखते हैं, क्योंकि यह अधिक अनुकरणीय और दृश्य है। यदि आपको विशिष्ट त्रुटियां या बिंदु मिलते हैं जो पूरी तरह से अप्रासंगिक हैं, तो उन्हें इंगित करें ताकि मैं सुधार कर सकूं। चीयर्स।
सिरो सेंटिल्ली 新疆 改造 iro i 事件 '

जैसा कि मैंने कहा, मुझे लगता है कि अधिकांश उत्तर अप्रासंगिक है। सवाल पूछता है "4x4 मैट्रिस का उपयोग क्यों करें, हम सिर्फ जोड़ क्यों नहीं सकते?" इसका उत्तर अच्छी तरह से एक स्पष्टीकरण के साथ कवर किया गया है जैसे "हाँ, आप जोड़ सकते हैं, लेकिन एक मैट्रिक्स आपको अनुवाद / घूमने / पैमाने के रूप में अच्छी तरह से अनुवाद करने देता है, लेकिन मैट्रिक्स गणित कैसे काम करता है एक 3x3 अनुवाद को सांकेतिक शब्दों में बदलना नहीं कर सकता है, लेकिन एक 4x4 कोई कर सकता है।" यदि आप पाठ की इस दीवार में इसे कवर करते हैं, तो इसे खोजना बहुत कठिन है। बाकी यह मैट्रिक्स गणित पर एक प्राइमर है जिसके बारे में नहीं पूछा गया था, और जबकि यह शायद एक और प्रश्न के उत्तर के रूप में ठीक होगा, मुझे नहीं लगता कि यह इस प्रश्न के साथ एक अच्छा फिट है ।
जोश

1
मैंने विस्तार पर ध्यान देने की सराहना की। पिछले उपयोगकर्ता की चिंता का समाधान करने के लिए, उत्तर को "3D मैट्रिसेस द्वारा अनुवादित नहीं किया जा सकता है" पर शुरू करने के लिए फिर से व्यवस्थित किया जाना चाहिए। यह तात्कालिक प्रश्न का उत्तर देता है और ओपी आगे और अच्छी तरह से लिखित और उत्साही विवरण प्रदान कर सकता है; उन बारीक ब्योरों का होना जो मुझे यहाँ दिलचस्पी है इसलिए मैं पक्षपाती हो सकता हूँ, लेकिन यह निश्चित रूप से "जुआ" नहीं है।
डस्किनर

1

मॉडल, दृश्य और प्रक्षेपण की अवधारणाओं को समझने के लिए इस वीडियो को देखें ।

4x4 मैट्रिस का उपयोग सिर्फ 3 डी ऑब्जेक्ट के अनुवाद के लिए नहीं किया जाता है। लेकिन विभिन्न अन्य प्रयोजनों के लिए भी।

यह समझने के लिए इसे देखें कि दुनिया में शीर्ष रेखाओं को 4D मैट्रिक्स के रूप में कैसे दर्शाया जाता है और वे कैसे रूपांतरित होते हैं।


1
यह वास्तव में ओपी प्रश्न का उत्तर नहीं देता है।
कॉन्सेप्ट 3 डी

संपादित। बढ़िया है?
सीगप्रकाश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.