如何在NetLogo中修改圆形中心位置?已尝试layout-circle等方法未果
解决NetLogo中创建非中心位置圆形的问题
看起来你卡在了怎么让生成的圆形不在NetLogo世界中心,对吧?layout-circle默认是围绕原点(0,0)排列海龟的,所以直接用的话圆心肯定在中间。下面给你两种靠谱的解决思路,还有分析下你之前尝试的问题所在:
方法一:先布局圆形,再整体平移
这是最省心的方式——先让layout-circle帮你把海龟排成圆形,然后把整个圆平移到你想要的坐标点。代码示例:
to setup-food clear-all set-default-shape turtles "dot" let num-food 25 ; 这里替换成你的食物数量变量 let radius 10 ; 圆形半径 ; 随机选一个圆心坐标,也可以换成固定值比如(20,15) let target-center-x random-pxcor let target-center-y random-pycor create-ordered-turtles num-food [ set color blue ] ; 先围绕原点生成圆形布局 layout-circle turtles radius ; 把所有海龟整体移动到目标圆心位置 ask turtles [ setxy (xcor + target-center-x) (ycor + target-center-y) ] end
方法二:手动计算每个海龟的位置
如果不想依赖layout-circle,可以自己算每个海龟的角度,直接基于目标圆心设置位置,灵活性更高:
to setup-food clear-all set-default-shape turtles "dot" let num-food 25 let radius 10 let center-x random-pxcor let center-y random-pycor repeat num-food [ let current-turtle-index (count turtles) ; 给每个海龟分配均匀的角度 let angle (current-turtle-index * 360 / num-food) create-turtles 1 [ set color blue ; 基于圆心坐标计算当前海龟的位置(NetLogo的cos/sin直接用度数就行) setxy (center-x + radius * cos angle) (center-y + radius * sin angle) ] ] end
聊聊你之前的尝试为啥没成功
- 第一次尝试里的
patch-at random-pxcor random-pycor [cro 10 [fd radius...]],应该是create-ordered-turtles打错了吧?这种方式是在随机补丁上创建海龟然后让它们向前走,但每个海龟的初始方向是随机的,根本没法形成规整的圆形,更别说固定圆心了。 - 第二次尝试里,你先做了
layout-circle,然后又让每个海龟单独setxy random-pxcor random-pycor,这相当于把刚排好的圆形直接打散了,当然看不到想要的效果啦。
另外提个小细节:NetLogo里的角度是逆时针为正,而且cos和sin函数直接接受度数,不用转成弧度,这点和很多编程语言不一样,别踩坑哦~
内容的提问来源于stack exchange,提问作者Amber
相关产品推荐
相关产品推荐

