2012-12-29 90 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°是相同的角度)。