找到距离给定方向的其他海龟的存在

时间:2015-01-07 14:02:32

标签: netlogo

我想知道在给定的海龟的标题中是否有另一个代理人在一定的距离内出现。enter image description here

此处距离为“D”。

注意:

也应考虑在给定方向上出现在D之前的任何代理人。

即使这个方向也与其他代理中心不一致,但只是触及它,即使那时也应考虑该代理。

问题:

没有可用于提前的海龟手术。由于贴片尺寸>>组合提前补丁和乌龟开启不适用龟大小。 enter image description here 可能的方法: 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
  

让line-equ计算线(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度并得到线方程。)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

   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

以上作品。但仍然是约。我正在寻找更好的解决方案,可能更少的数学,正如问题中阐明的那样。