找到随机移动的粒子命中的边界补丁

时间:2018-12-09 05:26:18

标签: netlogo

我有一个随机绘制的蓝色边框,还有一个放置在边框内的球,应该随机向内移动,当它碰到墙时,应该朝相反的方向旋转并继续。为此,我写了一个代码

df["Dummy"] = 1 * (df["Spend"] > LIMIT)
df.groupby("Name") ["Dummy"] .sum() / df.groupby("Name").size()

此代码似乎有效,但是现在需要在球撞到墙壁时创建闪光。我尝试了以下代码-没有成功

breed [ balls ball ]
ask balls
  [
    ifelse (pcolor = blue or [pcolor] of patch-at dx dy = blue)
    [  
     rt 180
    ]
    [
      jump 0.4
    ]
  ]

该问题应如何解决? 谢谢

1 个答案:

答案 0 :(得分:1)

我认为是导致问题的if (pcolor = blue)行。您的ball代理实际上从来不会处于蓝色补丁上,因为一旦他们评估了他们之前的补丁(使用您的patch-at dx dy行),您就可以让他们转身。因此,if (pcolor = blue)永远不会求真,因此不会产生任何闪烁。如果您输入以下内容,这将是打印命令进行调试的好地方-

...
     if (pcolor = blue)
      [
        print "making flash"
...

您将看到该代码从未真正评估过。因此,要解决此问题,您必须重新评估实际应何时发生闪烁-一个可能适合您的简单示例:

breed [ flashes flash ]
breed [ balls ball ]

flashes-own [ birthday ]

to setup
  ca
  ask patches with [ 
    member? pxcor list max-pxcor min-pxcor or
    member? pycor list max-pycor min-pycor 
  ] [
    set pcolor blue
  ]

  create-balls 10 

  reset-ticks
end

to apply-flash-visualization
  set size size + 1
  if ticks - birthday > 2  [ die ]
end


to go
  ask flashes [ apply-flash-visualization ]
  ask balls [
    let next patch-ahead 1
    ifelse [pcolor] of next = blue [
      ask next [
        sprout-flashes 1 [
          set shape "square"
          set color white
          set birthday ticks
        ]
      ]
      rt 180
    ] [
      fd 1
    ]
  ]
  tick
end

此外,您可能需要查看模型库中的“弹跳示例”模型,该模型显示了如何使成角度的弹跳工作。