我有一个链接网络,我想以等距的间隔创建海龟 - 就像沿着公路网络的房子。
我玩了两个实现:
1 - 创建一个特殊的构建器乌龟,它在运行主模拟之前遍历链接网络,并像它一样孵化海龟,即
ask builders
[
navigate 1 ;my network navigation function
if count homes in-radius 2 = 0
[
hatch-homes 1
]
]
2 - 或者,我可以逐步浏览链接列表并使用末尾的位置,链接长度和链接标题变量做一些触发来确定放置家龟的位置。 编辑:我现在已经实现了trig版本 - 它并不完美,但它可以完成工作。
选项1很容易实现,但有点受到半径变量的阻碍 - 因为在某些网络链接可能并行(我们接近)并且非常接近彼此。如果是这种情况,那么遍历的第二个链接可能不会得到任何海龟(因为它们在第一个链接的海龟的半径范围内 - 如果你看到我的意思)。选项2涉及trig。
有人能想到更聪明/更简单的方法吗?
非常感谢您的期待 - 所有建议都非常感谢。
答案 0 :(得分:1)
也许是这样的? (假设你排除了终点。)
to-report convex-combinations [#pt1 #pt2 #npts]
;;report list of convex cominations (endpoints excluded)
let x1 item 0 #pt1 let y1 item 1 #pt1
let dx21 item 0 #pt2 - x1
let dy21 item 1 #pt2 - y1
let wts n-values #npts [(? + 1) / (#npts + 1)]
report map [list (x1 + dx21 * ?) (y1 + dy21 * ?)] wts
end
to-report pts-along [#link #npts]
let locations []
ask #link [
ask both-ends [
set locations lput (list xcor ycor) locations
]
]
report convex-combinations item 0 locations item 1 locations #npts
end
to place-along [#link #nturtles]
let locations pts-along #link #nturtles
foreach locations [
let x item 0 ? let y item 1 ?
crt 1 [setxy x y]
]
end
答案 1 :(得分:0)
这是我的尝试
To populate
Ask links [
Let s 0
Let e2 end2
Ask end1[
Let dist distance e2
Hatch dist
[
Set s s + 1
Set heading towards e2
Fd s
]
]
]
End