目录
circular path example
circular path是netlogo模型代码库中的一个案例,初始界面如图所示:
初始设置:setup键
初始设置即:设置世界的初始状态。一般在界面添加setup按钮,在setup按钮对应的代码中设置主体的各种初始参数。具体操作如下:
1.添加setup按钮:点击添加、按钮,然后选择一个位置,在弹出来的对话框“命令”中将其此按钮命名为“setup”。操作完成之后setup按钮文字为红色,表示报错,因为还没有为setup添加代码。
- 为setup按钮添加代码;点击代码窗口,在这里编写setup按钮的执行代码,就是按下setup按钮后你希望netlogo所执行的操作。
globals [radius]
;;定义世界的属性【半径】
to setup
;;亲爱的setup按钮
clear-all
;;请把世界清理干净
set radius max-pxcor - 2
;;然后把世界的最大横坐标设置为2
create-ordered-turtles 12
;;在世界的中心造出12个面朝不同方向的海龟
[fd radius
;;海龟听令:向前走,走世界的半径那么远的距离
rt 90
;;然后向右转90度
set size 3
;;然后把自己的大小设置为3
set pen-size 3]
;;然后把你们的笔的大小设置为3
reset-ticks
;;重置时间
end
;;结束
这样setup键就设置完成了,此时setup键变为黑色。
运行设置:go键
go键即:设置这个世界如何运行。同样,需要在界面添加go按钮,然后为go按钮编写相应代码。在circular path example这个例子中,世界有两种运行方式:1.海龟按距离画圈;2.海龟按角度画圈,所有有两个go按钮,分别是go-distance、go-angle。具体操作如下:
1.添加go-distance按钮和step-size选择器:点击添加、按钮,然后选择一个位置,在弹出来的对话框“命令”中将其此按钮命名为“go-distance”。操作完成之后go-distance按钮文字为红色,表示报错,因为还没有为go-distance添加代码。同样,添加选择器并将其命名为step-size,设置变量为10、1、0.1、0.01、0.001,表示go-distance可选择的步长。
- 为go-distance按钮添加代码;点击代码窗口,在这里编写go-distance按钮的执行代码。
to go-distance
;;亲爱的go-distance按钮
ask turtles [ arc-forward-by-dist step-size ]
;;请让海龟们arc-forward-by-dist,步长为step-size
tick
;;时钟请计时
end
;;结束
to arc-forward-by-dist [dist]
;;定义arc--forward-by-dist的步长为dist
let theta dist * 180 / (pi * radius)
;;算出与dist对应的圆心角大小theta
rt theta / 2
;;向右转theta/2的角度
fd dist
;;前进dist距离
rt theta / 2
;;再向右转theta/2的角度
end
;;结束
这里嵌套了代码,go-distance按钮执行的是名为“arc–forward-by-dist”的代码,然后再对“arc–forward-by-dist”进行定义。
不过这里我也有个不明白的地方:这个dist是新定义的变量,即海龟前进的距离,它为什么可以直接与step-size这个变量相等?
3.添加go-angle按钮和arc-angle选择器:与步骤1一样。arc-angle设置为1、2、5、10、36、72、90,表示可选择的角度大小。
4.为go-angle按钮添加代码:(与2类似)
to go-angle
ask turtles [ arc-forward-by-angle arc-angle ]
tick
end
to arc-forward-by-angle [angle]
rt angle / 2
fd 2 * radius * sin (angle / 2)
rt angle / 2
end
最后的效果
完成之后就是一群海龟转圈,会留下不同颜色的路线。
注意点
1.符号前记得加空格,否则netlogo会误认为符号与代码相连,例如:set radius max-pxcor - 2中,前一个max-pxcor是一个整体,而2前面的-是与数字分开的。
2.代码的最前面记得定义globals的属性 [radius],否则netlogo无法识别radius。
3.在添加go按钮时,记得在“持续执行”(forever)前打上勾,否则go的代码只运行一次。
(2022.3.13)