Тригонометрия в движении: угол, скорость, ускорение
Основы: угол и направление
Представь, что твой игровой персонаж стоит в центре круга. Куда бы он ни пошел, его движение можно описать с помощью угла. Это и есть основа тригонометрии в геймдеве!
В математике мы используем три основные функции:
- Синус (sin) — показывает вертикальную составляющую движения
- Косинус (cos) — показывает горизонтальную составляющую движения
- Тангенс (tan) — отношение вертикали к горизонтали
🎯 Запомни: косинус всегда идет с осью X, синус — с осью Y. Это правило поможет не путать направления!
Вот как это работает на практике:
direction_x = cos(angle)
direction_y = sin(angle)
Эти две строчки кода — основа движения в любом направлении!
Движение с постоянной скоростью
Теперь добавим скорость. Если у нас есть угол и скорость, мы можем легко рассчитать движение объекта в каждом кадре.
Формула движения выглядит так:
x = x + cos(angle) * speed * time
y = y + sin(angle) * speed * time
Где time — это время между кадрами (delta time), которое обеспечивает плавное движение независимо от частоты кадров.
⏱️ Всегда используй delta time в расчетах движения! Это сделает анимацию плавной на любом компьютере.
Давай решим практическую задачу:
Задача 1: Объект движется под углом 45 градусов со скоростью 5 единиц в секунду. Какие будут координаты через 3 секунды, если начальная позиция (0, 0)?
Решение:
- Переведем угол в радианы:
45° = π/4 радиан - Рассчитаем изменение координат:
Δx = cos(π/4) * 5 * 3 ≈ 0.707 * 15 ≈ 10.606 Δy = sin(π/4) * 5 * 3 ≈ 0.707 * 15 ≈ 10.606 - Конечные координаты:
(10.606, 10.606)
Криволинейное движение и ускорение
Теперь сделаем движение более интересным — добавим ускорение! Это то, что делает движение персонажей и снарядов реалистичным.
Ускорение изменяет скорость со временем:
velocity_x = velocity_x + cos(angle) * acceleration * time
velocity_y = velocity_y + sin(angle) * acceleration * time
x = x + velocity_x * time
y = y + velocity_y * time
Обрати внимание: ускорение тоже имеет направление (угол), поэтому мы используем cos и sin для разложения его на компоненты.
🚀 В реальных играх часто используют несколько ускорений: движение вперед, трение, гравитация. Все они складываются!
Задача 2: Ракета стартует под углом 30° с ускорением 10 ед/с². Какая будет скорость через 2 секунды?
Решение:
- Угол в радианах:
30° = π/6 - Скорость через 2 секунды:
v = a * t = 10 * 2 = 20 ед/с - Компоненты скорости:
vx = cos(π/6) * 20 ≈ 0.866 * 20 = 17.32 ед/с vy = sin(π/6) * 20 = 0.5 * 20 = 10 ед/с
Практическое применение: движение по кругу
Один из самых красивых примеров тригонометрии — круговое движение. Представь планету, вращающуюся вокруг звезды!
Формула для движения по кругу:
x = center_x + radius * cos(angle)
y = center_y + radius * sin(angle)
Чтобы объект вращался, мы просто постепенно увеличиваем угол:
angle = angle + rotation_speed * time
Это создает идеальное круговое движение без сложных расчетов!
🔄 Для плавного вращения используй небольшое значение rotation_speed, например 0.1 радиан в секунду.
Сводная таблица формул
| Тип движения | Формула для X | Формула для Y |
|---|---|---|
| Прямолинейное | x + cos(α)*v*t |
y + sin(α)*v*t |
| С ускорением | x + vx*t + 0.5*ax*t² |
y + vy*t + 0.5*ay*t² |
| Круговое | cx + r*cos(α) |
cy + r*sin(α) |
Финальная задача: полет снаряда
Давай соберем все вместе и реализуем полет снаряда с учетом гравитации!
Условие: Снаряд выпущен под углом 60° со скоростью 25 м/с. Гравитация: -9.8 м/с². Рассчитай позицию через 3 секунды.
Решение по шагам:
- Начальные компоненты скорости:
vx0 = cos(π/3) * 25 = 0.5 * 25 = 12.5 м/с vy0 = sin(π/3) * 25 ≈ 0.866 * 25 = 21.65 м/с - Влияние гравитации на вертикальную скорость:
vy = vy0 + gravity * time = 21.65 + (-9.8) * 3 = 21.65 - 29.4 = -7.75 м/с - Позиция через 3 секунды:
x = vx0 * time = 12.5 * 3 = 37.5 м y = vy0 * time + 0.5 * gravity * time² y = 21.65 * 3 + 0.5 * (-9.8) * 9 y = 64.95 - 44.1 = 20.85 м
Поздравляю! Ты только что рассчитал траекторию снаряда с помощью тригонометрии 🎯
💡 Помни: тригонометрия — это твой лучший друг в геймдеве. Практикуйся с разными углами и скоростями, и скоро ты сможешь создавать любые движения в играх!