【问题标题】:Ask turtles to change colour when they go through a certain patch Netlogo让海龟在经过某个补丁时改变颜色 Netlogo
【发布时间】:2023-09-28 10:09:02
【问题描述】:

当乌龟经过某个补丁时,它会改变颜色并随着新颜色随机移动。所以我问名为'yong'的海龟是黄色的,如果任何'yong'海龟穿过半径为2的补丁,它应该将颜色变为绿色。我的代码运行没有错误,但在输出中,所有黄色的“yong”海龟都将颜色变为绿色,这不是我想要的。

to interact-turtles
 ask yong [
 if any? yong-on patches in-radius 2 [ set color green  ]
  ]
end

【问题讨论】:

    标签: netlogo


    【解决方案1】:

    你的问题是你让乌龟询问补丁in-radius,这将把这些补丁的原点放在乌龟恰好在的任何地方。相反,您需要距离原点 2 以内的补丁。

    to interact-turtles
      let sink patches with [abs px-cor <= 2 and abs py-cor <= 2]
      ask yong-on sink [ set color green  ]
    end
    

    但是,如果您希望这个汇区域成为环境的永久特征,您可以使用变量来存储它,而不是重复创建它。作为全局变量:

    globals [sink]
    
    to setup
      ...
      set sink patches with [abs px-cor <= 2 and abs py-cor <= 2]
      ...
    end
    

    那你可以随时ask yong-on sink做事。

    或者您可以为每个补丁设置一个真/假(布尔)变量,说明它是否在接收器中。

    patches-own [sink?]
    
    to setup
      ...
      ask patches [ set sink? if abs px-cor <= 2 and abs py-cor <= 2]
      ...
    end
    

    然后你就可以用ask yong-on patches with [sink?]这样的结构来做事了。

    【讨论】:

    • 感谢@JenB 的回复。澄清一下,我希望通过补丁的任何 yong 乌龟将颜色从黄色变为绿色。当我这样做ask yong [ if any? other yong-on patches in-radius 2 [ set color green ] ] 时,除了两三只外,几乎所有的幼龟都会变绿,这应该是相反的。比如我应该只有几只幼龟变绿的不多。
    • 你指的是“补丁”。你的意思是什么补丁?
    • 我的意思是圆的面积,半径为2的圆心。我是这样创建的 clear-all let sink-patch-radius 2 let sink-centre patch 0 0 set sink-patches [patches in-radius sink-patch-radius] of sink-centre ask sink-patches [ set pcolor red ] end
    • 那是你的问题,你在请求​​海龟 2 以内的补丁。我会修改