NetLogo中如何保持turtle朝向不变实现左右横向移动?
NetLogo Turtle 保持朝向不变的横向移动实现方案
NetLogo 没有提供直接实现横向平移的内置原语,但可以通过临时调整朝向计算位移、移动后立刻还原原朝向的方式实现,最终不会改变turtle的heading属性,也不会和已有的前进、后退逻辑冲突。
实现原理
turtle的横向移动本质是沿当前朝向的垂直方向位移:
- 向右平移:对应垂直方向为当前朝向加90度
- 向左平移:对应垂直方向为当前朝向减90度
可复用代码
将下面两个自定义过程写入模型的Code标签页,即可全局调用:
; 向右横向移动指定距离,移动后保留原始朝向 to strafe-right [dist] let cached-heading heading set heading heading + 90 forward dist set heading cached-heading end ; 向左横向移动指定距离,移动后保留原始朝向 to strafe-left [dist] let cached-heading heading set heading heading - 90 forward dist set heading cached-heading end
调用方法
- 向右横移:调用
strafe-right 位移值,例如strafe-right 2即保持当前朝向右移2个单位 - 向左横移:调用
strafe-left 位移值,例如strafe-left 1.5即保持当前朝向左移1.5个单位
如果仅需单次临时使用,无需封装通用过程,可直接使用单行逻辑,例如右移1单位的写法:
let h heading rt 90 fd 1 set heading h
实现过程中对heading的修改是代码内部瞬时操作,模型界面不会观察到turtle转向,后续执行
forward/back等命令时,turtle仍会按照原始朝向移动,不会出现方向错乱。
内容的提问来源于stack exchange,提问作者Y S
相关产品推荐
相关产品推荐

