Manim

Eric讨论 | 贡献2022年8月9日 (二) 16:48的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

Manim是一个用于创建数学动画的Python库。最初由3Blue1Brown作者为个人项目而开发。目前由两个版本,一个是3b1b版,一个是manim社区版。

简介

时间轴

版本

名称 描述 官网
manim 社区版 由 Manim Community 开发团队维护,目标是更稳定易使用。
安装:pip install manim
https://github.com/ManimCommunity/manim
manim 3b1b版 也称ManimGL,通过OpenGL渲染。由 3Blue1Brown 的 Grant Sanderson 维护。
安装:pip install manimgl
https://github.com/3b1b/manim

安装

Windows

  • 安装好FFmpeg,命令行输入ffmpeg --version检验。
  • 安装好LaTeX,如果需要用到LaTeX则安装。命令行输入latex --version检验。
  • 使用如下命令安装
pip install manim

了解更多 >> Manim 社区版文档:安装/Windows


快速入门

新建一个目录project。新建一个文件scene.py,输入如下代码:

from manim import *

class CreateCircle(Scene):
    def construct(self):
        circle = Circle()  # 创建一个圆形
        circle.set_fill(PINK, opacity=0.5)  # 填充颜色和透明度
        self.play(Create(circle))  # 显示在屏幕上

打开命令行,进入project目录,执行如下命令:

manim -pql scene.py CreateCircle

Manim 将输出渲染信息,然后创建一个 MP4 文件。

了解更多 >> Manim 文档:快速开始



对象

了解更多 >> Manim 文档:Mobjects


几何图形

了解更多 >> Manim 文档:几何图形/弧形的


弧形的

都位于manim.mobject.geometry.arc模块

名称 描述 示例
Circle 圆形 Circle()
Circle(radius=2.0, color=BLUE_B, fill_opacity=1)
Dot Dot()
Dot(point=LEFT, radius=0.1)
Dot(color='#FF00FF')

了解更多 >> Manim 文档:Arc


线

名称 描述 示例
Line 线段
常用函数:
put_start_and_end_on(start, end) 设置线的开始和结束坐标
Line()
Line([1,1,0], [2,2,0])
Arrow 箭头 Arrow(start=LEFT, end=RIGHT)
Arrow([1,1,0], [2,2,0])

了解更多 >> Manim 文档:line


多边形

名称 描述 示例
Square 正方形 Square(side_length=2.0)
Square(0.6)

了解更多 >> Manim 文档:polygram


文本

使用[LaTeX]渲染的类:MathTex、SingleStringMathTex、Tex、TexSymbol、Title。

名称 描述 示例
Text 文本对象。 Text('Hello world')
Text('你好').set_color(WHITE)
MarkupText 标记文本。可以使用Pango布局库(类似html)渲染 MarkupText('<span foreground="red" size="x-large">你</span>好,<i>世界</i>!')
Paragraph 段落。
Title 标题。基于Tex类 Title("我是标题")
MathTex 使用LaTeX渲染文本,数学模式。基于SingleStringMathTex类 MathTex(r"\int_a^b f'(x) dx = f(b)- f(a)")
Tex 使用LaTeX渲染文本,普通模式。基于MathTex类 Tex('世界')
Code 高亮显示源代码

了解更多 >> Manim 文档:主题指南/渲染文本和公式 Manim 文档:text


表格

了解更多 >> Manim 文档:table


图像

名称 描述 示例
ImageMobject 显示图像,通过文件或numpy数组。可以是相对路径或绝对路径 ImageMobject('picture.jpg')
ImageMobject(np.uint8([[0, 100, 30, 200],[255, 0, 5, 33]]))
AbstractImageMobject
ImageMobjectFromCamera

了解更多 >> Manim 文档:image_mobject


矢量化

名称 描述 示例
VGroup 组合多个实例,以便一起操作,如缩放、移动等。
添加元素可以使用add()++=,删除元素使用remove()--=
常用方法:
arrange() 对齐。VGroup(t1, t2).arrange(direction=DOWN, aligned_edge=LEFT)
VGroup(c1, c2, c3)

