2010-01-27 12 views
25

वेक्टर ए से बी पर हस्ताक्षरित कोण थेटा कैसे मिलेगा?वेक्टरों के बीच हस्ताक्षर कोण ढूँढना

और हाँ, मुझे पता है कि theta = arccos ((a.b)/(| a || b |))।

हालांकि, इसमें कोई संकेत नहीं है (यानी यह घड़ी की दिशा या घुमावदार घुमाव के बीच अंतर नहीं करता है)।

मुझे कुछ ऐसा चाहिए जो मुझे न्यूनतम कोण को बी से घूमने के लिए बता सके। एक सकारात्मक संकेत + एक्स-अक्ष से + y-axis की ओर घूर्णन को इंगित करता है। इसके विपरीत, एक नकारात्मक संकेत + x-axis से -y-axis के घूर्णन को इंगित करता है।

assert angle((1,0),(0,1)) == pi/2. 
assert angle((0,1),(1,0)) == -pi/2. 

उत्तर

30

आप अपनी पसंद के गणित पुस्तकालय में एक atan2() फ़ंक्शन है:

signed_angle = atan2(b.y,b.x) - atan2(a.y,a.x) 
+0

बिल्कुल सही, धन्यवाद। – Cerin

+9

ए = (-1,1) और बी = (-1, -1) के बारे में क्या है, जहां उत्तर पीआई/2 होना चाहिए? आपको यह जांचना चाहिए कि पूर्ण मूल्य पीआई से बड़ा है या नहीं, और उसके बाद 2 * पीआई जोड़ें या घटाएं। –

+0

@ डेरेक अच्छी पकड़। समाधान को कार्यान्वित करते समय मैंने वास्तव में यह खोज लिया। – Cerin

50

क्या आप, वह यह है कि उपयोग करने के लिए अक्सर "perp डॉट उत्पाद" कहा जाता है, वेक्टर खोजने के लिए चाहते हैं वेक्टरों में से एक के लिए लंबवत, और फिर अन्य वेक्टर के साथ डॉट उत्पाद पाएं।

if(a.x*b.y - a.y*b.x < 0) 
    angle = -angle; 

तुम भी ऐसा कर सकते हैं:

angle = atan2(a.x*b.y - a.y*b.x, a.x*b.x + a.y*b.y); 
+0

क्या आप जानते हैं कि दूसरा समीकरण हमेशा 180º से कम कोणों को वापस करता है? – rraallvv

+2

कोण -पी और पीआई रेडियंस के बीच कोण होगा। –

+0

महान जो समस्या हल करता है जब एक = (-1,1) और बी = (-1, -1) – rraallvv

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