ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

向量场流体动画:用 Manim 30 行代码跑出漩涡、汇聚与剪切流

2026/9/15 14:07:31 拓冰建站 浏览量
向量场流体动画:用 Manim 30 行代码跑出漩涡、汇聚与剪切流 向量场流体动画用 Manim 30 行代码跑出漩涡、汇聚与剪切流【免费下载链接】videosCode for the manim-generated scenes used in 3blue1brown videos项目地址: https://gitcode.com/GitHub_Trending/vi/videos本项目3Blue1Brown 的 manim 动画源码库中藏着一条快速通道_2015/ka_playgrounds/fluid_flow.py 里定义了 FluidFlow 基类和十几个场景只需一行向量场函数就能让屏幕上的粒子像真实流体一样旋转、汇聚、剪切。一图看懂仓库内未存放渲染好的图片这里先给文字版效果图满屏蓝色粒子从规则网格出发沿着黄色箭头指示的方向滑移几秒后网格被拉成漩涡、螺旋和波浪——这正是 3Blue1Brown 视频中旋度散度那期动画的雏形。整个文件就干一件事把每个位置流体的速度写成一个函数然后让粒子照着它走。一条命令看效果三步跑起来环境装好 3b1b 版 Manim 即可仓库 CLAUDE.md 说明需从源码安装 manimglpip 上发布的版本不是社区版安装git clone https://github.com/3b1b/manim cd manim python setup.py install3b1b 版本非 ManimCommunity。在本仓库根目录运行manimgl _2015/ka_playgrounds/fluid_flow.py ConstantPositiveCurl -p-p表示直接预览不落盘。预览窗口里会看到坐标轴、一圈圈箭头以及绕原点做圆周运动的蓝色粒子点。效果的背后粒子会怎么动完全由一个函数说了算。这个函数就是速度地图给它一个坐标(x, y, z)它返回该点处流体该往哪走、走多快——像风向标插满整张纸。class VectorFieldExample(FluidFlow): def construct(self): self.use_function( lambda (x, y, z) : 0.5*((2*y)**3-9*(2*y))*RIGHT 0.5*((2*x)**3-9*(2*x))*UP ) self.add_axes(show_creationTrue) self.add_vectors(show_creationTrue) self.add_dots(show_creationTrue) self.flow(run_time30, virtual_time3)它做了什么先注册三次函数向量场四个漩涡的势再摆好坐标轴、箭头和粒子网格最后flow调用 PhaseFlow 动画逐帧更新粒子位置。run_time是视频播放秒数virtual_time是模拟流逝的物理时间两者比值就是快慢——30:3即慢动作方便看清粒子如何被吸进漩涡中心。箭头本身由add_vectors生成在每个格点上求一次函数值归一化后缩放到vector_length所以你看到的箭头密度和长度都可以调。改参数换效果参数都在各场景的CONFIG里照抄即可参数作用示例值vector_spacing箭头网格间距越大越稀疏0.5dot_spacing粒子间距越小越密实1vector_length箭头统一长度0.3dot_color/vector_color粒子与箭头配色BLUE_C/YELLOWrun_time/virtual_time播放时长与模拟时长之比控制快进/慢放20 / 2慢动作文件内十几个场景各演示一种流型对照着看最直观场景类一句话特点向量场一行示例ConstantPositiveCurl匀速圆周纯旋转0.5*(-p[1]*RIGHT p[0]*UP)NegativeDivergenceExamlpe向心汇聚负散度-p/(2*get_norm(0.5*p)**0.50.01)IncompressibleFluid剪切流无漩涡RIGHT np.sin(x)*UPQuadraticField二次场鞍点拉伸0.25*((x*x-y*y)*RIGHT x*y*UP)FourSwirlsWithoutCircles四漩涡粒子跳槽0.5*(y**3-9*y)*RIGHT (x**3-9*x)*UP把任意场景里的use_function换成上表写法再运行就能亲手验证每种流型。扩展地图_2015/ka_playgrounds/fluid_flow.py本文主角FluidFlow 基类 全部流体场景。_2018/div_curl.py正式视频《散度与旋度》的代码PhaseFlow 在这里被大量使用。manim_imports_ext.py全局导入文件每个场景文件首行from manim_imports_ext import *都来自它。custom/backdrops.py背景与视觉主题组件给场景换皮用。CLAUDE.md项目自带的开发指南含 manimgl 全部用法说明。这个仓库证明了流体动画的门槛并不高一个函数定义流场其余交给 Manim。挑一个上表的向量场抄进VectorFieldExample跑一遍manimgl ... -p看看粒子会替你画出什么图案。提示manimgl 文件 场景名 -se 行号可停在指定行进入交互模式像调试器一样逐步试错是 3Blue1Brown 团队自己迭代动画的方式。【免费下载链接】videosCode for the manim-generated scenes used in 3blue1brown videos项目地址: https://gitcode.com/GitHub_Trending/vi/videos创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考