2

我想在景观中添加森林斑块。更准确地说,这个想法是添加补丁集群,如“补丁集群”示例。与此示例相反,我想随机分布一些具有相同颜色的补丁簇,而不是几个完全填充景观的簇。这是代码的开头:

to create-forests 
repeat 30 [
ask one-of patches [ 
set pcolor green
ask neighbors [ set pcolor green] ] ]
end 

使用此代码,集群看起来像正方形,而不是像“补丁集群”示例那样的集群。如何在我的景观中添加森林斑块集群?

谢谢你的帮助祝你有美好的一天海军陆战队

4

2 回答 2

3

怎么样:

to create-forests
  ask n-of 10 patches [ set pcolor green ]
  repeat 6 [
    ask patches with [pcolor = green] [
      ask one-of neighbors4 [ set pcolor green ]
    ]
  ]
end

结果如下所示:
在此处输入图像描述

于 2013-10-16T23:40:55.220 回答
2

一个快速的解决方案可能是使用patch-at-heading-and-distance函数。

to create-forests 

  ask patches[set pcolor black]
  repeat 5 
  [
    ask one-of patches
    [ 
      set pcolor green
      repeat 20
      [
        let a random 360
        let b random 2
        ask patch-at-heading-and-distance a b 
        [ 
          ask neighbors4 [ set pcolor green]
          set pcolor green 
        ]
      ]
    ] 
  ]
end 

使用此功能,您可以移动到另一个补丁邻居。使用 a(角度)、b(距离)的随机值范围以及这部分代码重复的次数,可以实现不同的森林密度。

对于邻居 4,我们尝试填充森林内可能存在的黑色斑块,(请注意,此技巧的成功将取决于森林的大小)

更复杂的选择可能是:

to create-forests2

  ask patches[set pcolor black]
  repeat 5
  [
    ask one-of patches
    [ 
      let size_f (random 2) + 1
      let border 2

      let big_area [list pxcor pycor] of patches with [abs pxcor <= size_f + border and abs pycor <= size_f + border]   
      let forested [list pxcor pycor] of patches with [abs pxcor <= size_f + random border and abs pycor <= size_f + random border]   

      ask patches at-points forested[set pcolor green]
      ask patches at-points big_area with[pcolor != green]
      [ if count(neighbors with [pcolor = green]) > 6 [ set pcolor green ] ]
    ] 
  ]
end

在列表的帮助下确定了 6/8 森林中包围的斑块,因此也被转换为森林

于 2013-10-12T05:13:53.537 回答