我想知道在给定的海龟的标题中是否有另一个代理人在一定的距离内出现。
此处距离为“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
让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度并得到线方程。)
答案 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
以上作品。但仍然是约。我正在寻找更好的解决方案,可能更少的数学,正如问题中阐明的那样。