如何沿着链接间隔创建海龟

时间:2014-10-21 04:34:44

标签: netlogo

我有一个链接网络,我想以等距的间隔创建海龟 - 就像沿着公路网络的房子。

我玩了两个实现:

1 - 创建一个特殊的构建器乌龟,它在运行主模拟之前遍历链接网络,并像它一样孵化海龟,即

ask builders 
[
    navigate 1 ;my network navigation function
    if count homes in-radius 2 = 0  
    [
        hatch-homes 1 
    ]
]

2 - 或者,我可以逐步浏览链接列表并使用末尾的位置,链接长度和链接标题变量做一些触发来确定放置家龟的位置。 编辑:我现在已经实现了trig版本 - 它并不完美,但它可以完成工作。

选项1很容易实现,但有点受到半径变量的阻碍 - 因为在某些网络链接可能并行(我们接近)并且非常接近彼此。如果是这种情况,那么遍历的第二个链接可能不会得到任何海龟(因为它们在第一个链接的海龟的半径范围内 - 如果你看到我的意思)。选项2涉及trig。

有人能想到更聪明/更简单的方法吗?

非常感谢您的期待 - 所有建议都非常感谢。

2 个答案:

答案 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