2012-12-29 25 views
10

Tôi muốn đảo ngược hoạt động sin/cos để lấy lại một góc, nhưng tôi không thể biết mình nên làm gì.Nhận góc quay trở lại từ chuyển đổi sin/cos

Tôi đã sử dụng sincos vào một góc trong radian để có được x/y vector như vậy:

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

Với s_xs_y, là nó có thể lấy lại góc? Tôi nghĩ rằng atan2 là chức năng để sử dụng, nhưng tôi không nhận được kết quả mong đợi.

Trả lời

13

atan2(s_y, s_x) sẽ cho bạn góc chính xác. Có thể bạn đã đảo ngược thứ tự của s_xs_y. Ngoài ra, bạn có thể sử dụng các hàm acosasin trực tiếp trên s_xs_y tương ứng.

+0

x/y của tôi đã thực sự bị đảo ngược khi tôi có một số mã đã gán tội lỗi cho x và một số bit khác đã gán tội lỗi cho y. –

3

Trong toán học là hoạt động ngược lại cho tội lỗi và cos. Đây là arcsin và arccos. Tôi không biết bạn sử dụng ngôn ngữ lập trình nào. Nhưng thường nếu nó có hàm cos và sin thì nó có thể có chức năng đảo ngược.

2

asin (s_x), acos (s_y), có lẽ, nếu bạn đang sử dụng c.

4

Tôi sử dụng chức năng acos để lấy lại góc từ s_x cosinus đã cho. Nhưng vì một số góc có thể dẫn đến cùng một cosinus (ví dụ cos (+ 60 °) = cos (-60 °) = 0,5), không thể lấy lại trực tiếp góc từ s_x. Vì vậy, tôi cũng sử dụng dấu hiệu của s_y để lấy lại dấu hiệu của góc.

// Java code 
double angleRadian = (s_y > 0) ? Math.acos(s_x) : -Math.acos(s_x); 
double angleDegrees = angleRadian * 180/Math.PI; 

đối với trường hợp cụ thể của (s_y == 0), nó không quan trọng để chăm + acos hoặc -acos vì nó có nghĩa là góc được 0 ° (+ 0 ° hoặc -0 ° là các góc tương tự) hoặc 180 ° (+ 180 ° hoặc -180 ° là các góc giống nhau).