← Все публикации

Как формализовать убегание

Продолжая разговор о T-1000 и спиралях, можно нырнуть поглубже в эту задачу. Сейчас будет немного формул с производными, но я постараюсь не утопить вас в них.

Проще всего представить жертву A и хищника B на плоскости (в одномерном виде на линии тоже можно — но будет скучно), потому что в двумерном мире жить проще, особенно когда решаешь дифференциальные уравнения. Их начальные положения можно описать координатами:

A: (x₁, y₁)
B: (x₂, y₂)

Эти координаты будут меняться со временем, если жертва и хищник не стоят на месте. Проще начать рассуждать с хищника, основная стратегия которого будет "двигаться прямо к жертве". Это можно записать вот так:

dx₂/dt = v * (x₁ - x₂) / r
dy₂/dt = v * (y₁ - y₂) / r

где v — это скорость "хищника", а r — расстояние между A и B.

У хищника в самом простом случае может быть цель "догнать эту точку", а может быть что-то сложнее из серии догнать и оставаться на расстоянии 𝓵 в течение времени 𝓽 — чтобы, например, успеть бахнуть палкой жертву в этом сценарии применения типичных боевых орудий войны. От цели будет меняться и стратегия решения. И это даже без обсуждения о том, как ведёт себя "жертва", потому что она как раз может двигаться как угодно, хоть по спирали, хоть зигзагами.

В самом простом случае вообще A=B, и это уже не задача убегания, потому что от себя не убежишь, ахаха.

То есть, надо:

  1. Записать уравнение движения жертвы.
  2. Выпить кофе или что-то покрепче, потому что предыдущий пункт может занять некоторое время.
  3. Решить получившуюся систему.

В итоге можно получить траектории движения обоих объектов и сможем сказать, догонит ли "хищник" свою "жертву". Делов-то!

Этот же пост в Telegram ↗