这是一个基于经典 Boids 算法的群体智能行为可视化演示程序,展示了自然界中鸟群、鱼群等群体的涌现行为模式。
# 进入项目目录
cd Boids
# 启动本地服务器
python3 -m http.server 8000
# 在浏览器中访问
open http://localhost:8000- 现代浏览器(支持 Canvas 2D 和 ES6+)
- Python 3.x(用于本地服务器)
- 左键点击并拖拽:创建吸引点,群体会被吸引过来
- 右键点击 或 Alt/Option + 左键:创建排斥点,群体会避开该区域
- Shift + 左键点击:在点击位置添加圆形障碍物
- 鼠标移动:在"鼠标跟随模式"开启时,群体会朝鼠标方向移动
- 暂停/继续:暂停或恢复模拟
- 重置:重新生成群体,清除吸引/排斥点
- 清除障碍:移除所有障碍物
| 参数 | 说明 | 推荐范围 | 默认值 |
|---|---|---|---|
| 数量 | 群体中个体的数量 | 20-600 | 150 |
| 感知范围 | 个体能感知到其他个体的距离 | 20-150 | 60 |
| 分离距离 | 个体开始相互排斥的距离 | 10-80 | 24 |
| 最大速度 | 个体移动的最大速度 | 0.5-6.0 | 3.0 |
| 最大转向力 | 个体改变方向的最大力度 | 0.01-0.3 | 0.05 |
| 参数 | 说明 | 推荐范围 | 默认值 |
|---|---|---|---|
| 对齐权重 | 个体朝相同方向移动的倾向 | 0-3.0 | 1.0 |
| 凝聚权重 | 个体向群体中心聚集的倾向 | 0-3.0 | 1.0 |
| 分离权重 | 个体相互保持距离的倾向 | 0-4.0 | 1.2 |
| 参数 | 说明 | 推荐范围 | 默认值 |
|---|---|---|---|
| 障碍躲避权重 | 个体躲避障碍物的强度 | 0-5.0 | 2.0 |
| 边界回弹权重 | 个体在边界回弹的强度 | 0-4.0 | 1.5 |
| 鼠标跟随权重 | 个体跟随鼠标的强度 | 0-3.0 | 0.8 |
- 边界回弹模式:开启后个体在边界处回弹,关闭后使用环绕穿越
- 鼠标跟随模式:开启后个体会主动朝鼠标方向移动
- 使用默认参数启动
- 适当调整三个基础权重(对齐、凝聚、分离)
- 观察不同权重组合下的群体模式
推荐参数组合:
- 紧密群体:凝聚权重 2.0,分离权重 0.8
- 松散群体:凝聚权重 0.5,分离权重 2.0
- 高度对齐:对齐权重 2.5,其他权重 1.0
- 开启边界回弹模式
- 提升障碍躲避权重到 2.5-3.5
- 增加最大转向力到 0.08-0.12
- 使用 Shift + 点击添加多个障碍物
- 观察群体的绕行行为
- 开启鼠标跟随模式
- 设置跟随权重为 1.5-2.0
- 适当降低凝聚权重到 0.5
- 移动鼠标引导群体运动
- 添加多个障碍物形成"迷宫"
- 开启边界回弹限制活动区域
- 使用吸引点和排斥点创建"流场"
- 调整各项权重平衡不同行为
- 对齐(Alignment):个体朝邻居的平均速度方向调整
- 凝聚(Cohesion):个体朝邻居的平均位置移动
- 分离(Separation):个体远离过近的邻居
- 障碍躲避:基于距离的推斥力,支持预测性转向
- 边界处理:可选择回弹或环绕两种模式
- 鼠标交互:实时跟踪鼠标位置的寻向行为
- 使用设备像素比适配高分屏
- Canvas 2D 渲染优化
- 运动模糊效果增强视觉体验
- 编辑
styles.css调整 UI 主题 - 修改
script.js中的渐变色彩和粒子大小 - 调整背景和尾迹效果
- 在
Boid.flock()方法中添加新的力计算 - 在控制面板中添加对应的参数滑块
- 更新参数对象和同步函数
- 实现四叉树或网格空间分割
- 添加 LOD(细节层次)系统
- 使用 Web Workers 进行并行计算
- 画面卡顿:降低个体数量或调低最大速度
- 行为异常:检查权重参数是否过大
- 无法添加障碍物:确保使用 Shift + 左键点击
- 鼠标跟随无效:检查"鼠标跟随模式"是否已开启
- Chrome/Edge 80+
- Firefox 75+
- Safari 13+
演示程序基于 HTML5 Canvas 和原生 JavaScript 开发,无需额外依赖。