Перейти к содержимому

Уроки · 57

Поворот на 90°

В играх часто нужно не посчитать направление с нуля через cos и sin, как в уроке «Вращение», а взять уже готовый вектор и повернуть его на какой-то угол — например, развернуть пулю в обратную сторону или направить персонажа на четверть оборота в сторону от того, куда он и так смотрел. Для произвольного угла без cos и sin никак не обойтись. Но если угол кратен 90° — ровно 90°, 180° или −90° (он же 270°) — поворот получается почти бесплатно: несколько минусов и перестановка местами, без единого умножения.

Поворот на 180° — развернуть в другую сторону

Заголовок раздела «Поворот на 180° — развернуть в другую сторону»

Самый простой случай. Развернуть вектор ровно в обратную сторону — значит просто отрицать обе его координаты:

let (x180, y180) = (-x, -y);

Справа здесь не вызов функции, а просто два числа в скобках — такой же кортеж, какой возвращала mouse_position(), только собранный прямо тут, на месте. А слева (x180, y180) сразу раскладывает его на две отдельные переменные — ровно так, как мы раньше раскладывали кортеж, который возвращала функция. Написать можно было бы и подлиннее, по одной переменной за раз:

let x180 = -x;
let y180 = -y;

Это одно и то же — просто короче, и заодно видно, что обе координаты выражены через исходные x и y.

Длина та же самая, направление — ровно противоположное.

Поворот на 90° — поменять местами и один минус

Заголовок раздела «Поворот на 90° — поменять местами и один минус»

Тут координаты меняются местами, и той, что получилась на месте x (а была раньше y), достаётся минус:

let (x90, y90) = (-y, x);

Поворот на −90° — то же самое, но минус у другой

Заголовок раздела «Поворот на −90° — то же самое, но минус у другой»

Тот же самый трюк наоборот: координаты меняются местами, но минус теперь достаётся той, что получилась на месте y (а была раньше x):

let (x_minus90, y_minus90) = (y, -x);
(10, 3)

Тяни серый вектор за кончик мышью — его числа меняются. Кнопки ниже показывают остальные три вектора, посчитанные по формулам из урока прямо из текущих чисел серого — сравни их с тем, что получается на картинке.

  • Серый вектор — тот, что ты крутишь мышью. Три кнопки показывают остальные три вектора, посчитанные прямо из его текущих x и y — теми же формулами, что выше.
  • (-x, -y) — поворот на 180°: обе координаты отрицаются, вектор смотрит в обратную сторону.
  • (-y, x) — поворот на 90°: координаты меняются местами, и новому x (бывшему y) достаётся минус.
  • (y, -x) — поворот на −90°: то же самое наоборот, минус достаётся новому y (бывшему x).
  • Ни одна из трёх формул не трогает длину вектора — только направление, как и положено повороту.