2010-04-18 10 views
8

मुझे यह कोड स्निपेट मिला है, और मैं सोच रहा हूं कि पहली विधि के परिणाम दूसरी विधि के परिणामों से अलग क्यों हैं, उसी इनपुट को देखते हुए?दो 2 डी वैक्टर के बीच कोण, दो तरीकों के बीच diff?

public double AngleBetween_1(vector a, vector b) { 
    var dotProd = a.Dot(b); 
    var lenProd = a.Len*b.Len; 
    var divOperation = dotProd/lenProd; 
    return Math.Acos(divOperation) * (180.0/Math.PI); 
} 

public double AngleBetween_2(vector a, vector b) { 
    var dotProd = a.Dot(b); 
    var lenProd = a.Len*b.Len; 
    var divOperation = dotProd/lenProd; 
    return (1/Math.Cos(divOperation)) * (180.0/Math.PI); 
} 

उत्तर

16

ऐसा इसलिए है क्योंकि पहली विधि सही है, जबकि दूसरी विधि गलत है।

आप देख सकते हैं कि आर्ककोसाइन फ़ंक्शन कभी-कभी "एकोस" लिखा जाता है और कभी-कभी लिखा जाता है "कोस -1"। यह गणितीय नोटेशन का एक प्रश्न है: "cos -1" वास्तव में आर्ककोसाइन है और कोसाइन का पारस्परिक नहीं है (जो सेकेंड है)।

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

+0

निश्चित रूप से सुनिश्चित करें। धन्यवाद! यह थोड़ी देर के बाद से मैंने हाईस्कूल में ट्रिगर किया था। – bitcycle

5

Math.Acos(divOperation)1/Math.Cos(divOperation) के बराबर नहीं है। arccos गुणों की है, गुणात्मक उलटा नहीं।

3

शायद क्योंकि एकोस (x) ≠ 1/cos (x)।

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