Я пытаюсь реализовать двумерную пропорциональную навигацию в Netlogo, как это определяется этими формулами:
, где v_r - разность скоростей, r - линия визирования, а phi - угол.Предполагается, что тета - это изменение линии обзора, а N - постоянная навигации.Я использую формулу с грехом, поскольку я двумерный.
И я немного растерялся, потому что два движущихся объекта вообще не сталкиваются в моей текущей реализации.
ИтакВ настоящее время я вычисляю v_r и r следующим образом, и я вполне уверен, что это правильно, поскольку тестирование с предопределенными позициями / ориентациями дает желаемые результаты:
;; line of sight
let rx [xcor] of target - xcor
let ry [ycor] of target - ycor
; difference in velocity components
let vx ([dx] of target * speed) - dx * predator-speed
let vy ([dy] of target * speed) - dy * predator-speed
Угол рассчитывается следующим образом и долженТакже будьте правы:
let dot (vx * rx + vy * ry)
let det (vx * ry - vy * rx)
set angle atan det dot
И, сложив все вместе, тета это:
let theta (sqrt (vx ^ 2 + vy ^ 2) * sin angle) / sqrt(rx ^ 2 + ry ^ 2)
И затем я вычисляю разницу с ранее вычисленной тэтой, поскольку первая формула использует ее дифференциалумножьте его на постоянную и преобразуйте в градусы:
let delta-theta theta - theta-old
set theta-old theta
let turn-rate (delta-theta * N * 180 / pi)
turn-at-most turn-rate max-hunt-turn
Когда я запускаю его, происходит следующее (обе черепахи имеют одинаковую скорость, один движется вправо, другой вверх) (он не изменяетсядля большинства значений N от 3 до 5)
Я предполагаю, что у меня есть некоторая ошибка в понимании последнего шага, так как я думаю, чтоКомпоненты должны быть в порядке. Чтобы задать вопрос: Что мне делать с тэтой (или дельта тэтой), чтобы получить изменение в заголовке?
Редактировать: вот где происходит фактический поворот:
to turn-at-most [turn max-turn] ;; turtle procedure
ifelse abs turn > max-turn
[ ifelse turn > 0
[ rt max-turn ]
[ lt max-turn ] ]
[ rt turn ]
end
Редактировать 2: текущее состояние таково, что я думаю, что формула, приведенная для тета, на самом деле уже является производной тета, потому что использование тета вместо дельта-тета дает мне желаемое поведение (или, по крайней мере,похоже это).Мне все еще нужно подтверждение для этого, но я буду держать ветку обновленной.