Netlogo仅提供了四个拓扑选项,这些选项决定了当乌龟和补丁到达netlogo世界或界面的任何给定边缘时的行为,即盒子,圆环,水平环绕和垂直环绕...是否有调整的方法这些选择,以便只包装一条边?还是例如包裹了三个边缘?
答案 0 :(得分:2)
尼古斯-我记得,我永远不会忘记柯基犬!无论如何,正如Jen提到的那样,它没有内置功能,但是您可以将其内置到乌龟移动规则中。例如,使用以下设置:
to setup
ca
crt 10 [ pd ]
reset-ticks
end
如果您希望乌龟将边界视为封闭状态,则可以让它们根据移动速度(例如速度1,此处为1)检查其patch-ahead
并进行简单的数学运算以查看它们是否被“允许”包裹在那个边界。要关闭左边界,请尝试:
to left-closed ; turtle procedure
ask turtles [
let target patch-ahead 1
if ( ( [pxcor] of target ) - pxcor ) <= 1 [
fd 1
]
]
tick
end
要关闭右侧边界,您可以执行相反的操作:
to right-closed ; turtle procedure
ask turtles [
let target patch-ahead 1
if ( pxcor - ( [pxcor] of target ) ) <= 1 [
fd 1
]
]
tick
end
显然,这是一个非常简单的示例,需要做一些工作才能使其适应当前的运动规则。
修改:
要显示此效果,请查看此示例代码。首先,修改后的设置指定乌龟应在何处产卵,并创建红色补丁的“墙”:
to setup
ca
ask patches with [ pxcor = 5 ] [
set pcolor red
]
ask patch -5 0 [
sprout 10 [
pd
]
]
reset-ticks
end
现在,上面right-closed
过程的修改版本将其转变为to-report
:
to-report closed-border-right? [ target-patch ]
report ( pxcor - ( [pxcor] of patch-ahead 1 ) ) <= 1
end
现在,我们应该期望乌龟不能越过红墙。他们也应该不能越过右边界,但是他们应该能够越过左边界。因此,如果海龟可以自由游荡,请使用以下移动过程:
to move-example
ask turtles [
rt random 61 - 30
let target patch-ahead 1
if closed-border-right? target and [pcolor] of target != red [
fd 1
]
]
tick
end
我们应该期望它们最终会被“包裹”在未包裹的边界和红色墙壁之间,这正如我们所期望的那样发生,一旦海龟穿过左边界,它们就无法返回: