Ответ 1
atan2(s_y, s_x)
должен дать вам правильный угол. Возможно, вы изменили порядок s_x
и s_y
. Кроме того, вы можете использовать функции acos
и asin
непосредственно на s_x
и s_y
соответственно.
Я хочу изменить операцию 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
является функцией для использования, но я не получаю ожидаемых результатов.
atan2(s_y, s_x)
должен дать вам правильный угол. Возможно, вы изменили порядок s_x
и s_y
. Кроме того, вы можете использовать функции acos
и asin
непосредственно на s_x
и s_y
соответственно.
Я использую функцию 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 ° являются одинаковыми углами).
В математике есть обратная операция для sin и cos. Это arcsin и arccos. Я не знаю, какой язык программирования вы используете. Но обычно, если он имеет функцию cos и sin, он может иметь обратную функцию.
asin (s_x), acos (s_y), возможно, если вы используете c.