如何在NetLogo中用两条线将环境划分为四个均等区域?
NetLogo智能体定位与区域划分实现
我在NetLogo中实现了让智能体基于内部想法(Ai)和外部观点(Bi)定位的功能,现在需要添加两条划分线,把环境分成四个均等区域,方便观察那些Ai与Bi一致、处于中间对角线上的智能体。以下是我的位置更新代码:
to updatePosition resize-world -10 10 -10 10 ; 扩展x轴与y轴边界 let axis-x (world-width - 5) ; 减5是为了获得更好的视觉效果 let axis-y (world-height - 5) ; 减5是为了获得更好的视觉效果 ask turtles [ ; 如果智能体的Ai(内部想法)或Bi(外部观点)对应的坐标超出世界边界,就将其限制在边界内。 let clamped-Ai Ai let clamped-Bi Bi if clamped-Ai > 5 [ set clamped-Ai 5 ] if clamped-Ai < -5 [ set clamped-Ai -5 ] if clamped-Bi > 5 [ set clamped-Bi 5 ] if clamped-Bi < -5 [ set clamped-Bi -5 ] let scaled-x (axis-x * clamped-Ai / 10) let scaled-y (axis-y * clamped-Bi / 10) ; 更新海龟的位置 setxy scaled-x scaled-y ] end
要实现两条划分线(对应y=x和y=-x两条对角线,将世界分成四个均等区域),可以参考以下实现方案:
添加区域划分线的实现
方案1:独立画线过程
创建单独的画线过程,可按需单独调用:
to draw-dividing-lines clear-draw ; 清除之前的绘图痕迹 pen-down set-pen-color gray set-pen-size 2 ; 绘制y=x对角线(左下角到右上角) setxy -10 -10 setxy 10 10 ; 绘制y=-x对角线(左上角到右下角) setxy -10 10 setxy 10 -10 pen-up end
之后在updatePosition末尾调用该过程即可:
to updatePosition resize-world -10 10 -10 10 ; 扩展x轴与y轴边界 let axis-x (world-width - 5) ; 减5是为了获得更好的视觉效果 let axis-y (world-height - 5) ; 减5是为了获得更好的视觉效果 ask turtles [ ; 原位置更新逻辑保持不变 let clamped-Ai Ai let clamped-Bi Bi if clamped-Ai > 5 [ set clamped-Ai 5 ] if clamped-Ai < -5 [ set clamped-Ai -5 ] if clamped-Bi > 5 [ set clamped-Bi 5 ] if clamped-Bi < -5 [ set clamped-Bi -5 ] let scaled-x (axis-x * clamped-Ai / 10) let scaled-y (axis-y * clamped-Bi / 10) setxy scaled-x scaled-y ] draw-dividing-lines ; 调用画线过程 end
方案2:直接整合画线逻辑
如果不需要单独调用画线功能,可直接将代码写入updatePosition:
to updatePosition resize-world -10 10 -10 10 ; 扩展x轴与y轴边界 let axis-x (world-width - 5) ; 减5是为了获得更好的视觉效果 let axis-y (world-height - 5) ; 减5是为了获得更好的视觉效果 ask turtles [ ; 原位置更新逻辑保持不变 let clamped-Ai Ai let clamped-Bi Bi if clamped-Ai > 5 [ set clamped-Ai 5 ] if clamped-Ai < -5 [ set clamped-Ai -5 ] if clamped-Bi > 5 [ set clamped-Bi 5 ] if clamped-Bi < -5 [ set clamped-Bi -5 ] let scaled-x (axis-x * clamped-Ai / 10) let scaled-y (axis-y * clamped-Bi / 10) setxy scaled-x scaled-y ] ; 绘制划分线 clear-draw pen-down set-pen-color gray set-pen-size 2 ; y=x对角线 setxy -10 -10 setxy 10 10 ; y=-x对角线 setxy -10 10 setxy 10 -10 pen-up end
额外优化:高亮对角线上的智能体
如果需要直观标记Ai与Bi一致的智能体,可在ask turtles块中添加如下逻辑:
ask turtles [ ; 原位置更新逻辑... setxy scaled-x scaled-y ; 用小误差范围避免浮点精度问题,高亮Ai≈Bi的智能体 if abs(clamped-Ai - clamped-Bi) < 0.1 [ set color red ] else [ set color blue ; 其他智能体用默认颜色 ] ]
内容的提问来源于stack exchange,提问作者Aleyna Aslan
相关产品推荐
相关产品推荐

