2008-10-28 13 views
55

विकिपीडिया से:एक 2D वेक्टर क्रॉस उत्पाद गिना जा रहा है

उत्पाद पार एक तीन आयामी इयूक्लिडियन स्थान है कि एक और वेक्टर जो युक्त तल पर लम्ब है में परिणाम में दो वैक्टर पर एक द्विआधारी ऑपरेशन है दो इनपुट वैक्टर।

यह देखते हुए कि परिभाषा केवल तीन (or seven, one and zero) आयामों में परिभाषित की गई है, कोई दो 2 डी वैक्टरों के क्रॉस उत्पाद की गणना कैसे करता है?

मैंने दो कार्यान्वयन देखा है। एक नया वेक्टर लौटाता है (लेकिन केवल एक वेक्टर स्वीकार करता है), दूसरा स्केलर देता है (लेकिन दो वैक्टरों के बीच गणना है)।

float CrossProduct(const Vector2D & v1, const Vector2D & v2) const 
{ 
    return (v1.X*v2.Y) - (v1.Y*v2.X); 
} 

कार्यान्वयन 2 (एक सदिश रिटर्न):

कार्यान्वयन 1 (एक अदिश रिटर्न)

Vector2D CrossProduct(const Vector2D & v) const 
{ 
    return Vector2D(v.Y, -v.X); 
} 

क्यों अलग कार्यान्वयन? मैं स्केलर कार्यान्वयन के लिए क्या उपयोग करूंगा? मैं वेक्टर कार्यान्वयन के लिए क्या उपयोग करूंगा?

कारण मैं पूछता हूं क्योंकि मैं खुद वेक्टर 2 डी कक्षा लिख ​​रहा हूं और यह नहीं जानता कि किस विधि का उपयोग करना है।

+5

कार्यान्वयन 2 गलत है। एक क्रॉस उत्पाद बनाने के लिए आपको दो वैक्टरों की आवश्यकता है। – bobobobo

+6

कार्यान्वयन 2 दिए गए वेक्टर _v_ -90 डिग्री से घूर्णन करता है। 'X' = x cos θ - y sin θ' और 'y '= x sin θ + y cos θ' में सबस्टिट्यू -90। इस कार्यान्वयन का एक और बदलाव 'Vector2D (-v.Y, v.X) को वापस करना होगा, जो +90 डिग्री से _v_ घुमाएगा। – legends2k

+0