了解更多 >> Manim 文档:vectorized_mobject


动画

动画

名称 描述 示例
animation 动画。 circle_1.animate(run_time=1, lag_ratio=0.1).shift(UP * 2)
Wait 等待动画,无操作。

了解更多 >> Manim 文档:animation


改变

名称 描述 示例
AnimatedBoundary 边框颜色变化动画。 AnimatedBoundary(Text("闪耀!"), colors=[RED, GREEN, BLUE], cycle_rate=3)
TracedPath 追踪返回点的路径。

了解更多 >> Manim 文档:changing


显示或移除

名称 描述 示例
Create 增量显示一个 VMobject Create(Square())
Uncreate 移除一个 VMobject动画 Uncreate(Square())
Write 模拟手写一个Text或VMobject Text("Hello", font_size=120)
Unwrite 模拟手动擦除一个Text或VMobject
AddTextLetterByLetter 逐个字母显示文本 AddTextLetterByLetter(>Text("Hello"))
AddTextWordByWord 逐个单词显示文本 AddTextWordByWord(>Text("Hello, World"))
ShowIncreasingSubsets 逐个显示VGroup的元素VMobject,之前显示子对象不消失。 ShowIncreasingSubsets( VGroup(Dot(), Square(), Triangle()) )
ShowSubmobjectsOneByOne 逐个显示VGroup的元素VMobject,之前显示子对象不显示。 ShowIncreasingSubsets( VGroup(Dot(), Square(), Triangle()) )
DrawBorderThenFill 首先绘制边框,然后显示填充。 DrawBorderThenFill(Square(fill_opacity=1, fill_color=ORANGE))
SpiralIn 螺旋飞入动画
ShowPartial

了解更多 >> Manim 文档:creation


淡入淡出

名称 描述 示例
FadeIn 淡入

参数:
mobjects – 要淡入的 mobjects。
shift – mobject 在淡入时移动的向量。
target_position – mobject 在淡入时开始的位置。如果另一个 mobject 被指定为目标位置,则使用它的中心。
scale – mobject 在淡入时重新缩放到其原始大小之前最初缩放的因子。
FadeIn(Text("hello"))
FadeIn(Text("hello"), shift=DOWN)
FadeOut 淡出 参数同淡入 FadeOut(Text("hello"))
FadeIn(Text("hello"), scale=0.5)

了解更多 >> Manim 文档:fading


生长

名称 描述 示例
GrowFromCenter 从中心生长

参数:
mobject – 要引入的 mobjects。
point_color – mobject 生长完成前的颜色。
GrowFromCenter(Square())
GrowFromCenter(Square(), point_color=RED)
GrowFromPoint 从一个点生长

参数:mobject – 要引入的 mobjects。
point – mobject 增长的起点。
oint_color –生长完成前的颜色
GrowFromPoint(Square(), ORIGIN))
GrowFromPoint(Square(), [-2, 2, 0]))
GrowFromEdge 从一个边生长 GrowFromEdge(Square(), RIGHT)
SpinInFromNothing 从中心旋转生长

参数:
angle – mobject 达到其完整大小之前的旋转量。。例如 2*PI 表示一次完整旋转
SpinInFromNothing(Square())
SpinInFromNothing(Square(), angle=2 * PI)
GrowArrow 箭头生长 GrowArrow(Arrow())

了解更多 >> Manim 文档:growing


吸引注意力

名称 描述 示例
Wiggle 摇摆 Wiggle(Text("Wiggle"))
ApplyWave 波浪
Circumscribe 周围画线
Flash 闪光
FocusOn 专注于
Indicate 注明,通过临时调整大小和颜色来突出。
ShowPassingFlash 每帧只显示 VMobject 的一小部分。

了解更多 >> Manim 文档:indication


变换

运动

相机

命令行和配置

场景

资源

官网

文章