Кинематика: движение объектов по траектории
Основы кинематики: что такое траектория?
Представьте, что вы запускаете снаряд из пушки в игре 🎯. Линия, которую он описывает в воздухе, и есть его траектория. С математической точки зрения, траектория — это просто путь, который проходит объект в пространстве с течением времени.
В геймдеве мы почти всегда работаем с двумерным (2D) или трехмерным (3D) пространством. Движение по траектории означает, что и позиция объекта по оси X, и его позиция по оси Y (и Z в 3D) меняются согласно какому-то правилу, часто в зависимости от времени.
💡 Главный секрет: чтобы описать движение по любой сложной траектории, мы используем параметрические уравнения. Время (t) — это наш главный параметр. Мы задаем отдельные формулы для x(t) и y(t).
Движение по прямой линии ➖
Это самый простой вид траектории. Здесь нам помогут знакомые формулы равномерного движения.
Допустим, наш объект стартует из точки с координатами (start_x, start_y) и движется с постоянной скоростью. Нам нужно знать вектор скорости — его направление. Например, вектор (3, 1) означает, что за каждую единицу времени объект проходит 3 единицы вправо по X и 1 единицу вверх по Y.
Формулы для расчета позиции в момент времени t будут выглядеть так:
x(t) = start_x + velocity_x * t
y(t) = start_y + velocity_y * t
Движение по окружности 🔄
Это очень популярная траектория для создания круговых патрулей врагов, вращающихся платформ или орбитального движения.
Здесь на помощь приходит тригонометрия! Вспомним единичную окружность. Позиция точки на окружности задается с помощью косинуса (для X) и синуса (для Y).
Нам понадобятся:
center_x, center_y— центр окружности.radius— ее радиус.angle— угол поворота, который будет меняться со временем.angular_velocity— угловая скорость (на сколько радиан изменяется угол за единицу времени).
Формулы для вычисления позиции:
angle = initial_angle + angular_velocity * t
x(t) = center_x + radius * cos(angle)
y(t) = center_y + radius * sin(angle)
🎮 На практике: чтобы объект двигался быстрее, увеличивайте
angular_velocity. Чтобы сделать окружность больше, увеличьтеradius.
Параболическая траектория (движение снаряда) 🚀
Классика жанра! Броски мяча, выстрелы из катапульты, прыжки — всё это описывается параболой.
Такое движение уже не равномерное. На объект действует ускорение, например, гравитация. Начальная скорость задается как вектор (velocity_x, velocity_y).
Формулы для симуляции полета снаряда с учетом гравитации:
x(t) = start_x + velocity_x * t
y(t) = start_y + velocity_y * t - (gravity * t * t) / 2
Обратите внимание на минус в формуле для Y: гравитация тянет объект вниз, уменьшая его высоту.
Кривые Безье ✨
Хотите создать плавное и красивое движение, например, для кат-сцены или полета птицы? Используйте кривые Безье! Это мощный инструмент для описания гладких кривых с помощью контрольных точек.
Для квадратичной кривой Безье (2-го порядка) нужны три точки: начальная (P0), контрольная (P1) и конечная (P2). Параметр t здесь изменяется от 0 до 1.
x(t) = (1-t)*(1-t)*P0_x + 2*(1-t)*t*P1_x + t*t*P2_x
y(t) = (1-t)*(1-t)*P0_y + 2*(1-t)*t*P1_y + t*t*P2_y
🛠️ Совет: Поэкспериментируйте с положением контрольной точки P1. Она не лежит на кривой, но определяет ее форму, «притягивая» к себе траекторию.
Практикуемся: решаем задачи
Задача 1: Прямолинейное движение
Условие: Моб в игре появляется в точке (10, 20) и движется с постоянной скоростью (5, 0) (пикселей в секунду). Где он окажется через 3 секунды?
Решение:
- Подставляем значения в формулы для прямолинейного движения:
x(3) = 10 + 5 * 3 = 10 + 15 = 25
y(3) = 20 + 0 * 3 = 20 + 0 = 20
- Ответ: через 3 секунды моб будет находиться в точке
(25, 20).
Задача 2: Движение по окружности
Условие: Спутник вращается вокруг планеты в центре (100, 100) по орбите радиусом 50 единиц. Угловая скорость составляет 0.5 радиан/сек. Начальный угол равен 0. Каковы его координаты через π секунд (~3.14 сек)?
Решение:
- Сначала найдем угол в момент времени t = π:
angle = 0 + 0.5 * π ≈ 0 + 1.57 = 1.57 радиан
- Теперь вычислим координаты по формулам окружности:
x(π) = 100 + 50 * cos(1.57) ≈ 100 + 50 * 0 ≈ 100
y(π) = 100 + 50 * sin(1.57) ≈ 100 + 50 * 1 ≈ 150
- Ответ: через π секунд спутник будет в точке
(100, 150).
Задача 3: Движение снаряда
Условие: Снаряд вылетает из точки (0, 0) с начальной скоростью (40, 30). Сила гравитации g = 10. Найдите его координаты через 2 секунды.