我有一个链接网络,我想以等距的间隔创建海龟,就像道路网络上的房子一样。
我玩过两个实现:
1-创建一个特殊的构建器海龟,在运行主模拟之前穿过链路网络,并按原样孵化海龟,即
ask builders
[
navigate 1 ;my network navigation function
if count homes in-radius 2 = 0
[
hatch-homes 1
]
]
2-或者,我可以浏览链接列表,并使用末端的位置、链接长度和链接标题变量进行一些三角运算,以确定将海龟放在哪里。编辑:我现在已经实现了trig版本——它并不完美,但它完成了任务。
选项1很容易实现,但受到半径内变量的阻碍,因为在一些网络上,链路可能平行运行(我们很接近),并且彼此非常接近。如果是这种情况,那么穿过的第二个链接可能不会得到任何海龟(因为它们在第一个链接的海龟半径范围内——如果你明白我的意思的话)。选项2涉及trig。
有人能想出一种更聪明/更简单的方法吗?
非常感谢您的关注-非常感谢所有的建议。
也许是这样的?(假设您排除了端点。)
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
这是我的尝试
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