2010-03-28 21 views
6

मैं छद्म सी/जावा/सी # कोड का निम्न भाग है:क्रॉस-उत्पाद की गणना कैसे करें?

int a[]= { 30, 20 }; 
int b[] = { 40, 50 }; 
int c[] = {12, 12}; 

मैं पार उत्पाद ABxAC गणना कैसे करूँ?

+1

आपके पिछले प्रश्न से - "मैं प्रोग्राम-डॉट-उत्पाद/क्रॉस-उत्पाद की गणना कैसे करूं?" संभवतः यह संकेत उस गणना का परिणाम जो भी है, का संकेत है, इसलिए मैं कहूंगा कि यह अनुकूल है। –

+0

शीर्षक डॉट-उत्पाद क्यों है लेकिन टैग क्रॉस-उत्पाद है? – kennytm

+0

@ केनीटीएम: फिक्स्ड। ऐसा इसलिए है क्योंकि उन्होंने पहले सोचा था कि क्रॉस और डॉट उत्पाद समान हैं। –

उत्तर

6

आपके अंतिम प्रश्न में आपको जो समाधान दिया गया था वह मूल रूप से आपके सभी बिंदुओं के लिए एक Z = 0 जोड़ता है। इतने विस्तारित वैक्टरों पर आप अपने क्रॉस उत्पाद की गणना करते हैं। ज्यामितीय रूप से क्रॉस उत्पाद एक वेक्टर उत्पन्न करता है जो गणना के लिए उपयोग किए जाने वाले दो वैक्टरों के लिए ऑर्थोगोनल होता है, क्योंकि आपके दोनों वैक्टर XY विमान में स्थित होते हैं, परिणामस्वरूप केवल एक Z घटक होगा। उस जेड घटक का संकेत गीला इंगित करता है कि वेक्टर XY विमान पर ऊपर या नीचे देख रहा है। यह संकेत एबी पर घड़ी के विपरीत या एक दूसरे से घड़ी के विपरीत क्रम पर निर्भर करता है। इसका मतलब यह है कि जेड घटक का संकेत आपको दिखाता है कि यदि आप जिस बिंदु को देख रहे हैं वह बाएं या दाईं ओर स्थित रेखा के दाईं ओर स्थित है।

तो दो वैक्टर एक की crossproduct और बी जा रहा है वेक्टर

AxB = (AyBz − AzBy, AzBx − AxBz, AxBy − AyBx) 
Az और Bz शून्य होने के साथ

आपको लगता है कि वेक्टर

AxBy - AyBx 

का तीसरा घटक के साथ साथ छोड़ दिया जाता है साथ

एक बिंदु से बी से वेक्टर होने के नाते, और बी बिंदु से सी से वेक्टर होने का मतलब है

Ax = (b[x]-a[x]) 
Ay = (b[y]-a[y]) 
Bx = (c[x]-a[x]) 
By = (c[y]-a[y]) 

देने

AxBy - AyBx = (b[x]-a[x])*(c[y]-a[y])-(b[y]-a[y])*(c[x]-a[x]) 

जो एक अदिश, कि अदिश के हस्ताक्षर आपको बता देंगे मौसम बिंदु ग में निहित है छोड़ दिया है या वेक्टर के अधिकार अब

Aternatively आप stack overflow या gamedev

देख सकते हैं
+0

@ हाराल्ड Scheirich: विस्तृत स्पष्टीकरण और महान लिंक के लिए धन्यवाद। आपका मतलब था * "एज़ और बीजे के साथ शून्य ..." *? (मुझे आपके उत्तर को संपादित करने की हिम्मत नहीं है) – SyntaxT3rr0r

+0

@ हाराल्ड Scheirich: क्या यह एक ही कोड नहीं है जैसा कि एक tzaman दिया था? (मुझे नहीं पता कि उसे किसने वोट दिया) – SyntaxT3rr0r

+0

@ जादूगर हां यह वही गणना है, मतदान के शीर्षक से शुरू हो सकता है और इस प्रश्न के विषय को बदल दिया जा सकता है (डुनू ने ऐसा किया) –

2

cross product एक वेक्टर है, इसमें "एक संकेत" नहीं है।

क्या आपका मतलब scalar (dot) product है? यदि आप करते हैं, तो यह वैक्टर की एक जोड़ी [ए, बी, सी] • [डी, ई, एफ] विज्ञापन + + सीएफ के रूप में गणना की जाती है, इसलिए उस अभिव्यक्ति का संकेत डॉट उत्पाद का संकेत है।

