Netlogo 只提供了四个拓扑选项,它们指示海龟和补丁在到达 netlogo 世界或界面的任何给定边缘时会做什么,即盒子、圆环、水平环绕和垂直环绕......有没有办法调整这些选项,所以只有一个边缘被包裹?或者例如三个边缘被包裹?
1 回答
2
Nigus-我记得,我永远不会忘记一只柯基犬!无论如何,正如 Jen 提到的,没有内置的,但你可以将它构建到你的海龟运动规则中。例如,使用此设置:
to setup
ca
crt 10 [ pd ]
reset-ticks
end
如果您希望您的海龟将边界视为封闭,您可以让它们检查它们patch-ahead的移动速度(例如速度为 1,此处)并进行简单的数学运算以查看它们是否“允许”换行边界。要关闭左边界,请尝试:
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
我们应该期望它们最终会被“困”在展开的边界和红墙之间——这正如我们所料,一旦海龟穿过左边界,它们就无法返回:
于 2018-07-21T00:25:24.330 回答
