菜单

示例和教程

相关源文件

本页面提供了使用 ManimGL 创建动画的实际示例和分步教程。通过这些示例,您将学习如何使用 Manim 的核心组件,包括 Scene、Mobject、Animation 和 Camera 系统。有关 Manim 架构的信息,请参见 核心架构,有关动画系统的详细信息,请参见 动画系统

运行示例

ManimGL 附带了一系列示例场景,展示了各种功能。这些示例位于项目目录根目录下的 example_scenes.py 文件中。

要运行任何示例场景,请使用以下命令:

例如,要运行 OpeningManimExample 场景

您可以添加各种标志来定制输出:

  • -w 将场景写入文件
  • -o 将场景写入文件并在完成后打开它
  • -s 跳过动画,仅显示最后一帧
  • -n <数字> 跳到场景的第 n 个动画

来源:example_scenes.py4-9 docs/source/getting_started/configuration.rst20-31

示例场景结构

所有示例场景都继承自 Scene 类,并实现一个 construct 方法,其中包含动画逻辑。以下是示例场景的基本结构:

来源:example_scenes.py12-69

基本示例

OpeningManimExample

这个第一个示例演示了 Manim 使用线性代数和复数来演示数学变换的能力。

演示的关键技术

  • 使用 Text 创建文本
  • 生成坐标系(NumberPlane, ComplexPlane
  • 使用 apply_matrix 应用矩阵变换
  • 使用 apply_complex_function 应用复数函数

来源:example_scenes.py12-69

AnimatingMethods

此示例展示了如何使用 .animate 语法来动画化 mobject 上的方法调用。

演示的关键技术

  • 使用 .animate 语法来动画化方法调用
  • 使用 shift 更改位置
  • 使用 set_colorset_submobject_colors_by_gradient 更改外观
  • 使用 set_height 更改大小
  • 使用 apply_complex_functionapply_function 应用数学函数

来源:example_scenes.py71-112

文本和 LaTeX 示例

TextExample

此示例展示了如何创建和格式化具有各种属性的文本。

演示的关键技术

  • 使用 Text 创建文本
  • 使用 font 设置字体
  • 使用 font_size 设置字体大小
  • 使用 t2c 为文本的特定部分着色
  • 使用 t2f 为特定部分更改字体
  • 使用 t2s 为部分设置斜体
  • 使用 t2w 为部分设置粗体

来源:example_scenes.py115-153

TexTransformExample

此示例演示了如何使用 LaTeX 创建和转换数学表达式。

演示的关键技术

  • 使用 Tex 创建 LaTeX 表达式
  • 使用 TransformMatchingStrings 在方程之间进行转换
  • 使用 key_map 指定转换关系
  • 设置 transform_mismatches=True 以进行更复杂的转换
  • 使用 TransformMatchingShapes 进行通用转换

来源:example_scenes.py156-225

TexIndexing

此示例展示了如何访问和操作 LaTeX 表达式的特定部分。

演示的关键技术

  • 使用子字符串索引访问 LaTeX 的部分
  • 使用正则表达式进行更复杂的索引
  • 使用 isolate 参数以确保可以访问特定部分
  • 动画化 LaTeX 表达式的特定部分

来源:example_scenes.py228-278

动画和变换示例

UpdatersExample

此示例演示了如何创建根据其他对象自动更新的对象。

演示的关键技术

  • 使用 always_redraw() 在每一帧重新创建对象
  • 使用 always() 在每一帧强制调用方法
  • 使用 f_always() 进行基于函数的更新
  • 使用 add_updater() 创建自定义更新器
  • 创建响应式动画,使对象相互响应

来源:example_scenes.py281-338

CoordinateSystemExample

此示例展示了如何在数学空间中处理坐标系统、轴和点。

演示的关键技术

  • 使用 Axes 创建坐标系统
  • 使用 add_coordinate_labels 添加坐标标签
  • 使用 c2pp2c 在坐标和点之间进行转换
  • 使用 get_h_lineget_v_line 创建参考线
  • 在变换轴的同时维护坐标系统

来源:example_scenes.py341-417

GraphExample

此示例演示了如何创建和操作函数图。

演示的关键技术

  • 使用 get_graph 创建函数图
  • 为不同函数类型设置选项(平滑、不连续)
  • 使用 get_graph_label 为图添加标签
  • 使用 i2gp 在图上查找特定点
  • 使用 ValueTracker 沿图进行动画

来源:example_scenes.py420-496

交互式示例

InteractiveDevelopment

此示例演示了如何使用交互模式进行快速开发和实验。

演示的关键技术

  • 使用 self.embed() 打开交互式 Python 终端
  • 在终端中直接运行动画命令
  • 使用 touch() 与窗口进行交互
  • 使用鼠标和键盘交互
  • 使用 always() 创建响应式元素

来源:example_scenes.py648-692 docs/source/getting_started/example_scenes.rst8-63

ControlsExample

此示例展示了如何为您的动画创建交互式 UI 控件。

演示的关键技术

  • 使用 TextboxCheckboxColorSliders 创建 UI 元素
  • 使用 ControlPanel 组织 UI
  • 使用 updaters 将 UI 连接到场景元素
  • 创建响应式、交互式动画

来源:example_scenes.py694-731 manimlib/mobject/interactive.py32-568

3D 示例

SurfaceExample

此示例演示了如何创建和操作 3D 曲面。

演示的关键技术

  • 创建 3D 曲面,例如 SphereTorus
  • 使用 TexturedSurface 应用纹理
  • 使用 SurfaceMesh 添加网格可视化
  • 在不同曲面类型之间进行转换
  • 使用 frame.animate 控制摄像机
  • 定位光源
  • 使用鼠标和键盘进行交互控制

来源:example_scenes.py566-645 docs/source/getting_started/example_scenes.rst557-656

创建您自己的场景

现在您已经看过各种示例,您可以按照以下步骤创建自己的场景:

  1. 创建一个新的 Python 文件
  2. 从 manimlib 导入所需的模块
  3. 定义一个继承自 Scene 的类
  4. 实现 construct 方法
  5. 使用 manimgl your_file.py YourScene 运行您的场景

示例模板

来源: example_scenes.py1-3 example_scenes.py12-26

高级技巧与要点

使用 ValueTracker 实现动画

ValueTracker 是创建参数化动画的强大工具

来源: example_scenes.py487-495

在交互模式下嵌入

self.embed() 方法允许快速迭代和实验

来源: example_scenes.py659-686

使用 LaTeX

对于复杂的数学表达式,请使用 Tex 类,并进行适当的索引

来源: example_scenes.py156-209

学习资源

除了这些示例,还有更多资源可以帮助您学习 Manim

  1. 3Blue1Brown 的 YouTube 频道 展示了 Manim 的强大功能
  2. 包含许多教育视频源代码的 3b1b/videos 存储库包含许多教育视频的源代码
  3. Reddit 上的 Manim 社区: r/manim

请记住,Manim 是一个用于创建解释性数学动画的工具。学习的最佳方法是从简单的示例开始,然后逐步构建更复杂的场景。

来源: example_scenes.py734