Получение угла от преобразования sin/cos

Я хочу изменить операцию sin/cos, чтобы вернуть угол, но я не могу понять, что я должен делать.

Я использовал sin и cos под углом в радианах, чтобы получить вектор 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_x и s_y, можно ли вернуть угол? Я думал, что atan2 является функцией для использования, но я не получаю ожидаемых результатов.

Ответ 1

atan2(s_y, s_x) должен дать вам правильный угол. Возможно, вы изменили порядок s_x и s_y. Кроме того, вы можете использовать функции acos и asin непосредственно на s_x и s_y соответственно.

Ответ 2

Я использую функцию acos, чтобы вернуть угол от заданного s_x cosinus. Но из-за того, что несколько углов могут привести к одному и тому же косинусу (например, 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 ° являются одинаковыми углами).

Ответ 3

В математике есть обратная операция для sin и cos. Это arcsin и arccos. Я не знаю, какой язык программирования вы используете. Но обычно, если он имеет функцию cos и sin, он может иметь обратную функцию.

Ответ 4

asin (s_x), acos (s_y), возможно, если вы используете c.