You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Manim创建带粒子效果的动画矢量场?

Manim带粒子效果矢量场可视化实现步骤(零经验适用)

前置环境安装

  • 先安装3.9及以上版本的Python,安装过程务必勾选Add Python to system PATH,否则后续命令行无法识别Python指令
  • 打开系统终端(Windows是命令提示符/PowerShell,Mac/Linux是Terminal),执行安装命令:pip install manim
  • 安装完成后在终端执行manim --version,能正常输出版本号即代表安装成功,报错优先检查Python路径是否正确添加到系统环境变量

效果核心逻辑

你要的粒子流动矢量场效果,拆解开只有三个独立模块,不需要复杂的第三方依赖:

  • 矢量场定义:给平面上每个坐标点(x,y)匹配对应的二维向量,决定该位置的流动方向
  • 运动粒子:生成数百个微小质点,每个质点每帧沿着所在位置的向量方向移动,飞出可视范围后自动重置到画面内随机位置,形成连续流动的观感
  • 视觉优化:可以按需添加粒子拖尾、流速对应颜色/透明度、底层矢量箭头等装饰元素

可直接运行的最小实现代码

把下面的代码保存为后缀为.py的文件(比如命名为flow_field.py),所有参数都加了注释,新手可以直接修改调试:

from manim import *
import numpy as np

class FlowFieldWithParticles(Scene):
    def construct(self):
        # 自定义矢量场公式,修改vx、vy即可生成完全不同的流场效果
        def field_func(pos):
            x, y = pos[0], pos[1]
            # 示例为带径向扩散的漩涡场,可替换为任意你需要的场公式
            vx = -y + 0.15 * x
            vy = x + 0.15 * y
            return np.array([vx, vy, 0]) # 二维场z轴分量固定为0即可

        # 底层矢量箭头层,不需要显示可以直接注释掉这部分代码
        arrow_field = ArrowVectorField(
            field_func,
            x_range=[-7, 7, 0.5],
            y_range=[-4, 4, 0.5],
            stroke_width=1,
            opacity=0.3
        )
        self.add(arrow_field)

        # 初始化流动粒子
        particles = VGroup()
        particle_total = 500 # 粒子总数,电脑性能差就调小到200-300
        for _ in range(particle_total):
            # 粒子初始位置随机铺满画面
            init_pos = np.array([
                np.random.uniform(-7, 7),
                np.random.uniform(-4, 4),
                0
            ])
            particle = Dot(
                point=init_pos,
                radius=0.02,
                color=BLUE_A
            )
            particles.add(particle)
        self.add(particles)

        # 粒子逐帧运动更新规则
        def update_particle_flow(mob, dt):
            flow_speed = 1.2 # 全局流动速度,数值越大粒子跑的越快
            for p in mob:
                current_pos = p.get_center()
                # 获取当前位置对应的场向量
                vec = field_func(current_pos)
                # 向量归一化,避免离原点越远粒子速度越快的问题
                normalized_vec = vec / (np.linalg.norm(vec) + 1e-6) # 加极小值避免除零报错
                p.shift(normalized_vec * flow_speed * dt)
                # 粒子飞出画面边界后,重置到随机位置形成循环
                new_pos = p.get_center()
                if abs(new_pos[0]) > 7 or abs(new_pos[1]) > 4:
                    p.move_to(np.array([
                        np.random.uniform(-7,7),
                        np.random.uniform(-4,4),
                        0
                    ]))
        
        particles.add_updater(update_particle_flow)
        # 动画总时长,单位秒,按需修改
        self.wait(12)

运行与调试方法

  • 打开终端,切换到你刚才保存代码文件的文件夹路径
  • 执行渲染命令:manim -pql flow_field.py FlowFieldWithParticles
    • 参数-p代表渲染完成后自动打开生成的视频
    • 参数-ql代表低质量快速渲染,适合调试阶段用,最终导出成片可以换成-qh走高质量渲染
  • 命令执行完成后会自动弹出渲染好的视频,第一次渲染因为要加载依赖会稍慢,后续修改参数重跑速度会快很多

常用效果调整方向

  • 更换流场形态:直接修改field_func里的vx、vy计算公式即可,比如做波浪形流场可以写vx = np.sin(y)、vy = np.cos(x),做层流可以写vx = 1、vy = 0.2*np.sin(x)
  • 粒子效果升级:想要拖尾效果可以把Dot替换为TracedPath,调整stroke_width和trail_length参数控制拖尾粗细和长度;想要流速越快粒子越亮,可以在更新逻辑里把粒子透明度和向量模长绑定
  • 配色调整:修改ArrowVectorField和粒子的color参数即可更换整体配色,也可以给矢量场传入color_scheme参数实现按流速映射渐变色的效果
  • 性能优化:如果渲染卡顿,先把粒子数量调低、用-ql参数调试,确认效果没问题后再拉高参数出最终片

内容的提问来源于stack exchange,提问作者Adam Červenka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 23:30:52