गुणों और जोड़ों के बिना साइन का पता लगाना शायद उन्हें करने से तेज़ नहीं है।

+0

@unwind: मेरा बुरा, मैंने सोचा कि डॉट "उत्पाद" और क्रॉस-उत्पाद समान थे लेकिन, हाँ, वास्तव में मैं "डॉट उत्पाद" के बाद हूं, जो "स्केलर" भी है उत्पाद ": http://en.wikipedia.org/wiki/Dot_product – SyntaxT3rr0r

+0

नहीं, आप पहले स्थान पर सही थे, आप डॉट उत्पाद की तलाश नहीं कर रहे हैं, यह आपको नहीं देगा कि आपका बिंदु बाएं या दाएं है आपकी लाइन का –

2

चूंकि सभी तीन बिंदुओं में केवल दो घटक हैं, मुझे लगता है कि सभी तीनों के लिए जेड-घटक शून्य है। इसका मतलब है कि वेक्टर एबी और बीसी एक्सवाई-प्लेन में हैं, इसलिए क्रॉस-उत्पाद एक वेक्टर है जो जेड-दिशा में इंगित करता है, इसके एक्स और वाई घटक शून्य के बराबर होते हैं।

यदि "साइन" से आपका मतलब है कि यह सकारात्मक या नकारात्मक जेड-दिशा में इंगित करता है, तो गणना आपको बताएगी।

आपके मामले में, दो वैक्टर एबी = (10, 30, 0) और एसी = (-18, -8, 0) हैं। अगर मैं उन दोनों के क्रॉस-उत्पाद लेता हूं, तो मुझे वेक्टर एबी एक्स एसी = (0, 0, 460) मिलता है। क्या आप कहने का मतलब है कि इसका सकारात्मक संकेत है क्योंकि जेड-घटक सकारात्मक है? यदि हां, तो यह आपका जवाब है।

अद्यतन: यदि यह अदिश उत्पाद आप चाहते है, यह इस मामले में नकारात्मक है:

एबी डॉट एसी = -180 -240 + 0 = -420।

+0

सही उत्तर .. दुर्भाग्य से उसने सवाल बदल दिया :)। – svens

+0

यही मेरे अपडेट पते है। मैंने दोनों को कवर किया है। – duffymo

1

आपके द्वारा लिंक किए गए प्रश्न को पढ़ने से, ऐसा लगता है कि आप क्रॉस-उत्पाद के जेड-घटक (एबी और एसी के लिए 0 जेड-मान मानते हैं) का संकेत चाहते हैं; यह इंगित करने के लिए कि लाइन एबी बिंदु सी के कौन सा पक्ष है।
मान लीजिए कि यह मामला है, आपको केवल एबी और एसी के साथ मैट्रिक्स के निर्धारक का संकेत है, इसकी पंक्तियों के रूप में।

xAB = b[0] - a[0] 
yAB = b[1] - a[1] 
xAC = c[0] - a[0] 
yAC = c[1] - a[1] 
detABxAC = (xAB * yAC) - (yAB * xAC) 
if (detABxAC < 0) 
    // sign is negative 
elif (detABxAC > 0) 
    // sign is positive 
else 
    // sign is 0, i.e. C is collinear with A, B 
+0

@tzaman: सभी को +1, धन्यवाद – SyntaxT3rr0r

+0

@ डोनल: नहीं, यह एक डॉट-उत्पाद (जो यह नहीं है) के लिए मामला है। @WizardOfOdds: आपका स्वागत है। ध्यान दें कि यदि आप यही चाहते हैं, तो वास्तव में यह आपके द्वारा बाद में डॉट-उत्पाद नहीं है, बल्कि क्रॉस-उत्पाद के एक घटक का संकेत है। – tzaman

+0

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

4

मान लिया जाये कि क्या आप पूछ रहे हैं कि क्या कोण एबी और के बीचएसी तीव्र या कुंठित है, तो आप इस हैं:

int a[]= { 30, 20 }; 
int b[] = { 40, 50 }; 
int c[] = {12, 12}; 

int ab_x = b[0] - a[0]; 
int ab_y = b[1] - a[1]; 
int ac_x = c[0] - a[0]; 
int ac_x = c[1] - a[1]; 

int dot = ab_x*ac_x + ab_y*ac_y; 
boolean signABxAC = dot > 0; // pick your preferred comparison here 
संबंधित मुद्दे