2 डी वेक्टर के क्रॉस उत्पाद की गणना करना


85

विकिपीडिया से:

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

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

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

कार्यान्वयन 1 (एक स्केलर रिटर्न):

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

कार्यान्वयन 2 (एक वेक्टर लौटाता है):

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

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

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


10
कार्यान्वयन 2 गलत है। क्रॉस उत्पाद बनाने के लिए आपको दो वैक्टर चाहिए।
बोब्बोबो

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

3
@ legends2k: यह ध्यान देने योग्य है कि कार्यान्वयन 2 क्रॉस उत्पाद का मूल्यांकन करने के लिए निर्धारक का उपयोग करने का एक विस्तार है : बस अंतिम पंक्ति और स्तंभ को हटा दें। इस तरह के विस्तार में हमेशा आयामों के N-1लिए ऑपरेंड होते हैं N
टिम Timस

4
कार्यान्वयन 1 क्रॉस उत्पाद की भयावहता की गणना करता है ।
मतीन उल्हाक

@MateenUlhaq की तरह, यह " हस्ताक्षरित परिमाण" है
Moritz Mahringer

जवाबों:


100

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

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

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

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

उम्मीद है की यह मदद करेगा...


6
दरअसल, कार्यान्वयन 2 v का क्रॉस उत्पाद है और यूनिट वेक्टर z- दिशा की ओर इशारा करता है।
मैट्रेस

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

@mattiast: कार्यान्वयन 2 को क्रॉस उत्पाद की गणना करने के लिए एक निर्धारक का उपयोग करने के विस्तार के रूप में सोचा जा सकता है --- बस अंतिम पंक्ति और कॉलम को हटा दें। यह ध्यान दिया जाना चाहिए कि कार्यान्वयन 1 के बराबर है:, DotProduct(a, CrossProduct(b))जो (बहुत ही सुरुचिपूर्ण ढंग से!) एक "लंबवत डॉट उत्पाद" की धारणा के अनुरूप है (जो कि कार्यान्वयन 1 भी है [और शायद अधिक सटीक रूप में जाना जाता है!)।
टिम Timस

आपके पहले पैराग्राफ में, जो लौटा है उसका परिमाण पूर्ण मूल्य है। यह Z घटक के रूप में एक ही बात नहीं है। जैसा कि आप दूसरे पैराग्राफ में इंगित करते हैं, आप पिशाचों को पीछे हटाने के लिए क्रॉस के चिन्ह का उपयोग कर सकते हैं ... गलती से, मेरा मतलब है कि जब एक वेक्टर एक बहुभुज की रूपरेखा में प्रवेश कर रहा है, तो इसका पता लगाने के लिए।
पीटर कॉर्ड्स

68

संक्षेप में: यह गणितीय हैक के लिए एक शॉर्टहैंड नोटेशन है।

लंबी व्याख्या:

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

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

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

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

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


"उदाहरण के लिए 2 डी स्पेस में तीन बिंदुओं की वाइंडिंग को खोजने के लिए उपयोग किया जाता है" @ निल्स पिपेनब्रिनक, इस संदर्भ में वाइंडिंग का क्या मतलब है?
नादेर बेलाल

1
@NaderBelal मुझे लगता है कि यहाँ घुमावदार का अर्थ होगा - यदि हम बिंदु a से b तक c में जाते हैं, तो क्या हम कोण के संदर्भ में घड़ी की दिशा में या विरोधी-दक्षिणावर्त जा रहे हैं, जिसे हमने अभी देखा है।
अमित तोमर

12

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

| कुल्हाड़ी | = | ए | । | ख | । साइन (थीटा)

या

sine (थीटा) = | कुल्हाड़ी | / (| a | | | b |)

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


1
... जो सदिश a और सदिश b के बीच त्रिभुज का क्षेत्रफल भी है।
टिम लोवेल-स्मिथ

5

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

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

यहाँ पर एक पोस्ट है और यहाँ वोल्फ्राम मठ विश्व लेख है।


3

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


3

एक उपयोगी 2D वेक्टर ऑपरेशन एक क्रॉस उत्पाद है जो एक स्केलर लौटाता है। मैं इसका उपयोग यह देखने के लिए करता हूं कि क्या बहुभुज में दो क्रमिक किनारे बाएं या दाएं झुकते हैं।

से Chipmunk2D स्रोत:

/// 2D vector cross product analog.
/// The cross product of 2D vectors results in a 3D vector with only a z component.
/// This function returns the magnitude of the z value.
static inline cpFloat cpvcross(const cpVect v1, const cpVect v2)
{
        return v1.x*v2.y - v1.y*v2.x;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.