Найдите на некотором расстоянии других черепах в заданном направлении.

Я хочу узнать, присутствует ли в заголовке данной черепахи другой агент на заданном расстоянии. введите здесь описание изображения

Здесь Расстояние равно "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 влево или вправо и получить линейное уравнение.)


person Abhishek Bhatia    schedule 07.01.2015    source источник
comment
Я думаю, вам просто придется потрудиться с математикой по этому поводу.   -  person Seth Tisue    schedule 07.01.2015
comment
вы можете использовать комбинацию patch-forward и turtles-on, чтобы определить, каких черепах проверять на столкновение. Одна из проблем, с которой вы столкнетесь, заключается в том, что требование «просто прикоснуться» означает, что расстояние важно. То есть, прикоснетесь ли вы к краю черепахи, зависит от того, как далеко она находится.   -  person JenB    schedule 07.01.2015
comment
@JenB Я пробовал один примерный возможный подход, но он кажется сложным. Пожалуйста, посмотрите.   -  person Abhishek Bhatia    schedule 07.01.2015
comment
@SethTisue А как насчет подхода, при котором вы выводите черепаху в заданном месте, а затем перемещаетесь на расстояние D. И проверяете перекрытие на каждом шаге.   -  person Abhishek Bhatia    schedule 07.01.2015
comment
Конечно, это хорошая идея. Сделайте шаг, используйте in-radius. Сделайте еще один шаг, снова используйте in-radius и так далее. Я не думал об этом. Это приблизительное значение, но может быть достаточно для ваших целей.   -  person Seth Tisue    schedule 07.01.2015
comment
@JenB Но, поскольку размер патча ›› черепаший размер. Я не думаю, как может быть полезна комбинация патча вперед и черепахи.   -  person Abhishek Bhatia    schedule 08.01.2015
comment
@SethTisue Должен быть другой способ. Можно ли создать ссылки на всех других черепах в данном направлении черепахи, но только на определенном расстоянии?   -  person Abhishek Bhatia    schedule 08.01.2015
comment
Только если вы знаете, как вычислить этот набор черепах. Вы просто повторяете вопрос.   -  person Seth Tisue    schedule 08.01.2015
comment
@SethTisue Думаю, я недостаточно хорошо это объяснил. 1. Создайте черепаху на расстоянии d от настоящего (штриховка 1 fd d). 2. Создайте ссылку на эту черепаху из оригинала. 3. Как-нибудь проверьте, пересекают ли другие черепахи эту ссылку (что невозможно из того, что я знаю).   -  person Abhishek Bhatia    schedule 08.01.2015
comment
Создание ссылки не дает вам ничего, что я вижу.   -  person Seth Tisue    schedule 08.01.2015
comment
@SethTisue Да, ты прав. Я искал процедуру, которая сообщает, лежат ли другие черепахи на одной ссылке. Примечание: ложь определенно не означает, что она связана.   -  person Abhishek Bhatia    schedule 08.01.2015


Ответы (2)


Вот что я имел в виду под своим комментарием. Запустите этот код (как его собственную модель). Что он делает, так это меняет цвет всех черепах на нескольких участках «впереди». Я знаю, что это не то, что вы пытаетесь сделать, но кандидаты в набор агентов - это относительно небольшое количество черепах. Это единственные, которые вы должны проверить, находятся ли они на правильном пути. Поэтому вместо того, чтобы менять цвет, вы можете проверить направление, в котором они находятся от вашей первоначальной черепахи.

to setup
  clear-all
  set-patch-size 25
  resize-world -10 10 -10 10
  create-turtles 1000
  [ setxy random-xcor random-ycor
    set color yellow
    set size 0.4
  ]
  ask one-of turtles
  [ set color red
    set size 1
    check-from-me 5
  ]
end

to check-from-me [howfar]
  let counter 0
  let candidates turtles-here
  while [counter < howfar]
  [ set counter counter + 1
    set candidates (turtle-set candidates turtles-on patch-ahead counter)
  ]
  ask candidates [set color red]
end
person JenB    schedule 08.01.2015

   to-report check-wall 
   let return false
  hatch 1[
    set color black
    set size ([size] of one-of walls) / 2
    show (2.5 * ([size] of myself))
    while [distance myself < (2.5 * ([size] of myself))]
    [

      fd ([size] of one-of walls) / 64
      if any? walls in-radius size
      [
        set return true
        ]
      show distance myself
      ]

    ]
  report return
  end

Вышеуказанное работает. Но все равно ок. Я ищу лучшее решение с, вероятно, меньшим количеством математики, как выяснилось в вопросе.

person Abhishek Bhatia    schedule 08.01.2015