news 2026/8/29 14:14:40

用代码做数学动画:Manim 的第一行动画,10 分钟跑通

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用代码做数学动画:Manim 的第一行动画,10 分钟跑通

用代码做数学动画: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对象如何变化ShowCreationTransform

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。

坑绕开了,剩下的就是多写。

接下来动手

  1. 跑一遍官方示例:仓库里的 example_scenes.py 有一串现成场景,任选一个运行并看完,比如OpeningManimExample演示了矩阵把网格整体"扭"过去的效果。
  2. 改一个参数看效果:把示例里的run_time改成 0.5 和 5,各渲染一次,直观感受节奏差异。
  3. 卡住就去社区问:先在 GitHub 仓库的 issue 区搜一下,搜不到再去 Manim 的 Discord 频道提问,附上报错和最小复现代码,通常当天就有回应。

【免费下载链接】manimAnimation engine for explanatory math videos项目地址: https://gitcode.com/GitHub_Trending/ma/manim

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 14:14:25

Hoppscotch 浏览器扩展:三步装好,发完第一个 API 请求

Hoppscotch 浏览器扩展:三步装好,发完第一个 API 请求 【免费下载链接】hoppscotch Open-Source API Development Ecosystem • https://hoppscotch.io • Offline, On-Prem & Cloud • Web, Desktop & CLI • Open-Source Alternative to Postm…

作者头像 李华
网站建设 2026/8/29 14:10:16

基于51单片机的门禁系统设计:从矩阵键盘到EEPROM存储的综合实践

1. 项目背景与赛题核心解读 最近在整理一些老项目的资料,翻到了当年参加蓝桥杯第三届单片机国赛的题目——“门禁系统”。这个题目可以说是一个经典的综合应用案例,它不像一些单纯考某个外设驱动的题目,而是把单片机开发中常见的几个核心模块…

作者头像 李华
网站建设 2026/8/29 14:08:02

3条命令把扫描版PDF变成Markdown:MinerU新手实操

3条命令把扫描版PDF变成Markdown:MinerU新手实操 【免费下载链接】MinerU Transforms complex documents like PDFs and Office docs into LLM-ready markdown/JSON for your Agentic workflows. 项目地址: https://gitcode.com/GitHub_Trending/mi/MinerU 你…

作者头像 李华
网站建设 2026/8/29 14:06:00

MATLAB函数调用全解析:从基础语法到高级优化与实战避坑

1. 项目概述:从“函数或变量无法识别”到高效调用的跨越 如果你在MATLAB里敲下代码,满怀期待地按下回车,结果却弹出一个刺眼的红色错误提示:“函数或变量 ‘deltalin’ 无法识别”,那一刻的挫败感,相信很多…

作者头像 李华
网站建设 2026/8/29 14:03:07

中文微博情感分析实战:SVM+TF-IDF轻量级方案

简介:情感分析是自然语言处理的基础任务,核心在于从非结构化文本中识别主观倾向。其原理依赖特征表示与分类建模的协同——传统方法以TF-IDF构建稀疏词向量,配合SVM等线性分类器实现高效判别。该技术路径在小样本、低算力、高可解释性场景下具…

作者头像 李华
网站建设 2026/8/29 14:01:56

灰色关联分析:小样本数据下识别关键影响因素的核心方法

1. 从“关系”说起:为什么我们需要灰色关联分析? 做数据分析、做决策、做评估,我们常常会面临一个最朴素也最棘手的问题: 这几个因素,到底谁跟结果的关系更“铁”? 比如,一个地区的GDP增长&am…

作者头像 李华