用代码做数学动画:Manim 的第一行动画,10 分钟跑通
【免费下载链接】manimAnimation engine for explanatory math videos项目地址: https://gitcode.com/GitHub_Trending/ma/manim
Manim 是用 Python 代码做数学动画的引擎,一行代码就能让图形动起来。这篇 Manim 教程带你走完全程:安装、写第一行动画、理解三个核心概念,最后做出 3Blue1Brown 风格视频的画面。适合想动手做数学科普视频的人。
先看懂这个画面
想象这样一帧:一个圆从中间"长"出来,停住,然后整张图形平滑地扭成方形,边角圆滑地过渡,没有一帧跳变。
上图里的曲线、切线、积分柱状条,都是代码画出来的。Manim 出自 3Blue1Brown 频道的 Grant Sanderson,最初就是为了把那条视频里的数学画面做出来才写的工具。所以它的定位很明确:你不画时间轴、不拖关键帧,动画由代码驱动,画面精确到像素,也能无限次重渲染。
看完效果,装它其实很快。
最短路径装好 Manim
只要一步,前提是你有 Python 3.7 以上:
pip install manimgl装完敲一下manimgl,能出命令行帮助就说明就绪了。两个平台各一句:Windows 用户需要先单独装 ffmpeg,否则最后存不了视频;macOS 可以用 brew 把 ffmpeg 和 OpenGL 环境一次带齐。
环境好了,直接上代码。
第一个动画只需要这几行
from manimlib import * class CircleToSquare(Scene): def construct(self): circle = Circle(radius=1, color=BLUE) square = Square(side_length=1.6, color=RED) self.play(ShowCreation(circle)) self.wait(0.5) self.play(Transform(circle, square)) self.wait(1)逐行拆开看:
from manimlib import *:一次拿齐所有类,写动画时基本不用再 import;class CircleToSquare(Scene):一个类就是一个场景,construct方法里按顺序写镜头;- 前两句:造一个蓝色的圆、一个红色的方形,此刻它们还躺在内存里,屏幕上什么都没有;
self.play(ShowCreation(circle)):让圆"画"出来,self.play是引擎入口,对象的一切变化都从这里发生;self.wait(0.5):停半秒,给观众反应时间;Transform(circle, square):让圆形变过渡成方形,这就是开头那个镜头;- 最后
wait(1):定格收尾。
保存为my_first.py,在项目里运行:
manimgl my_first.py CircleToSquare窗口里会实时播放,画面存到media/目录。
Scene、Mobject、Animation 怎么记
记住一句话就够:Scene 是舞台,Mobject 是舞台上的东西,Animation 是东西怎么变。
| 概念 | 一句话 | 例子 |
|---|---|---|
| Scene | 你的场景类,镜头按顺序写在 construct 里 | class CircleToSquare(Scene) |
| Mobject | 屏幕上所有可见对象 | Circle()、Text("hi") |
| Animation | 对象如何变化 | ShowCreation、Transform |
self.play(动画)就是执行指令:给舞台上一组动画,它自己把每一帧补出来。
三个概念清楚了,往复杂走其实只是换食材。
把动画做复杂:两条最常用的路
你想画一条函数曲线?上坐标系和绘图接口:
axes = Axes(x_range=[-2, 2, 1], y_range=[-1, 4, 1]) func = axes.get_graph(lambda x: x**2, color=YELLOW) label = axes.get_graph_label(func, "f(x) = x²", x_val=1.2) self.play(Create(axes), Create(func), run_time=2)你想让三个图形错开进场,而不是同时冒出来?用LaggedStart排队,顺手用run_time给镜头提速:
self.play( LaggedStart( ShowCreation(circle), ShowCreation(square), ShowCreation(triangle), lag_ratio=0.4, ), run_time=3, )曲线怎么画、节奏怎么调,这两个方向基本够你起步了。
你大概率会踩的坑
- 运行报 OpenGL / GLFW 相关错→ 显卡驱动或 OpenGL 版本太老 → 更新显卡驱动,或换独立显卡输出。
- 说好的视频文件呢→ 默认输出在项目根目录的
media/下,按场景名分子文件夹 → 去那里找,而不是当前目录。 - 对象莫名其妙消失了→ 前一个镜头用了
FadeOut,对象已经被移出场景 → 需要复现就copy()留一份,或改用Transform让它"变"走。 run_time=0.1没写效果→ 参数名写错会被静默忽略 → 复制官方示例里的参数名,别凭记忆拼。Tex里的公式渲染失败→ 本机没有可用的 LaTeX 发行版 → 换Text先顶上,再补装 LaTeX。
坑绕开了,剩下的就是多写。
接下来动手
- 跑一遍官方示例:仓库里的 example_scenes.py 有一串现成场景,任选一个运行并看完,比如
OpeningManimExample演示了矩阵把网格整体"扭"过去的效果。 - 改一个参数看效果:把示例里的
run_time改成 0.5 和 5,各渲染一次,直观感受节奏差异。 - 卡住就去社区问:先在 GitHub 仓库的 issue 区搜一下,搜不到再去 Manim 的 Discord 频道提问,附上报错和最小复现代码,通常当天就有回应。
【免费下载链接】manimAnimation engine for explanatory math videos项目地址: https://gitcode.com/GitHub_Trending/ma/manim
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考