2012-12-29 27 views
10

मैं एक कोण वापस पाने के लिए sin/cos ऑपरेशन को पीछे हटाना चाहता हूं, लेकिन मुझे यह नहीं पता कि मुझे क्या करना चाहिए।पाप/कोस रूपांतरण से कोण वापस प्राप्त करना

double angle = 90.0 * M_PI/180.0; // 90 deg. to rad. 
double s_x = cos(angle); 
double s_y = sin(angle); 

को देखते हुए s_x और s_y, यह कोण वापस पाने के लिए संभव है:

मैं जैसे x/y वेक्टर पाने के लिए रेडियन में एक कोण पर sin और cos इस्तेमाल किया है? मैंने सोचा कि atan2 उपयोग करने के लिए फ़ंक्शन था, लेकिन मुझे अपेक्षित परिणाम नहीं मिल रहे हैं।

उत्तर

13

atan2(s_y, s_x) आपको सही कोण देना चाहिए। शायद आपने s_x और s_y के आदेश को उलट दिया है। इसके अलावा, आप क्रमशः s_x और s_y पर acos और asin फ़ंक्शंस का उपयोग कर सकते हैं।

+0

मेरा एक्स/वाई वास्तव में उलट दिया गया क्योंकि मेरे पास कुछ कोड था जो एक्स को पाप सौंप रहा था और कुछ अन्य बिट्स वाई को पाप दे रहे थे। –

3

गणित में पाप और कॉस के लिए रिवर्स ऑपरेशन है। यह arcsin और arccos है। मुझे नहीं पता कि आप किस प्रोग्रामिंग भाषा का उपयोग करते हैं। लेकिन आम तौर पर यदि इसमें कॉस और पाप फ़ंक्शन होता है तो उसके विपरीत रिवर्स फ़ंक्शन हो सकता है।

2

asin (s_x), acos (s_y), शायद, यदि आप सी का उपयोग कर रहे हैं।

4

मैं दिए गए s_x कोसिनस से कोण वापस पाने के लिए acos फ़ंक्शन का उपयोग करता हूं। लेकिन क्योंकि कई कोणों के परिणामस्वरूप एक ही कोसिनस (उदाहरण के लिए cos (+ 60 डिग्री) = cos (-60 डिग्री) = 0.5) हो सकता है, कोण को सीधे s_x से वापस प्राप्त करना संभव नहीं है। तो मैं कोण के संकेत को वापस पाने के लिए s_y का भी उपयोग करता हूं।

// Java code 
double angleRadian = (s_y > 0) ? Math.acos(s_x) : -Math.acos(s_x); 
double angleDegrees = angleRadian * 180/Math.PI; 
(s_y == 0) के विशिष्ट मामले के लिए

, क्योंकि यह कोण का मतलब लेने के लिए + acos या -acos कोई फर्क नहीं पड़ता 0 डिग्री (+ 0 डिग्री या -0 ° एक ही कोण हैं है) या 180 डिग्री (+ 180 डिग्री या -180 डिग्री एक ही कोण हैं)।