如何沿着链接每隔一段时间创建海龟



我有一个链接网络,我想以等距的间隔创建海龟,就像道路网络上的房子一样。

我玩过两个实现:

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

相关内容

最新更新