Как формализовать убегание жертвы
Разобраться с жертвой сложнее. В отличие от хищника, у неё есть выбор траектории.
Напоминаю, координаты жертвы я обозначил как x₁ и
y₁ и это какие-то функции от времени, нам важно обозначить как они будут изменяться во времени, собственно. Навскидку, у жертвы несколько вариантов:
1️⃣ Просто по прямой:
dx₁/dt = u * cos(θ)
dy₁/dt = u * sin(θ)
где u — скорость жертвы, θ — угол направления движения. По прямой бежать довольно скучно, правда.
2️⃣ Движение по спирали поинтереснее:
x₁ = a * t * cos(t)
y₁ = a * t * sin(t)
где a — пАрАМеТр спИрАЛи, t — время
3️⃣ Движение по квадрату с какими-то острыми поворотами можно выразить, составив кусочную функцию, разбив движение на четыре фазы:
➡️Фаза 1 (0 ≤ t < T/4):
x₁ = vt, y₁ = 0
➡️Фаза 2 (T/4 ≤ t < T/2): x₁ = L, y₁ = v(t - T/4)
➡️Фаза 3 (T/2 ≤ t < 3T/4): x₁ = L - v(t - T/2), y₁ = L
➡️Фаза 4 (3T/4 ≤ t < T): x₁ = 0, y₁ = L - v(t - 3T/4)
Здесь везде где v - скорость жертвы, L - длина стороны квадрата, T - время полного обхода квадрата.
Острые углы плохо дифференцируются, решение выглядит сложно и, хотя, конечно, желание жертвы побегать в квадрате понятно, ей бы и в треугольнике Карпмана было интересно, тут скорее важно запомнить что "нет ничего невозможного" чтобы задать движение.
Меня вот лично забавляет что интуиция подсказывает, что квадрат должен быть проще, а оказывается проще описать движение по спирали. Штош
Теперь, когда у нас есть уравнения движения и для жертвы, и для хищника, можно приступать к решению системы уравнений. Это оказалось так весело, что я решил запилить визуализацию: