0
点赞
收藏
分享

微信扫一扫

netlogo笔记(1):circular path example代码详解

上善若水山西太原 2022-03-14 阅读 29
lisp

目录

circular path example

circular path是netlogo模型代码库中的一个案例,初始界面如图所示:
turtles首尾相接形成一个圆。在后续的动作中,turtles将会沿一定的路线前进,形成绕圈转的效果。

初始设置:setup键

初始设置即:设置世界的初始状态。一般在界面添加setup按钮,在setup按钮对应的代码中设置主体的各种初始参数。具体操作如下:

1.添加setup按钮:点击添加、按钮,然后选择一个位置,在弹出来的对话框“命令”中将其此按钮命名为“setup”。操作完成之后setup按钮文字为红色,表示报错,因为还没有为setup添加代码。

  1. 为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可选择的步长。

  1. 为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)

举报

相关推荐

0 条评论