恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

OpenMontage 数学动画实战:用 ManimGL 构建向量场可视化(箭头场、粒子流、梯度场与电偶极子)

  • 首页
  • 资讯中心
  • /
  • OpenMontage 数学动画实战:用 ManimGL 构建向量场可视化(箭头场、粒子流、梯度场与电偶极子)

相关资讯

HyperFrames超平面激光雷达里程计:解决退化场景漂移的关键技术 2026/9/10 10:20:39
WSA 装 Google Play 还能 Root?WSABuilds 预构建包如何快速上手(完整指南) 2026/9/10 10:20:39
Vue 3 KeepAlive 组件缓存最佳实践:airi 桌面伴侣场景下的状态保持、缓存边界与数据新鲜度实战 2026/9/10 10:20:39

最新资讯

Kilo 仓库 Changesets 变更管理指南:从 changeset 文件到 GitHub Release Notes 的完整工作流
TradingAgents-CN 多智能体投资计划深度解读:以贵州茅台(600519)买入决策为例
curl_easy_escape 全面解析:libcurl 的 URL 编码函数原理与实战
PixWit:轻量高效的开发者截图录屏工具解析
Continue 项目 VS Code 扩展架构解析:VSCodeIDE 抽象、协议通信与 AI 增强功能实现
CANN/ge编译图API文档

今日推荐

AI搜索重构内容生态:企业从“流量争夺”转向“答案共建”
AI搜索的信任缺口:企业内容如何在答案时代自证可信
Spring Boot+Vue+Node.js售后服务系统开发实战

本周热门

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

OpenMontage 数学动画实战:用 ManimGL 构建向量场可视化(箭头场、粒子流、梯度场与电偶极子)

