fluid_flow 流体可视化:改一个 lambda 就把蓝点吹成漩涡与四重流场
2026/9/15 11:00:18 网站建设 项目流程

fluid_flow 流体可视化:改一个 lambda 就把蓝点吹成漩涡与四重流场

【免费下载链接】videosCode for the manim-generated scenes used in 3blue1brown videos项目地址: https://gitcode.com/GitHub_Trending/vi/videos

你在终端敲下一条命令,屏幕里立刻涌出几百个蓝点,顺着黄色箭头滑出漩涡。fluid_flow 用 Manim 做流体可视化,让粒子沿向量场(Vector Field)走,前置只有一行环境——装好 3b1b 版 manim。

跑通流体可视化

这条命令在快速档下渲染基础四漩涡场景,直接出一段低清视频。

manim _2015/ka_playgrounds/fluid_flow.py VectorFieldExample -qm

你会看到:白色坐标轴铺开,黄色箭头标出每一点的速度方向,几百个蓝点从网格顺箭头滑出,绕着几处漩涡旋转、收拢。

底层引擎是 3Blue1Brown 的 Manim,此仓库用的是 3b1b 版 manim(manimlib),不是社区版。注意:这个 2015 场景面向较老的工具链,若本地 manim 在lambda (x, y, z)这类旧写法上报错,与仓库 README 的提示一致,换到匹配的 manim 版本即可。

它到底在算什么

它不模拟真实流体的压力与粘度,核心只有一个数据结构:向量场(Vector Field)。把它想成贴满整面墙的风向标——每个位置插着一根小旗,旗子指向该处流体的去向,长短代表速度。FluidFlow 做的事只有一步:取一个点,问它脚下的旗子指向哪,就把点朝那个方向挪一小段,反复做就成了动画。

这段代码做了什么:flow 把每个粒子点的中心,沿self.function在该点给出的方向推一段时间。

def flow(self, **kwargs): self.play(ApplyToCenters( PhaseFlow, self.dots.split(), function=self.function, **kwargs ))

跑完你看到:整片粒子网格沿箭头整体位移,漩涡、剪切、收拢的差别一目了然。它并不解 Navier-Stokes 方程,只是让点沿你给的方向走。

换一组函数,看不同流态

ConstantPositiveCurl

粒子绕原点画同心圆,像浴缸排水;旋度(Curl)恒定,箭头首尾相接成圈。

lambda p : 0.5*(-p[1]*RIGHT+p[0]*UP)

manim _2015/ka_playgrounds/fluid_flow.py ConstantPositiveCurl -qm

NegativeDivergenceExamlpe

蓝点从四周向原点收拢,像放水的水池,散度(Divergence)为负。

lambda p : -p/(2*get_norm(0.5*p)**0.5+0.01)

manim _2015/ka_playgrounds/fluid_flow.py NegativeDivergenceExamlpe -qm

IncompressibleFluid

粒子沿正弦波水平滑行、上下层错动,像河水流过浅滩的剪切(Shear)流动。

lambda (x, y, z) : RIGHT+np.sin(x)*UP

manim _2015/ka_playgrounds/fluid_flow.py IncompressibleFluid -qm

QuadraticField

粒子在鞍点附近分岔,有的被吸向中心、有的被甩出,像水流绕过石头。

lambda (x, y, z) : 0.25*((x*x-y*y)*RIGHT+x*y*UP)

manim _2015/ka_playgrounds/fluid_flow.py QuadraticField -qm

调参速查

参数控制什么推荐起点调大 / 调小的直观效果
vector_spacing箭头网格疏密1调大箭头更稀,调小更密
dot_spacing粒子点间距0.5调大点更疏,调小更密且更卡
vector_length箭头长度0.5调大箭头更醒目,调小方向难辨
run_time播放时长(秒)5~30调大更慢看清细节,调小更快
virtual_time模拟推进的物理时长1~3调大点走得更远,调小点几乎不动

策略:先定 virtual_time 让点走出可辨位移,再拉 run_time 与它的比例做慢放或快进。

文件地图

  • _2015/ka_playgrounds/fluid_flow.py— FluidFlow 基类与十几个可切场景都在这一个文件里
  • manim_imports_ext.py— 统一 import 入口,把 manimlib 和 custom 组件一次拉进来
  • custom/backdrops.py— 场景背景(深色底 / 渐变)的定义
  • README.md— 说明用的是 3b1b 版 manim,旧场景可能不直接跑

想深入可以翻的方向:一是翻 manimlib 里 PhaseFlow / ApplyToCenters 的实现,看"沿场推点"的步长和速率怎么取;二是翻 once_useful_constructs/ 里的区域(region)与向量场辅助构件,用来扩展视觉。

把 FourSwirlsWithoutCircles 里的9改成5再重跑,漩涡会向内收紧、间距变小。换个系数就是换个流场,现在就试。

【免费下载链接】videosCode for the manim-generated scenes used in 3blue1brown videos项目地址: https://gitcode.com/GitHub_Trending/vi/videos

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询