由 Rust + WebAssembly 驱动的 N 体引力模拟
🖱️ 单击 添加粒子团 | 刷新页面重新随机生成
N 体引力模拟:画布上的每个粒子都受到其他所有粒子的万有引力,粒子会自发聚集成团、互相环绕、合并。点击画布可以投放新的粒子团。
F ∝ G / r²,复杂度是 O(n²)。利用牛顿第三定律(作用力与反作用力大小相等、方向相反),每对粒子只算一次,同时更新双方,计算量减半。r² + ε²(ε = 20)。否则两个粒子靠得太近时引力趋于无穷大,粒子会被瞬间弹飞。dt = 0.016s(约一帧)。引力大于 1500 时每帧拆成 3 个子步,提高稳定性。init_particles(300, 900, 600):Rust 随机生成 300 个粒子,保存为全局状态。step_particles(dt, 引力, 阻尼),由 Rust 完成全部物理计算。get_particles(),取回扁平数组 [x1, y1, x2, y2, …],用径向渐变画出发光粒子,并用半透明覆盖层产生拖尾效果。add_cluster(x, y, 50, 30),在点击位置附近加入 50 个粒子。源码crates/simulation/particles/src/lib.rswww/particles/index.js