是否可以在NetLogo中创建一个给定区域的随机形状(例如见下文)?在NetLogo中创建一个给定区域的随机形状(blob)
回答
第一次刺伤了塞思的建议#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
随机生成的斑点是一个困难的问题没有明显的解决方案。修复blob的面积使其变得更加困难。
您需要选择一种方法,然后尝试找出如何在NetLogo代码中表达该方法。
至于采取什么方法,我想如果你搜索,有关于此的文献。但是,就在我的头顶,我有三个想法:在世界各地
分散随机点,使用
diffuse
使周围这些峰平稳的风景线。 (请参阅NetLogo的模型库中的艺术部分的扩散图形模型,代码为此,但您仍然希望关闭世界环绕。)然后选择“高程”超过某个阈值的那些修补程序。要获得所需区域,请更改阈值,直至达到目标。使用极坐标绘制围绕中心点的曲线,其中θ从0变到360并且4随机变化。您需要一种方法来获得半径上的平滑随机变化,可能是通过生成随机数然后应用平滑函数。为了强制blob具有所需的区域,首先生成整个曲线,然后根据需要对其进行缩放。您需要一些技巧来避免theta = 0的不连续性,也许通过使用包装的平滑函数。
通过散布世界各地的点生成随机多边形,然后丢弃中间的一些或所有点。 (你可以拿出凸包,但是你总是会得到一个凸形,这对你来说可能不够“水坑”,所以你可能想要类似产生n个随机点,然后保留m个点离中心最远,不考虑凸面。)一旦得到了随机多边形,就应用一些平滑函数将它变成一个弯曲的斑点。然后根据需要缩放整个区域以获得所需区域。
我发现了一个非常简单的方法,可以产生相当不错的结果。
创建一只乌龟。乌龟进行随机游走。每一步之后,他们将最靠近它们的无色斑块设置为所需的颜色。乌龟会多次等待所需的面积。
下面的代码:
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
- 1. 如何生成指定区域的随机形状(R语言)。
- 2. 创建一个区域形状的电子邮件链接
- 3. 在两个重叠的椭圆形状区域内生成随机点
- 4. 创建一个小于最大给定值的随机数
- 5. html中的区域形状
- 6. 如何创建一个事件:点击ListView中的随机区域?
- 7. 随机生成一个形状
- 8. 如何在netlogo中为几组代理创建区域?
- 9. 我如何做一个随机生成一个特定区域
- 10. 创建一个随机数
- 11. 填充包含另一个形状的形状的特定区域
- 12. 创建图形区域
- 13. 如何在特定区域内随机化一个图片盒
- 14. 随机的形状和颜色在一个框架的中心
- 15. KML区域形状
- 16. 在NetLogo中创建两个具有不同拓扑关系的区域
- 17. 如何在draw.io中创建一个固定大小的形状?
- 18. Java - 从预先设计的形状中选择一个随机的形状
- 19. 在给定的Geopoint的50英尺内随机创建一个Geopoint(空间SQL)
- 20. C++形状区域:获取区域0
- 21. Netlogo要随机选择3个程序中的一个
- 22. 从独立线创建的形状创建一个多边形
- 23. 创建一个随机的2D凹面多边形景观JavaScript
- 24. 给定一个矩形区域和一组矩形,检查整个区域是否被它们覆盖
- 25. 创建一个特定的路由表项以一个区域
- 26. 在netlogo中绘制品种形状
- 27. 使用wxWidget创建一个带有浮雕的矩形区域
- 28. 使用Kinetic.js创建一个矩形的拖放区域
- 29. 在ASP.NET中创建自定义区域
- 30. 计算由Android上的自定义线条创建的形状区域