发布时间:2026/9/10 10:25:40
OpenMontage 数学动画实战:用 ManimGL 构建向量场可视化(箭头场、粒子流、梯度场与电偶极子) OpenMontage 数学动画实战用 ManimGL 构建向量场可视化箭头场、粒子流、梯度场与电偶极子【免费下载链接】OpenMontageWorlds first open-source, agentic video production system. 12 production pipelines, 100 tools, 700 agent skill and production-knowledge files. Turn your AI coding assistant into a full video production studio.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMontageManimGLGrant Sanderson 3Blue1Brown 版基于 OpenGL 的动画引擎中向量场可视化的价值在于用箭头刻画空间每一点的方向与大小再用粒子沿着场流动把抽象的场、梯度、电磁力变成可直接感知的画面。本文以 OpenMontage 仓库内manimgl-best-practices技能包中的向量场参考指南references/vector_fields.md为骨架结合其配套的可运行示例examples/vector_fields.py与同目录规则文件逐行展开。读完你将掌握如何手工铺设彩色箭头场、如何让粒子含轨迹沿场运动、如何可视化电荷产生的电场以及如何用LaggedStartMap与 updater 闭包组织出 3Blue1Brown 风格的场动画并直接跑通四个成品场景。1. 这份指南在 OpenMontage 中处于什么位置OpenMontage 的skills/体系里数学动画Math Animation条目同时挂接了三套技能manimce-best-practices、manimgl-best-practices与manim-composer见 skills/INDEX.md。其中manimgl-best-practices仓库路径.agents/skills/manimgl-best-practices/专门面向3Blue1Brown 版 ManimGL它由一套分级资料构成SKILL.md技能入口定义了触发条件用户提到 manimgl / 3b1b manim、代码出现from manimlib import *、执行manimglCLI 等与 ManimGL / ManimCE 的差异速查表rules/按主题拆分的规则文件场景、mobject、动画、颜色、分组动画、CLI 等references/按专题整理的参考指南vector_fields.md、spring_mass_system.md、three_d_surfaces.md等examples/完整可运行示例其中vector_fields.py就是本参考指南对应的配菜四类场景全部落地可跑。需要特别留意的是这套技能针对的是ManimGLmanimlibmanimglCLI而不是 Manim Community Editionmanimimport /manimCLI。两者 API 差异巨大详见 SKILL.md 的差异表ManimGL 用from manimlib import *、InteractiveScene、ShowCreation、Tex(R...)、self.frameManimCE 则对应manim、Scene、Create、MathTex。阅读任何示例前先确认运行环境属于哪一支这是最常见的第一道坑。2. 哪些用户需求会命中本参考references/vector_fields.md开头即列出了本示例要响应的典型提问这些提问在面向 Agent 的对话里就是触发它工作的 Query用户 Query对应解法Create a vector field visualization创建一个向量场可视化手写Arrow网格场旋转场起步Show particles flowing through a field粒子在场中流动add_updaterTracedPath轨迹Visualize electric field from charges由电荷可视化电场库仑场逐点求和 模长着色Animate gradient descent动画演示梯度下降标量场高度着色 指向最速上升的梯度箭头Show fluid flow展示流体流动涡流场中多粒子流动ParticleFlow也就是说凡是空间的每个点带一个矢量、想让观众看到它如何驱动运动的题材都归它管旋转场、涡旋、梯度、电场、流场甚至线性动力系统dx/dt Ax的方向场——后者的进阶实现可在同目录的 eigenvector_flow_field.py 中找到。3. 3Blue1Brown 风格的场景思考流程在动手写代码前参考指南先用一句话提炼了核心概念这正是 3Blue1Brown 式教学的起点核心概念Core Concept空间中每一点都有一个矢量它同时表达方向与大小粒子沿着场运动从而揭示出场的流动形态。据此可以归纳出该类场景的通用分镜套路铺基底先放NumberPlane坐标网格低透明度交代这是二维空间同时给箭头提供空间参照系摆静态场在采样网格点上绘制箭头用箭头长度表方向与大小、用颜色表强度动起来加入一个或多个粒子让粒子位置随场的方向每秒更新必要时叠加轨迹线收尾定格self.wait()留出观察时间让流动形态被观众看清。下文第 4、5 节的实现全部沿这条主线展开。4. 技术实现三个可移植的构建块参考指南给出了三种零高层依赖、直接拼基础 mobject的写法——它把它们标注为Portable Approach即只用Arrow、VGroup、Dot、interpolate_color这类稳定对象不依赖引擎内部的高层VectorField封装因此跨版本更稳妥同目录 vector_fields.py 的实际实现也印证了这一点即便注释提到内置类代码仍全部手写箭头。4.1 手工箭头场Manual Arrow Field这是最通用的一块积木对网格上的每个采样点计算场的分量画一条从[x,y,0]指向[xvx, yvy, 0]的箭头并按模长着色。参考指南的核心示例以旋转场F(x,y)(-y, x)为例arrows VGroup() for x in np.arange(-3.5, 4, 0.7): for y in np.arange(-2.5, 3, 0.7): vx, vy -y * 0.15, x * 0.15 # Rotation field arrow Arrow( start[x, y, 0], end[x vx, y vy, 0], buff0, stroke_width2, ) # Color by magnitude mag np.sqrt(vx**2 vy**2) arrow.set_color(interpolate_color(BLUE, YELLOW, mag / 0.5)) arrows.add(arrow)对照 vector_fields.py 中的SimpleVectorField.construct实际成品在此基础上还有三处工程细节值得照抄空间采样步长x 向np.arange(-3.5, 4, 0.7)、y 向np.arange(-2.5, 3, 0.7)约 11×8 个采样点既能看清旋转形态又不至于画面过密跳过零矢量if abs(vx) 0.01 and abs(vy) 0.01: continue——旋转场在原点恰好为零跳过可避免在原点画出一个零长度死箭头箭头比例Arrow(..., buff0, stroke_width2, max_tip_length_to_length_ratio0.3)buff0让箭头紧贴起点不悬空max_tip_length_to_length_ratio限制小箭头箭头的占比。生成后的展示也有一套固定动作先用LaggedStartMap(GrowArrow, arrows, lag_ratio0.02, run_time2)让箭头逐根长出来见第 6.2 节self.wait()定格后再叠粒子。4.2 粒子沿场流动Particle Following Field静态箭头只能表达瞬间的场流动的粒子才能表达场对运动的驱动。ManimGL 的做法是用updater每帧回调follow_field(mob, dt)粒子沿field_func给出的方向位移dt的步长再用TracedPath记录粒子走过的路径def follow_field(mob, dt): x, y mob.get_center()[:2] vx, vy field_func(x, y) mob.shift(np.array([vx, vy, 0]) * dt) dot.add_updater(follow_field) trail TracedPath(dot.get_center, stroke_colorRED)要点解析mob.get_center()[:2]取粒子当前 x、y 坐标field_func(x, y)返回该点速度mob.shift(...) * dt本质是显式欧拉积分位置 速度 × 帧时间。若想积分更稳可对速度做归一化后再乘固定步长TracedPath(dot.get_center, ...)会在 dot 每次移动后自动追加路径点得到一条随时间生长的轨迹线——这是 3Blue1Brown 粒子流视觉的标配updater 只在对象出现在场景里self.add之后才被驱动因此代码顺序必须是先add_updater再self.add(trail, dot)收尾。SimpleVectorField中落地的版本把旋转场系数从 0.15 调大到 0.5vx, vy -y * 0.5, x * 0.5让粒子以可见的速度沿圆轨道绕原点旋转并用trail TracedPath(dot.get_center, stroke_colorRED, stroke_width2)画出红色轨迹最后self.wait(8)让观众完整看到一圈以上的轨道。4.3 电偶极子场Electric Dipole Field参考指南中的第三块积木是库仑定律场正电荷在空间某点的贡献为E₁ r₁/|r₁|³方向从电荷指向场点负电荷则反向总场E E₁ E₂def E_field(pos): r1, r2 pos - q1_pos, pos - q2_pos d1, d2 np.linalg.norm(r1), np.linalg.norm(r2) E1 r1 / d1**3 # From charge E2 -r2 / d2**3 # From - charge return E1 E2若照抄到ElectricDipole场景并补充到 vector_fields.py 的工程版本还需处理物理场可视化特有的两个数值病场点与电荷重合时的奇点库仑场在电荷处发散。源码在电荷周围挖空跳过np.linalg.norm(pos - q1_pos) 0.5±0.5 半径内不画箭头并对距离做软化d1 np.linalg.norm(r1) 0.1避免分母过小导致箭头无限长强度跨越多个数量级先归一化方向E_norm E / mag再截断长度length min(0.4, mag * 2)即箭头长度有上限 0.4方向永远正确、长度只近似表达强度。最终整场布局为正电荷红色在(-2,0)负电荷蓝色-在(2,0)采样x ∈ (-4, 4.5, 0.6)、y ∈ (-3, 3.5, 0.6)逐点用interpolate_color(BLUE_E, YELLOW, min(mag*5, 1))上色——靠近电荷处场强、偏黄远处偏深蓝。这样仅凭颜色就能读出偶极子场随距离衰减的特征。5. 四个场景变体一文件四场景的总览vector_fields.py单个文件内定义四个可独立渲染的InteractiveScene子类参考指南用表格总结了各自使命ScenePurpose用途SimpleVectorFieldRotation field with particle旋转场 单粒子绕行演示GradientFieldDemoScalar field gradient arrows标量场高度 梯度箭头ParticleFlowMultiple particles in vortex涡流场中多粒子流动模拟流体ElectricDipoleField from /- charges正负点电荷的电场每个场景对应的完整实现都已在源码中逐行可查SimpleVectorField在NumberPlane(x_range(-4,4,1), y_range(-3,3,1))上铺旋转场箭头 →LaggedStartMap(GrowArrow, ...)生长 → 红色粒子沿场做圆周运动并拖出轨迹。GradientFieldDemo这是参考指南场景表中标量场 梯度箭头的范例也在源码中补全。先采样x ∈ (-3.5,4,0.3)、y ∈ (-2.5,3,0.3)的点阵按标量场f(x,y)-(x²y²)原点处为峰归一化后以interpolate_color(BLUE_E, RED, t)着色铺成高度热力图再在粗网格步长 0.8上画梯度箭头(gx,gy)(-2x,-2y)归一化到固定长度0.3跳过原点 0.3 邻域让每根白色箭头严格指向最速上升对这座山而言即指向原点峰顶最后用Tex(r\nabla f (-2x, -2y))写在左上角并加黑色描边set_backstroke(BLACK, 3)保证可读性。ParticleFlow涡流场v (-y/r, x/r)切向速度随半径衰减中放入 15 个黄色粒子初始等角分布在半径为 2 的圆上angle i * TAU / n_particles各自挂 updater配蓝色半透明轨迹stroke_opacity0.7self.wait(10)展示整体旋转的涡旋形态。ElectricDipole即第 4.3 节结构完整、可独立成段。6. 关键模式三个可复用的编码套路6.1 模式一按模长着色Color by Magnitude箭头方向给向哪颜色给多强。参考指南给出了通用写法mag np.linalg.norm([vx, vy]) color interpolate_color(BLUE, YELLOW, min(mag * scale, 1)) arrow.set_color(color)interpolate_color(c1, c2, alpha)在两种颜色之间按alpha ∈ [0,1]插值0 为纯c11 为纯c2。不同场景的scale需按场的量级标定旋转场用mag / 0.5偶极子场用min(mag * 5, 1)梯度场对点阵用(val 25) / 25。把强度压到[0,1]是关键一步否则靠近奇异点处会全部饱和成同一颜色而丢失信息。关于颜色常量的深浅梯度BLUE_E … BLUE_A等与更多上色技巧渐变、RGB/Hex、GLSL 动态着色可直接查规则文件 rules/colors.md。6.2 模式二LaggedStartMap 批量生长箭头几十上百根箭头若同时啪地出现会非常突兀逐根self.play又太慢。标准解法是LaggedStartMap——把同一个动画构造函数批量映射到 VGroup 的每个成员并施加一个小的相位延迟self.play(LaggedStartMap(GrowArrow, arrows, lag_ratio0.02, run_time2))lag_ratio控制相邻动画的错峰比例约 0.01–0.02 会产生波纹式快速展开效果参考指南中SimpleVectorField用 0.02/2s偶极子场为画面更密用 0.01/3s0等价于同时开始1等价于完全串行详见 rules/animation-groups.md第一个参数是动画类构造器而非动画实例第二个参数是目标VGroup同类手法也用于其它创建动画如LaggedStartMap(ShowCreation, eigenlines, ...)、LaggedStartMap(FadeIn, ...)见 eigenvector_flow_field.py。创建动画的全套选择ShowCreation/Write/FadeIn/GrowFromCenter等可参考 rules/creation-animations.md。6.3 模式三循环内 updater 的闭包陷阱Closure for Updaters in Loops多粒子场景几乎必然在for循环里给每个粒子注册 updater这里藏着 Python 经典的**晚绑定late binding**坑若闭包内直接引用循环变量所有粒子最终会共享循环结束时的同一个dot。参考指南给出的安全写法是用一层工厂函数包住状态for i in range(n): dot Dot(...) def make_updater(): # Closure captures current state def update(mob, dt): # use mob, not dot ... return update dot.add_updater(make_updater())两点必须照做内层update内只用参数mob它是运行时被驱动的那个对象绝不引用外层循环变量dot工厂函数make_updater()每次循环都被调用为每个粒子生成独立的update函数各自捕获自己的状态。ParticleFlow中的实际形态即此模式的完整案例每个粒子各自闭包捕获自己的轨迹vx, vy -y/r, x/rr 加了 0.1 防除零共同构成绕原点的涡旋流。7. 运行与调试命令参考指南附带的四个渲染命令需在vector_fields.py所在目录执行即技能包的.agents/skills/manimgl-best-practices/examples/下manimgl vector_fields.py SimpleVectorField -w manimgl vector_fields.py GradientFieldDemo -w manimgl vector_fields.py ParticleFlow -w manimgl vector_fields.py ElectricDipole -w在此基础上结合 rules/cli.md 的完整标志表实际工作流通常这样推进# 1) 低质量快速试看-l 480p/15fps确认构图与节奏 manimgl vector_fields.py SimpleVectorField -l # 2) 交互式调试在指定行数中断并进入 IPython 终端-se 是 ManimGL 的招牌功能 manimgl vector_fields.py SimpleVectorField -l -se 30 # 3) 只出最后一帧检查静态效果-s manimgl vector_fields.py SimpleVectorField -s # 4) 成品渲染高质量 1080p/60fps 写文件并自动打开-h -o manimgl vector_fields.py ElectricDipole -h -o在-se中断进入的交互终端里可直接调用play(...)、add(...)、remove(...)、wait(...)配合checkpoint_paste()把剪贴板中的代码粘回来执行checkpoint_paste(skipTrue)跳过动画秒看结果实现改一句、跑一帧的快速迭代详见 SKILL.md 的 Interactive Development Workflow 小节。其它常用标志还包括--frame_rate默认 60、--format gif、--transparent、-n N跳到第 N 个动画等。若文件里只有一个 Scene 类manimgl vector_fields.py不带类名会自动运行它多个 Scene 时会弹出菜单选择。8. 同族扩展从向量场到特征向量与梯度下降本参考并不孤立。向量场的视觉语言在技能包内部形成了一条连续的题材谱系线性动力系统与特征方向eigenvector_flow_field.py 用同样的网格采样 箭头 模长着色手法画dx/dt Ax的方向场再叠加np.linalg.eig计算出的特征向量直线TEAL/YELLOW 高亮与特征值标签让观众直观看到沿着特征方向流动保持直线文件内第二个场景LinearSystemPhasePortrait还把三种矩阵特征值全正不稳定结点、全负稳定结点、一正一负鞍点并排成三格相图对比梯度下降参考指南在User Query Scenarios里点名了Animate gradient descent。GradientFieldDemo标量场高度热力图 指向最速上升的梯度箭头正是其视觉前奏技能包中另有examples/gradient_descent_basic.py承接该题材的完整动画流场ParticleFlow的涡旋即最小可用的流体流动演示把v (-y/r, x/r)换成任意速度场即可表达不同的流动形态。对 Agent 而言一次典型的调用链是收到画一个向量场/展示电荷场/演示流场类 Query → 命中manimgl-best-practices技能触发条件见 SKILL.md 头部描述→ 以references/vector_fields.md作为知识骨架、examples/vector_fields.py作为代码蓝本 → 按 Query 选题第 2 节映射表裁剪或改写对应场景 → 用第 7 节的命令渲染与调参。9. 注意与许可最后两点需要在使用与二次创作时始终牢记引擎分支本文所有代码基于 ManimGLfrom manimlib import *、manimglCLI、InteractiveScene、ShowCreation。若换成 ManimCE需同步替换 import、CLI、Create、MathTex、self.camera.frame等一整组 API差异对照表见 SKILL.md不可逐行照搬。派生来源许可本技能包内的示例代码改编自 Grant Sanderson 的 3Blue1Brown 视频仓库按CC BY-NC-SA 4.0授权需署名同时标注 3Blue1Brown 与改编者、不可商用、衍生作品须采用相同许可声明见 SKILL.md完整文本见 LICENSE.txt。在 OpenMontage 内按此技能生成并用于其自有视频管线时请遵守该非商用约束。至此从空间每一点的一个矢量到彩色箭头场、流动粒子与轨迹、梯度与电荷场再到可复用的三类编码模式与调试命令一套可移植、可扩展、可直接运行的向量场可视化能力就完整落地了。【免费下载链接】OpenMontageWorlds first open-source, agentic video production system. 12 production pipelines, 100 tools, 700 agent skill and production-knowledge files. Turn your AI coding assistant into a full video production studio.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMontage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号