如何用多边形中的另一种颜色替换颜色?

时间:2014-08-01 14:16:00

标签: netlogo

我有补丁如下: enter image description here

我想对白色贴片进行着色,如下图所示:enter image description here

这里是我的代码,用蓝色着色白色补丁:

ask patches with [pcolor = white] [
if any? neighbors with [pcolor = blue] [set pcolor blue] ]

但问题是我获得了这个数字:enter image description here

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

问题出现是因为补丁按顺序更改,因此一些白色补丁在响应ask时发现它们有新的蓝色邻居。

ask patches with [pcolor = white and any? neighbors with [pcolor = blue]] [set pcolor blue]

注意:编辑此答案是为了回应Nicholas的观察,with将在调用ask之前创建整个代理集。但是我坚持使用neighbors,因为我是如何阅读这个问题的。

答案 1 :(得分:2)

Alan对您的问题的原因是正确的,但您不需要创建next-pcolor补丁变量。如果你将两个条件放在with块内,NetLogo将首先构建补丁的代理集,然后要求这些补丁执行操作,从而避免计时你遇到的问题。我们来试试吧。而且由于你显然不得不同时使用蓝色和青色补丁,让我们构建一个更通用的版本:

to color-white-patches-v1 [ c ]
  ask patches with [ pcolor = white and any? neighbors with [ pcolor = c ]] [
    set pcolor c
  ]
end

然后您可以拨打:

color-white-patches-v1 cyan
color-white-patches-v1 blue

结果如下:

v1

但这并不是你想要的。那是因为neighbors为你提供了一个补丁的所有8个邻居。让我们尝试使用neighbors4

to color-white-patches-v2 [ c ]
  ask patches with [ pcolor = white and any? neighbors4 with [ pcolor = c ]] [
    set pcolor c
  ]
end

v2

还没到那里。它认为你将不得不诉诸patch-at之类的东西。在这个例子中,我只看上面的补丁:

to color-white-patches-v3 [ c ]
  ask patches with [ pcolor = white and [ pcolor ] of patch-at 0 1 = c ] [
    set pcolor c
  ]
end

v3

我不确定这是否正是您想要的以及适用于您的一般问题的效果,但是patch-at的某种组合,您应该能够得到您所需要的。