Вы должны использовать линейную алгебру - вместо использования синусов и косинусов, вы используете векторы.
Если у вас есть P1 = (x1, y1) (где игрок) и P2 = (x2, y2) (где указатель мыши), тогда у вас есть вектор V = (x2-x1, y2-y1) = (v1, v2), которыйимеет длину v = | V | = sqrt (v1 ^ 2 + v2 ^ 2).Тогда у вас есть версор (который является вектором длины = 1) M = (v1 / v, v2 / v) = (m1, m2).
Тогда вместо вычисления угла вы можете вращать точкипутем отображения (x, y) -> (x * m1-y * m2, x * m2 + y * m1).
См. также https://en.wikipedia.org/wiki/Rotation_matrix#In_two_dimensions
(и не забудьте позаботитьсяв случае V = 0)
Примечание: использование atan - это нормально, но вам нужно будет проверить знаки x и y .. Если они оба отрицательны, вы найдете неправильный угол;и если один положительный, а другой отрицательный, вы все равно не знаете, указывает ли ваша стрелка на северо-запад или юго-восток.