Основная проблема методов моделирования огибания препятствий, основанных на реакциях, заключается в том, что у них практически никак не учитывается основное направление движения. Часто, например, нужно, чтобы анимат, встретив препятствие, не разворачивался в противоположном направлении (кроме тех случаев, когда в этом действительно есть необходимость).
Одним из методов решения этой проблемы является учет направления, образованного несколькими последними перемещениями. При вычислении управляющих воздействий они будут выбираться таким образом, чтобы анимат, огибая препятствие, активно уклонялся от этого направления. С целью экономии памяти можно просто использовать один-единственный вектор, обозначающий направление, из которого анимат пришел в текущую точку. Короче говоря, суть метода заключается в том, чтобы не давать анимату двигаться в направлении, из которого он пришел.
При реализации этого метода удобно применять так называемое скользящее среднее (moving average). Предположим, что у нас имеется вектор provenance, указывающий на несколько предыдущих положений анимата. Для учета последнего положения мы можем постоянно пересчитывать этот вектор по следующей формуле. provenance = previous * 0.1 + provenance * 0.9
Понятно, что значения коэффициентов (а = 0.1 и b = 0.9) прямо влияют на то, как долго мы хотим созфанять прелыдушее направление. Соотношение этих коэффициентов можно изменять, при условии что будет выполняться равенство а + b = 1. Малые значения а означают, что превалирующее значение имеет не направление на предыдущем шаге, а то направление, которого анимат придерживался ранее. Точно так же большие значения а означают, что направление, которого анимат придерживался ранее, не столь существенно, как направление на предыдущем шаге.