Как работает формула поворота вектора на угол?

Есть формула поворота вектора на угол:

Vector vector(x, y)
Angel angle
rotatedX = x * cos(angle) - y * sin(angle)
rotatedY = x * sin(angle) + y * cos(angle)

Не совсем понимаю, как появилась такая формула. Почему для X вычитается произведение синуса на У, а для У складываются?


Ответы (2 шт):

Автор решения: Harry

Да все просто... Смотрите на картинку. x' и y' — в повернутой на угол α системе координат.

Уравнения выписаны справа. Раскрываете тригонометрию — косинус и синус разности, и подставляете значения синусов и косинусов β из первого и третьего уравнений. Так и получите уравнения, связывающие координаты в одной и другой системе координат...

введите сюда описание изображения

→ Ссылка
Автор решения: Pavel Mayorov

Тут всё просто. Для начала рассмотрим более простую задачу: какие координаты будут у единичного вектора, который повёрнут относительно оси абсцисс на угол α? Ответ: (cos α, sin α). Это чуть ли не определение косинуса и синуса.

Что такое координаты? Это коэффициенты в разложении вектора по базису:

r = i cos α + j sin α

Здесь r - искомый вектор, i и j - базисные вектора.

Таким образом, поворачивать базисный вектор в ортонормированном базисе очень просто.


Теперь вспомним, что нам надо повернуть не базисный вектор, а указанный. Обозначим его буквой v. Так вот, повернуть его очень просто: надо сделать его базисным! Точнее, надо построить ортонормированный базис с его участием. В конце концов, ортонормированный базис на плоскости - это всего лишь два перпендикулярных вектора одинаковой длины, и один из них у нас уже есть.

Чтобы найти второй вектор, надо повернуть вектор v на 90 градусов. Это делается куда проще, чем поворот на произвольный угол:

Как видно, если у вектора v координаты были (x, y) - то у перпендикулярного вектора u координаты будут (-y, x). Можете проверить сами - это верно для любого квадранта. И обратите ещё раз внимание на разные знаки у координат: именно отсюда в дальнейшем возникнет интересующее вас несоответствие.


И так, у нас есть ортонормированный базис, у нас если формула поворота базисного вектора, и нам надо его повернуть:

Кажется, всё готово для получения ответа. Получаем формулу в векторном виде:

r = v cos α + u sin α

Теперь подставим в формулу координаты обоих векторов и...

rx = x cos α - y sin α

ry = y cos α + x sin α

→ Ссылка