Manim数学动画

安装

macOS

1
brew install python3 manim

获取源代码

1
git clone https://

快速开始

圆动画

代码:Circle.py

1
2
3
4
5
6
7
8
from manim import *

class CreateCircle(Scene):
def construct(self):
circle = Circle() # create a circle
circle.set_fill(PINK, opacity=0.5) # set the color and transparency
self.play(Write(Text("Draw a circle with PINK color.")))
self.play(Create(circle)) # show the circle on screen

生成动画:

1
manim -pql Circle.py CreateCircle

Manim Community v0.18.1

[12/09/24 18:12:36] INFO Animation 0 : Partial movie file written in ‘/Users/paul/Desktop/BaiduNetdisk/01 scene_file_writer.py:527

​ NOI/04数学动画/media/videos/Circle/480p15/partial_movie_files/CreateCircle/118581

​ 8338_41213021_223132457.mp4’

​ INFO Combining to Movie file. scene_file_writer.py:617

​ INFO scene_file_writer.py:737

File ready at ‘/Users/paul/Desktop/BaiduNetdisk/01

​ NOI/04数学动画/media/videos/Circle/480p15/CreateCircle.mp4’

​ INFO Rendered CreateCircle scene.py:247

Played 1 animations

​ INFO Previewed File at: ‘/Users/paul/Desktop/BaiduNetdisk/01 file_ops.py:231

​ NOI/04数学动画/media/videos/Circle/480p15/CreateCircle.mp4’

Manim 命令行参数

1
2
manim --help
manim render --help

–format [png|gif|mp4|webm|mov]

-p –preview: 完成后播放场景动画

-r –resolution: Resolution in “W,H” for when 16:9 aspect ratio isn’t possible.

-q, –quality [l|m|h|p|k] Render quality at the follow resolution framerates, respectively:

​ 【l】854x480 15FPS, 【m】1280x720 30FPS, 【h】1920x1080 60FPS, 【p】2560x1440 60FPS, 【k】3840x2160 60FPS

–fps, –frame_rate FLOAT Render at this frame rate.

动画示例二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from manim import *

class DotSample(Scene):
def construct(self):
t1 = Text("绘制正方形", color="#00FF00", font_size=36, font='Songti SC')
t2 = Text("删除正方形", color="#00FF00", font_size=36, font='Songti SC')
t3 = Text("重绘正方形", color="#00FF00", font_size=36, font='Songti SC')
s = Square(side_length=2, color=BLUE)
self.play(Write(t1.next_to([0, 2, 0], UP)))
self.play(Create(s))
self.wait(1)
self.remove(t1)
self.play(Write(t2.next_to([0, 2, 0], UP)))
self.remove(s)
self.wait(1)
self.remove(t2)
self.play(Write(t3.next_to([0, 2, 0], UP)))
self.play(Create(s))
self.wait(1)

Manim 是一个功能强大的 Python 库,用于生成数学动画。它包含了许多类来支持不同的动画、图形、文本和其他可视化效果的生成。

以下是 Manim 中的一些主要类,按照功能进行分类列出。需要注意,Manim 是一个庞大的库,因此这里只能列出核心和常用的类。


1. 场景相关类

这些类定义了动画场景的基本结构:

  • Scene - 所有场景的基类。
  • MovingCameraScene - 支持动态摄像机操作的场景。
  • ThreeDScene - 用于创建 3D 场景。
  • VectorScene - 用于矢量数学演示的场景。
  • ZoomedScene - 支持放大动画的场景。

2. Mobjects(动画对象)

Mobject 是 Manim 中所有图形对象的基类。以下是其子类:

2.1 几何图形类

  • Square - 绘制正方形。
  • Circle - 绘制圆。
  • Rectangle - 绘制矩形。
  • Polygon - 绘制多边形。
  • Ellipse - 绘制椭圆。
  • Line - 绘制线段。
  • Arrow - 绘制带箭头的线段。
  • DashedLine - 绘制虚线。
  • Dot - 绘制点。
  • Annulus - 绘制圆环。

2.2 文本类

  • Text - 显示普通文本。
  • MathTex - 显示 LaTeX 数学公式。
  • Code - 显示代码。
  • MarkupText - 支持 HTML 和 Markdown 格式的文本。

2.3 坐标系类

  • Axes - 绘制笛卡尔坐标系。
  • NumberLine - 绘制数轴。
  • ThreeDAxes - 绘制 3D 坐标系。
  • BarChart - 绘制柱状图。
  • Histogram - 绘制直方图。

2.4 图像类

  • ImageMobject - 用于加载和显示图像。
  • SVGMobject - 加载并显示 SVG 矢量图。
  • PMobject - 颗粒化对象。

2.5 曲线和路径

  • ParametricFunction - 绘制参数化曲线。
  • FunctionGraph - 绘制函数图像。
  • Arc - 绘制弧线。
  • BezierCurve - 绘制贝塞尔曲线。

3. 摄像机类

用于管理场景视角:

  • Camera - 摄像机的基础类。
  • MovingCamera - 支持动态移动的摄像机。
  • ThreeDCamera - 3D 摄像机类。

4. 动画类

用于控制对象的动态变化:

  • Animation - 所有动画的基类。
  • Create - 动画化创建一个对象。
  • FadeIn - 淡入动画。
  • FadeOut - 淡出动画。
  • Transform - 将一个对象变形为另一个对象。
  • Rotate - 旋转动画。
  • ScaleInPlace - 缩放动画。
  • Wiggle - 对象抖动动画。
  • MoveAlongPath - 沿路径移动。

5. 颜色和样式相关类

  • Color - 管理颜色。
  • VGroup - 组合多个 Mobject 的类。

6. 3D 专用类

  • Surface - 创建曲面。
  • Sphere - 绘制球体。
  • Cube - 绘制立方体。
  • Cone - 绘制圆锥。
  • Cylinder - 绘制圆柱。
  • ParametricSurface - 绘制参数化表面。

7. 实用工具类

  • ValueTracker - 动态值跟踪器,用于动态更新变量。
  • DecimalNumber - 显示动态数字。

如果你需要查看 Manim 的所有类,可以通过以下方法在代码中列出:

1
2
3
4
5
6
7
8
9
10
python


复制代码
import inspect
from manim import *

# 获取 Manim 中的所有类
manim_classes = [name for name, obj in inspect.getmembers(manim) if inspect.isclass(obj)]
print(manim_classes)

这个代码会输出 Manim 中的所有类。如果你需要详细了解某个类的功能,可以通过阅读 Manim 的文档或源代码进一步研究。