Отражающие углы по оси Y - PullRequest
       41

Отражающие углы по оси Y

2 голосов
/ 29 декабря 2010

Сейчас я хочу отразить угол по оси Y, используя 'Pi - angle'. Я использую систему углов в радианах, где 0 - восток, -Pi / 2 - север, Pi / 2 - юг и +/- Pi - запад, и когда я пытаюсь использовать описанный выше метод для отражения угла, часто возвращает значения выше Pi вне диапазона. Как я могу предотвратить это?

Спасибо

DLiKS

Ответы [ 4 ]

4 голосов
/ 29 декабря 2010

Отражение вокруг оси X: просто используйте -angle.

Отражение относительно оси Y: используйте

   if (angle >= 0)
      return pi - angle
   else
      return -pi - angle

Это создает срез ветки на картах 0: 3 °до 177 °, тогда как -3 ° соответствует -177 °.0 сопоставляет с пи.(Если вам требуются углы в интервале [-pi, pi), который исключает + pi, измените "> =" на ">".

Это также предполагает, что входной угол находится в пределах [-pi,пи] дальность, как подсказывает ваша постановка проблемы.Если нет, вам нужно сначала нормализовать с использованием симметричного модуля 2 * пи (где smod(x,M) = mod(x+M/2,M) - M/2).

2 голосов
/ 29 декабря 2010

Сначала по вашему начальному углу делим по модулю на Pi. Итак, на языке C:

angle = fmod(angle, 2*Pi);
if (angle < -Pi)
    angle = angle + 2*Pi;

float inverted = Pi - angle;

Суть в том, чтобы всегда нормализовать ввод перед дальнейшей обработкой.

0 голосов
/ 29 декабря 2010

С какой стати вы выбрали север на -Пи / 2.Он разбивает все стандартные элементы, такие как sin (угол) = y, координата на единичной окружности.

Но чтобы ответить на ваш вопрос, вы можете добавить k * 2Pi ко всем углам (где k - любое целое число) и уголостанется прежним.

0 голосов
/ 29 декабря 2010

Поскольку полный круг равен 2 * пи, вы всегда можете вычесть 2 * пи и получить угол обратно в диапазоне.

...