Netlogo 找到随机移动的粒子击中的边界面片

Netlogo 找到随机移动的粒子击中的边界面片,netlogo,Netlogo,我有一个随机绘制的蓝色边框和一个放置在边框内的球,它应该随机移动到里面,当它碰到墙时,它应该朝相反的方向旋转并继续。为此我写了一段代码 breed [ balls ball ] ask balls [ ifelse (pcolor = blue or [pcolor] of patch-at dx dy = blue) [ rt 180 ] [ jump 0.4 ] ] 这段代码似乎有效,但现在需要在球撞到墙上时创建一个

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

breed [ balls ball ]
ask balls
  [
    ifelse (pcolor = blue or [pcolor] of patch-at dx dy = blue)
    [  
     rt 180
    ]
    [
      jump 0.4
    ]
  ]
这段代码似乎有效,但现在需要在球撞到墙上时创建一个闪光。我尝试了下面的代码,但没有成功

breed [ flashes flash ]
flashes-own [ birthday ]

to apply-flash-visualization
  set size 2.5
  if (ticks - birthday > 0.4)  [ die ]
end

to go
  ask flashes [ apply-flash-visualization ]
  ask balls
  [
    ifelse (pcolor = blue or [pcolor] of patch-at dx dy = blue)
    [  
     rt 180
      if (pcolor = blue)
      [
        let bounce-patch patch-here
        let new-px [ pxcor ] of bounce-patch
        let new-py [ pycor ] of bounce-patch
        ask patch new-px new-py [
          sprout 1 [
            set breed flashes
            set color gray - 2
            set birthday ticks
          ]
        ]
      ]
    ]
    [
      jump 0.4
    ]
  ]
这个问题应该如何解决? 谢谢

我认为是
if(pcolor=blue)
行造成了问题。你的
ball
代理永远不会真正在蓝色补丁上,因为一旦他们评估了前面的补丁,你就会让他们掉头(在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
此外,您可能希望查看模型库中的“反弹示例”模型,该模型演示了如何使角度反弹生效