2014-01-08 102 views

回答

4

第一次刺伤了塞思的建议#1。它也创造了一个整洁的视觉!

patches-own [ height ] 

to blobbify 
    clear-all 
    repeat (ceiling 2 * (ln (world-height * world-width))) [ 
    ask patch (round (random (world-width/2)) - world-width/4) 
       (round (random (world-height/2)) - world-height/4) 
       [ set height world-width * world-height ] ] 
    while [ count patches with [ height > 1 ] < (world-width * world-height/4)] 
     [ diffuse height 1 
      ask patches with [ height > 0 ] [ set pcolor height ] 
     ] 
    ask patches with [ height > 1 ] [ set pcolor white ] 
end 
2

随机生成的斑点是一个困难的问题没有明显的解决方案。修复blob的面积使其变得更加困难。

您需要选择一种方法,然后尝试找出如何在NetLogo代码中表达该方法。

至于采取什么方法,我想如果你搜索,有关于此的文献。但是,就在我的头顶,我有三个想法:在世界各地

  • 分散随机点,使用diffuse使周围这些峰平稳的风景线。 (请参阅NetLogo的模型库中的艺术部分的扩散图形模型,代码为此,但您仍然希望关闭世界环绕。)然后选择“高程”超过某个阈值的那些修补程序。要获得所需区域,请更改阈值,直至达到目标。

  • 使用极坐标绘制围绕中心点的曲线,其中θ从0变到360并且4随机变化。您需要一种方法来获得半径上的平滑随机变化,可能是通过生成随机数然后应用平滑函数。为了强制blob具有所需的区域,首先生成整个曲线,然后根据需要对其进行缩放。您需要一些技巧来避免theta = 0的不连续性,也许通过使用包装的平滑函数。

  • 通过散布世界各地的点生成随机多边形,然后丢弃中间的一些或所有点。 (你可以拿出凸包,但是你总是会得到一个凸形,这对你来说可能不够“水坑”,所以你可能想要类似产生n个随机点,然后保留m个点离中心最远,不考虑凸面。)一旦得到了随机多边形,就应用一些平滑函数将它变成一个弯曲的斑点。然后根据需要缩放整个区域以获得所需区域。

4

我发现了一个非常简单的方法,可以产生相当不错的结果。

创建一只乌龟。乌龟进行随机游走。每一步之后,他们将最靠近它们的无色斑块设置为所需的颜色。乌龟会多次等待所需的面积。

下面的代码:

to make-blob [ area ] 
    let blob-maker nobody 
    crt 1 [ set blob-maker self ] 
    repeat area [ 
    ask blob-maker [ 
     ask min-one-of patches with [ pcolor = black ] [ distance myself ] [ set pcolor blue ] 
     rt random 360 
     fd 1 
    ] 
    ] 
    ask blob-maker [ die ] 
end 

这自然产生很好弯曲斑点。

使龟的步长变小会使blob更圆。将它变得更大会导致更细,更零星的斑点(尽管你会冒险获得不连贯的补丁)。

编辑:

我注意到,我的回答很运行缓慢,当你有补丁的一个巨大的数字。这里有一个更快的版本:

to make-blob [ area x y ] 
    let blob-maker nobody 
    crt 1 [ set blob-maker self setxy x y ] 
    let border patch-set [ patch-here ] of blob-maker 
    repeat area [ 
    ask blob-maker [ 
     ask min-one-of border [ distance myself ] [ 
     set pcolor green 
     set border (patch-set border neighbors4) with [ pcolor = black ] 
     ] 
     rt random 360 
     fd .8 
    ] 
    ] 
    ask blob-maker [ die ] 
end 
相关问题