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
此外,您可能希望查看模型库中的“反弹示例”模型,该模型演示了如何使角度反弹生效