@ किंवदंतियों 2k: यह ध्यान देने योग्य है कि कार्यान्वयन 2 [क्रॉस उत्पाद का मूल्यांकन करने के लिए निर्धारक का उपयोग करके] का एक विस्तार है (https: //en.wikipedia।संगठन/विकी/Cross_product # Matrix_notation): बस अंतिम पंक्ति और कॉलम को हटा दें। इस तरह के एक्सटेंशन में हमेशा 'एन -1 'ऑपरेशंस' एन' आयामों के लिए होता है। –

उत्तर

84

कार्यान्वयन 1 वेक्टर की परिमाण को वापस करता है जो इनपुट वैक्टर के नियमित 3 डी क्रॉस उत्पाद के परिणामस्वरूप होता है, जिससे उनके जेड मूल्य 0 के रूप में निहित होते हैं (यानी 3 डी स्पेस को 3 डी स्पेस में विमान के रूप में देखते हैं)। 3 डी क्रॉस उत्पाद उस विमान के लिए लंबवत होगा, और इस प्रकार 0 एक्स & वाई घटक हैं (इस प्रकार स्केलर वापस 3 डी क्रॉस उत्पाद वेक्टर का जेड मान है)।

ध्यान दें कि 3 डी क्रॉस उत्पाद से उत्पन्न वेक्टर की परिमाण क्षेत्र के बराबर है जो दो वैक्टरों के बीच समानांतर है, जो कार्यान्वयन 1 एक और उद्देश्य प्रदान करता है। इसके अतिरिक्त, इस क्षेत्र पर हस्ताक्षर किए गए हैं और यह निर्धारित करने के लिए उपयोग किया जा सकता है कि वी 1 से वी 2 तक घुमावदार घड़ी के विपरीत या दक्षिणावर्त दिशा में चलता है या नहीं। यह भी ध्यान दिया जाना चाहिए कि कार्यान्वयन 1 इन दो वैक्टरों से निर्मित 2x2 मैट्रिक्स का निर्धारक है।

कार्यान्वयन 2 एक ही 2 डी विमान में इनपुट वेक्टर के लिए लंबवत वेक्टर लौटाता है। शास्त्रीय अर्थ में एक क्रॉस उत्पाद नहीं है लेकिन "मुझे एक लंबवत वेक्टर" भावना में सुसंगत है।

ध्यान दें कि 3 डी ईक्लिडियन अंतरिक्ष क्रॉस उत्पाद ऑपरेशन के तहत बंद है - यानी, दो 3 डी वैक्टरों का एक क्रॉस उत्पाद एक और 3 डी वेक्टर देता है। उपरोक्त 2 डी कार्यान्वयन दोनों एक या दूसरे तरीके से असंगत हैं।

आशा इस मदद करता है ...

+4

असल में, कार्यान्वयन 2 वी के क्रॉस उत्पाद और जेड-दिशा पर इंगित इकाई वेक्टर है। – mattiast

+0

@ मत्तीयास्ट: सच। यह वही है कि 3 डी '2 डी' ऑपरेशन का वर्णन 3 डी में किया गया है। –

+0

@ मत्तीयास्ट: कार्यान्वयन 2 को [क्रॉस उत्पाद की गणना करने के लिए निर्धारक] (https://en.wikipedia.org/wiki/Cross_product#Matrix_notation) का उपयोग करने के विस्तार के रूप में सोचा जा सकता है --- बस अंतिम पंक्ति और कॉलम को हटा दें। यह ध्यान दिया जाना चाहिए कि कार्यान्वयन 1 के बराबर है: 'डॉट प्रोडक्ट (ए, क्रॉस प्रोडक्ट (बी)) ', जो" लंबवत डॉट उत्पाद "की धारणा के अनुरूप (बहुत सुंदरता से) है (जो कि कार्यान्वयन 1 भी है [और शायद अधिक सटीक] के रूप में जाना जाता है!)। –

41

संक्षेप में: यह एक गणितीय हैक के लिए एक आशुलिपि संकेतन है।

लांग स्पष्टीकरण:

आप 2 डी अंतरिक्ष में वैक्टर के साथ एक क्रॉस उत्पाद नहीं कर सकते। ऑपरेशन को परिभाषित नहीं किया गया है।

हालांकि, अक्सर दो वैक्टरों के क्रॉस उत्पाद का मूल्यांकन करना दिलचस्प होता है, यह मानते हुए कि 2 डी वैक्टर अपने जेड-समन्वय को शून्य पर सेट करके 3 डी तक बढ़ाए जाते हैं। यह xy-plane पर 3 डी वैक्टर के साथ काम करने जैसा ही है।

यदि आप इस तरह के विस्तारित वेक्टर जोड़ी के क्रॉस उत्पाद की गणना करते हैं और गणना करते हैं तो आप देखेंगे कि केवल z-घटक का अर्थपूर्ण मूल्य है: x और y हमेशा शून्य होंगे।

यही कारण है कि परिणाम का जेड-घटक अक्सर स्केलर के रूप में वापस आ जाता है। उदाहरण के लिए यह स्केलर 2 डी स्पेस में तीन बिंदुओं की घुमाव को खोजने के लिए उपयोग किया जा सकता है।

शुद्ध गणितीय बिंदु से 2 डी स्पेस में क्रॉस उत्पाद मौजूद नहीं है, स्केलर संस्करण हैक और एक 2 डी क्रॉस उत्पाद है जो 2 डी वेक्टर देता है, बिल्कुल कोई समझ नहीं आता है।

9

पार उत्पाद का एक अन्य उपयोगी संपत्ति है कि उसके परिमाण दो वैक्टर के बीच कोण की ज्या से संबंधित है:

| एक एक्स बी | = | ए | । | ख | । साइन (थीटा)

या

साइन (थीटा) = | एक एक्स बी |/(| एक |। | ख |)

तो, कार्यान्वयन 1 में ऊपर, अगर a और b अग्रिम में जाना जाता है इकाई वैक्टर होने के लिए तो उस फ़ंक्शन के परिणाम वास्तव में साइन() मूल्य है।

+1

... जो वेक्टर ए और वेक्टर बी के बीच त्रिभुज के क्षेत्र से भी दोगुना है। –

3

मैं अपनी गणना में 2 डी क्रॉस उत्पाद का उपयोग कर रहा हूं ताकि किसी ऑब्जेक्ट के लिए नए सही रोटेशन को ढूंढ सकें जिसे द्रव्यमान के केंद्र के सापेक्ष एक मनमानी बिंदु पर एक बल वेक्टर द्वारा किया जा रहा है। (स्केलर जेड वन।)

3

कार्यान्वयन 1 दो वेक्टरों के perp डॉट उत्पाद है। 2 डी ग्राफिक्स के लिए मुझे पता है कि सबसे अच्छा संदर्भ उत्कृष्ट Graphics Gems श्रृंखला है। यदि आप स्क्रैच 2 डी काम कर रहे हैं, तो यह वास्तव में इन पुस्तकों के लिए महत्वपूर्ण है। वॉल्यूम IV में "पेप डॉट प्रोडक्ट्स के प्लेस" नामक एक लेख है जो इसके लिए बहुत सारे उपयोगों पर चला जाता है।

एक perp डॉट उत्पाद का प्रमुख उपयोग सिर्फ डॉट उत्पाद कोण का बढ़ाया cos रिटर्न की तरह, छोटा करने के लिए दो वैक्टर बीच कोण की sin है। बेशक आप डॉट उत्पाद और perp डॉट उत्पाद का उपयोग दो वैक्टरों के बीच कोण निर्धारित करने के लिए कर सकते हैं।

Here उस पर एक पोस्ट है और here वोल्फ्राम मैथ वर्ल्ड आलेख है।

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