2012-12-29 74 views
10

我想要扭转sin/cos操作以找回角度,但我无法弄清楚我应该做什么。从sin/cos转换获得角度

我已经以弧度使用sincos上的角度,以获得x/y的矢量作为这样:

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

鉴于s_xs_y,是有可能得到回角θ我认为atan2是使用的功能,但我没有得到预期的结果。

回答

13

atan2(s_y, s_x)应该给你正确的角度。也许你已经颠倒了s_xs_y的顺序。另外,您可以分别直接在s_xs_y上使用acosasin函数。

+0

我的x/y确实被颠倒过来,因为我有一些代码将罪分配给x,其他一些代码将罪分配给y。 –

3

数学是sin和cos的反向运算。这是arcsin和arccos。 我不知道你用什么编程语言。但通常如果它具有cos和sin函数,那么它可以具有相反的功能。

2

asin(s_x),acos(s_y),也许,如果您使用的是c。

4

我使用acos函数从给定的s_x余弦函数中取回角度。但是因为可能会导致相同余弦(例如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°是相同的角度)。