Я хочу узнать, присутствует ли в заголовке данной черепахи другой агент на заданном расстоянии.
Здесь Расстояние равно "D".
Примечание.
Также следует учитывать любого агента, присутствующего перед D в данном направлении.
Даже направление не совпадает с агентским центром другого, а просто касается его, даже тогда этого агента следует рассматривать.
Проблема:
Нет доступной процедуры "черепаха вперед". Комбинация "заплатка вперед" и "черепахи" не применима из-за того, что размер фрагмента >> размер черепахи. Возможный подход: 1. Представьте заголовок черепахи с помощью уравнения линия.
to-report calculate-line[x y angle]
let m tan angle
let A m
let B -1
let C (- m * x + y)
report (list A B C)
end
to-report heading-to-angle [ h ]
report (90 - h) mod 360
end
let line-equ calculate-line (xcor) (ycor) (заголовок-угол)
2. Вычислите перпендикулярное расстояние от других черепах здесь, проверьте, находятся ли они в пределах диапазона, равного размеру других черепах.
to-report value[A X1 Y1];;A is list of coefficents of line, x1 and y1 are coordinates of red turtle
if-else(abs((item 0 A * X1 + item 1 A * Y1 + item 2 A) / (sqrt((item 0 A ^ 2) + (item 1 A ^ 2) ))) < [size] of wall )
[ report "true"][report "false"]
конец
3. Чтобы проверить, находится ли красная черепаха в пределах D. Можно получить линию, перпендикулярную черной, и вычислить расстояние от нее до красной черепахи, чтобы проверить, меньше ли оно или равно D. Но тогда это добавляет больше сложности (хотя можно упростить поворот черепахи на 90 влево или вправо и получить линейное уравнение.)
in-radius
. Сделайте еще один шаг, снова используйтеin-radius
и так далее. Я не думал об этом. Это приблизительное значение, но может быть достаточно для ваших целей. - person Seth Tisue   schedule 07.01.2015