安装 macOS 1 brew install python3 manim
获取源代码
快速开始 圆动画 代码:Circle.py
1 2 3 4 5 6 7 8 from manim import *class CreateCircle (Scene ): def construct (self ): circle = Circle() circle.set_fill(PINK, opacity=0.5 ) self .play(Write(Text("Draw a circle with PINK color." ))) self .play(Create(circle))
生成动画:
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 的文档或源代码进一步研究。