Как работает формула поворота вектора на угол?
Есть формула поворота вектора на угол:
Vector vector(x, y)
Angel angle
rotatedX = x * cos(angle) - y * sin(angle)
rotatedY = x * sin(angle) + y * cos(angle)
Не совсем понимаю, как появилась такая формула. Почему для X вычитается произведение синуса на У, а для У складываются?
Ответы (2 шт):
Да все просто... Смотрите на картинку. x' и y' — в повернутой на угол α системе координат.
Уравнения выписаны справа. Раскрываете тригонометрию — косинус и синус разности, и подставляете значения синусов и косинусов β из первого и третьего уравнений. Так и получите уравнения, связывающие координаты в одной и другой системе координат...
Тут всё просто. Для начала рассмотрим более простую задачу: какие координаты будут у единичного вектора, который повёрнут относительно оси абсцисс на угол α? Ответ: (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 α
