【manim】Animations 详解
Animations
Animations
很重要,用于操作Manim
中的动画行为。比如下面的self.play()
方法中,Create()
就是Animtions
类下的一个方法,下面来详细说说有哪些。
1 | self.play(Create(circle)) |
animation
Add
定义:manim.animation.animation.Add
该方法会立即在场景中添加Mobject
。
完整的例子参考官方文档,这里只写简要的使用介绍。下文如此。
示例: 1
2c = Circle()
self.play(Succession(Add(c)),Create(c))
该方法区别于self.add()
,特点是放在Succession()
中使用。
composition
一次显示多个动画的工具,部分方法我感觉没什么用本文就不记录了,如有需要自行查阅官方文档。
其实也看不太懂,以后研究明白再记录吧。
方法名 | 功能 |
---|---|
AnimationGroup |
Plays a group or series of Animation . |
LaggedStart |
Adjusts the timing of a series of Animation according
to lag_ratio . |
LaggedStartMap |
Plays a series of Animation while
mapping a function to submobjects. |
Succession |
Plays a series of animations in succession. |
LaggedStartMap
LaggedStart(xxx, xxx, lage_ratio=0.25, run_time=4)
,lage_ratio
为延迟因子,run_time
为动画时间。
让动画延迟执行,需要注意
LaggedStart()
中不能直接放入Circle
这类Mobject
,报错遇到了别慌。
1 | from manim import * |
Succession
正常的self.play()
中写入多个动画会同时执行而不分先后。为了克服这一点,使用Succession()
可以将多个动画串在一起为一个组,每个Succession
组内的动画串行执行。
1 | class SuccessionExample(Scene): |
creation
creation
下的方法用于显示或移除动画,极其实用。
官网文档地址对照表:
方法名 | 功能 |
---|---|
AddTextLetterByLetter |
Text 现场逐字逐句展示。 |
AddTextWordByWord |
Text 现场逐字逐句展示。(已废弃) |
Create |
逐步显示 VMobject。 |
DrawBorderThenFill |
先绘制边框,然后显示填充。 |
RemoveTextLetterByLetter |
Text 从场景中逐个字母地删除。 |
ShowIncreasingSubsets |
一次显示一个子对象,所有先前的子对象仍显示在屏幕上。 |
ShowPartial |
部分显示 VMobject 的动画的抽象类。 |
ShowSubmobjectsOneByOne |
一次显示一个子对象,从屏幕上删除所有先前显示的子对象。 |
SpiralIn |
创建 Mobject,其中子 Mobject 以螺旋轨迹飞入。 |
TypeWithCursor |
类似于AddTextLetterByLetter ,但在末尾有一个额外的光标
mobject。 |
Uncreate |
类似Create ,但反过来。 |
UntypeWithCursor |
类似于RemoveTextLetterByLetter ,但在末尾有一个额外的光标
mobject。 |
Unwrite |
模拟用手擦除 aText 或
a VMobject 。 |
Write |
模拟手写Text 或手画VMobject 。 |
AddTextLetterByLetter
方法名:manim.animation.creation.AddTextLetterByLetter
作用:逐字显示文本。
1 | t = Text("你好,世界") |
Create
逐步显示一个VMobject
。
1 | from manim import * |
DrawBorderThenFill
下文省略方法名,自己去官网看吧,咱也不记这个。
先画框架再填充图形。
1 | from manim import * |
RemoveTextLetterByLetter
逐字移除字符。
1 | from manim import * |
SpiralIn
螺旋显示对象。
1 | from manim import * |
TypeWithCursor
带有光标的输入。
1 | from manim import * |
Uncreate
与Create
相反。
1 | from manim import * |
UntypeWithCursor
和TypeWithCursor
相反。
1 | from manim import * |
Unwrite
与Write
相反。
1 | from manim import * |
也可以另方向相反,只需要加上参数,reverse=False
。
Write
网上很常见的方法,很多创作者都在用该方法显示文字。
1 | from manim import * |
可选参数: - reverse=True
-
remover=False
fading
淡入和淡出,比较常用在过渡动画。
1 | from manim import * |
FadeIn
淡入,可选参数: - mobjects (Mobject) 传入被作用动画的Mobject 对象 - shift – 淡入时的偏移 - target_position – 淡入开始时的位置,回逐渐过渡到正常位置 - scale – 淡入开始时的大小,会逐渐过渡到正常大小
1 | from manim import * |
FadeOut
淡出,参数同上,这里直接贴英文版,更详尽一些。 - mobjects (Mobject) – The mobjects to be faded out. - shift – The vector by which the mobject shifts while being faded out. - target_position – The position to which the mobject moves while being faded out. In case another mobject is given as target position, its center is used. - scale – The factor by which the mobject is scaled while being faded out.
演示代码: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16from manim import *
class FadeInExample(Scene):
def construct(self):
dot = Dot(UP * 2 + LEFT)
self.add(dot)
tex = Tex(
"FadeOut with ", "shift ", r" or target\_position", " and scale"
).scale(1)
animations = [
FadeOut(tex[0]),
FadeOut(tex[1], shift=DOWN),
FadeOut(tex[2], target_position=dot),
FadeOut(tex[3], scale=0.5),
]
self.play(AnimationGroup(*animations, lag_ratio=0.5))
growing
对象从点开始生长来引入场景。
1 | from manim import * |
官方目录:
方法名 | 功能 |
---|---|
GrowArrow |
Arrow 通过从其起点向其终点生长来引入。 |
GrowFromCenter |
Mobject 通过从中心生长来引入。 |
GrowFromEdge |
Mobject 通过从其边界框边缘之一增长来引入。 |
GrowFromPoint |
Mobject 通过从一个点扩展它来引入一个。 |
SpinInFromNothing |
引入Mobject 旋转并从中心开始生长。 |
GrowArrow
Arrow
通过其起点和终点来引入。
参数: - arrow (Arrow) – 要引入的箭头。 - point_color (str) – 完全填充前的初始颜色,留空将自动匹配箭头颜色。
1 | from manim import * |
GrowFromCenter
让Mobject
从中心开始生长。
参数: - mobject ( Mobject ) – 要引入的 mobjects。 - point_color ( str ) – 对象在增长到其实际大小之前的初始颜色。留空可匹配对象的颜色。
1 | from manim import * |
GrowFromEdge
从边界框边缘之一开始增长引入。
参数: - mobject ( Mobject ) – 要引入的
mobjects
。 - edge ( np.ndarray )
– 寻找 mobject
边界框边缘的方向。 -
point_color ( str ) –
对象在增长到其实际大小之前的初始颜色。留空可匹配对象的颜色。
1 | from manim import * |
其余可选属性 |
---|
path_arc |
path_func |
run_time |
GrowFromPoint
从点开始生长来引入。可以是外部的点。
参数: - mobject ( Mobject ) – 要引入的
mobjects
。 - point(np.ndarray)
– mobject
生长的点。 -
point_color ( str ) –
对象在增长到其实际大小之前的初始颜色。留空可匹配对象的颜色。
1 | from manim import * |
说明:ORIGIN
是屏幕中心点,是manim
中的原点。
SpinInFromNothing
从中心开始旋转生长。
参数: - mobject ( Mobject ) – 要引入的 mobjects。 - angle(浮点数) – 物体达到其最大尺寸前的旋转角度。例如,2 * PI 表示物体在完全进入物体之前会旋转一圈。 - point_color ( str ) – 对象在增长到其实际大小之前的初始颜色。留空可匹配对象的颜色。
1 | from manim import * |
indication
吸引人注意的动画。
1 | from manim import * |
上述代码遍历所有的indications
方法,通过__name__
拿到其命名存入names
数组。遍历indications
通过is
判断其类型播放对应动画。
官方目录:
方法名 | 功能 |
---|---|
ApplyWave |
通过 Mobject 发送波并暂时扭曲它。 |
Blink |
使物体闪烁。 |
Circumscribe |
在对象周围画一条临时线。 |
Flash |
向各个方向发出线路。 |
FocusOn |
将聚光灯缩小到一个位置。 |
Indicate |
通过临时调整大小和重新着色来指示 Mobject。 |
ShowPassingFlash |
每帧仅显示 VMobject 的一小部分。 |
ShowPassingFlashWithThinningStrokeWidth |
|
Wiggle |
摆动 Mobject。 |
ApplyWave
波浪一般扭曲一个Mobject
。
参数: - mobject (Mobject) –
需要被扭曲的Mobject
对象 -
direction (np.ndarray) – 波浪推动形状点的方向
- amplitude (float) – 形状的距离点发生偏移 -
wave_func (Callable[[float], float]) –
定义一个波侧形状的函数 - time_width (float) –
相对于 mobject 宽度的波的长度 - ripples (int)
– 波浪的涟漪数量 - run_time (float) –
动画的持续时间
1 | from manim import * |
Blink
闪烁,一闪一闪什么来着…
参数: - mobject ( Mobject ) – 要闪烁的
mobject
。 - time_on ( float ) –
mobject 闪烁一次的持续时间。 -
time_off ( float ) – mobject
隐藏一次闪烁的持续时间。 - 闪烁(int)-
闪烁次数 - hide_at_end ( bool ) –
是否在动画结束时隐藏 mobject。 - kwargs – 要传递给Succession
构造函数的附加参数。
1 | from manim import * |
Circumscribe
在对象周围画一条临时的线。
参数: - mobject ( Mobject ) – 要外接的
mobject
。 - shape(类型) –
包围给定对象的形状。可以 Rectangle
或Circle
-
fade_in – 是否使周围的形状淡入。否则将被绘制。 -
fade_out – 是否使周围的形状淡出。否则将不绘制。 -
time_width – 绘制和取消绘制的
time_width
。如果 fade_in
或
fade_out
为 True
,则忽略该值。 -
buff(float) – 周围形状和给定
mobject
之间的距离。 - color(ParsableManimColor)
– 周围形状的颜色。 - run_time – 整个动画的持续时间。 -
kwargs – 传递给Succession
构造函数的附加参数。
1 | from manim import * |
一个更加简单的例子:
1 | from manim import * |
Flash
向各个方向发出线路。
参数: - point ( np.ndarray | Mobject ) –
闪光线的中心。如果是,Mobject
则使用其中心。 -
line_length ( float ) – 闪光线的长度。 -
num_lines ( int ) – 闪光线的数量。 -
flash_radius ( float ) –闪光线起始点的距离。 -
line_stroke_width ( int ) - 闪光线的笔触宽度。
- color(str) – 闪光线的颜色。 -
time_width ( float ) –
闪光线的时间宽度。ShowPassingFlash
更多详情,请参阅。 -
run_time(float) – 动画的持续时间。 -
kwargs – 传递给Succession
构造函数的附加参数。
1 | from manim import * |
高级例子:
1 | from manim import * |
FocusOn
将灯光缩小到一个位置,类似于聚光灯。
参数:
- focus_point ( np.ndarray | Mobject ) –
聚光灯收缩的点。如果是
Mobject
则使用其中心。 - opacity(浮点数) – 聚光灯的不透明度。
- color(str) – 聚光灯的颜色。
- run_time(float) – 动画的持续时间。
1 | from manim import * |
Indicate
临时调整大小和重新着色来强调 Mobject
。
参数: - mobject ( Mobject ) – 要指示的
mobject。 - scale_factor ( float ) –
对象时间缩放的因子 - color(str) – mobject
暂时呈现的颜色。 -
rate_func ( Callable [/[float,float|None],np.ndarray])
– 定义每个时间点的动画进度的函数。 - kwargs – 传递给Succession
构造函数的附加参数。
1 | from manim import * |
ShowPassingFlash
类似于笔触动画,每一帧只显示Mobj
第一部分。
参数: - mobject ( VMobject )
– 笔触具有动画效果的 mobject
。 -
time_width ( float ) –
相对于笔划长度的碎片长度。
1 | from manim import * |
Wiggle
摆动Mobj
。
参数: - mobject(Mobject) – 要摆动的
mobject
。 - scale_value ( float )
– mobject
临时缩放的因子。 -
rotation_angle ( float ) – 摆动角度。 -
n_wiggles ( int ) – 摆动的次数。 -
scale_about_point ( np.ndarray | None )
– mobject
缩放的点。 -
rotate_about_point ( np.ndarray | None )
– mobject
围绕其旋转的点。 -
run_time ( float ) – 动画的持续时间。
1 | from manim import * |
movement
与运动相关的动画。
目录:
为避免歧义这里不翻译。
方法 | 功能 |
---|---|
ComplexHomotopy |
Complex Homotopy a function Cx[0, 1] to C |
Homotopy |
A Homotopy. |
MoveAlongPath |
Make one mobject move along the path of another mobject. |
PhaseFlow |
|
SmoothedVectorizedHomotopy |
Homotopy
Latex
不便于粘贴,只好用Google
翻译截图之:

1 | from manim import * |
MoveAlongPath
使一个 mobject
沿着另一个 mobject
的路径移动。
1 | from manim import * |
numbers
改变数字的动画。
官方给出的说明较为简略,以文档为准。
目录:
方法名 |
---|
ChangeDecimalToValue |
ChangingDecimal |
rotation
与旋转相关的动画。
方法名 | 说明 |
---|---|
Rotate |
旋转一个 Mobject |
Rotating |
Rotate
旋转一个Mobj
。
参数: - mobject ( Mobject ) – 要旋转的
mobject
。 - angle(浮点数) –
旋转角度。 - axis(np.ndarray)– 作为
numpy
向量的旋转轴。 -
about_point ( Sequence [float]|None)
– 旋转中心。 -
about_edge ( Sequence [float]None ) –
如果about_point
为None
,则此参数指定要作为旋转中心的边界框点的方向。
1 | from manim import * |
specialized
比较特殊的方法,特殊到只有一个。
Broadcast |
从 开始广播一个 mobject initial_width ,直到达到
mobject 的实际大小。 |
Broadcast
从 开始广播一个 mobject initial_width
,直到达到 mobject
的实际大小。
参数: - mobject – 要广播的 mobject
。 -
focal_point ( Sequence [float] ) –
广播的中心,默认为 ORIGIN
。 -
n_mobs ( int ) – 从焦点出现的
mobject
的数量,默认为 5
。 -
initial_opacity ( float ) – 从广播发出的
mobjects
的起始笔触不透明度,默认为 1
。 -
final_opacity ( float ) – 广播发出的
mobjects
的最终笔触不透明度,默认为 0
。 -
initial_width ( float ) –
mobjects
的初始宽度,默认为 0.0
。 -
remover(bool)-动画结束后是否应从场景中移除
mobjects
,默认为 True
。 -
lag_ratio ( float ) – mobject
每次迭代之间的时间,默认为 0.2
。 -
run_time ( float ) – 动画的总持续时间,默认为
3
。 - kwargs(任意) –
要传递给的附加参数LaggedStart
。
参数很多,代码倒是简单(纸老虎bushi):
1 | from manim import * |
speedmodifier
用于修改动画播放速度的实用程序。
ChangeSpeed |
修改已传递动画的速度。 |
个人觉得比较麻烦,暂时不想学,请看官方文档。
transform
动画将一个对象转换为另一个对象。
请看下方超级目录:
方法名 | 功能 |
---|---|
ApplyComplexFunction |
|
ApplyFunction |
|
ApplyMatrix |
将矩阵变换应用于 mobject 。 |
ApplyMethod |
通过应用一种方法来为 mobject 制作动画。 |
ApplyPointwiseFunction |
将逐点函数应用于 mobject 的动画。 |
ApplyPointwiseFunctionToCenter |
|
ClockwiseTransform |
沿顺时针方向的圆弧变换 mobject 的点。 |
CounterclockwiseTransform |
沿逆时针方向的圆弧变换物体的点。 |
CyclicReplace |
循环移动物体的动画。 |
FadeToColor |
改变对象颜色的动画。 |
FadeTransform |
将一个对象淡入另一个对象。 |
FadeTransformPieces |
将一个对象的子对象淡入另一个对象的子对象。 |
MoveToTarget |
将 mobject 转换为存储在其target 属性中的
mobject 。 |
ReplacementTransform |
将 mobject 替换并变形为目标 mobject 。 |
Restore |
将对象转换为其最后保存的状态。 |
ScaleInPlace |
按特定比例缩放物体的动画。 |
ShrinkToCenter |
使物体缩小到中心的动画。 |
Swap |
|
Transform |
Transform 将 Mobject 转换为目标
Mobject 。 |
TransformAnimations |
|
TransformFromCopy |
执行反向变换 |
ApplyMatrix
对Mobject
应用矩阵变换。
参数: - matrix(np.ndarray)– 转换矩阵。 -
mobject(Mobject)– Mobject
。 -
about_point ( np.ndarray ) –
变换的原点。默认为ORIGIN
。 - kwargs –
传递给的进一步关键字参数ApplyPointwiseFunction
。
1 | from manim import * |
由于不懂矩阵变化是啥东东,这里博主看不懂哟。 如果有大佬明白欢迎在 Comments 指出原理。
ApplyPointwiseFunction
将逐点函数应用于 mobject
的动画。
1 | from manim import * |
看不懂(
弱)。
ClockwiseTransform
沿顺时针方向的圆弧变换 mobject
的点。
1 | from manim import * |
CounterclockwiseTransform
沿逆时针方向的圆弧变换物体的点。
你问我参数呢?不知道,文档没写啊~
1 | from manim import * |
为什么这么长,问就是官网复制的。
CyclicReplace
循环移动物体的动画,看起来像是扑克牌洗牌感觉适合用于制作排序算法的动画。
参数: - mobjects ( Mobject ) – 要转换的
mobject
列表。 -
path_arc ( float ) –
物体到达目标所遵循的弧度角度(以弧度为单位)。 -
kwargs – 传递给的进一步关键字参数Transform
。
1 | from manim import * |
FadeToColor
改变对象颜色的动画。
1 | from manim import * |
FadeTransform
将一个对象淡入另一个对象。
参数: - mobject – 起始Mobject
。 -
target_mobject – 目标Mobject
。 -
stretchMobject
–
控制动画过程中目标是否拉伸。默认值: True
。 -
dim_to_match – 如果目标对象未自动拉伸,则允许在目标Mobject
移入时调整其初始比例。将其分别设置为
0
、1
和 2
, Mobject
分别将目标的长度与
x、y 和 z 方向的起始长度相匹配。 -
kwargs – 进一步的关键字参数被传递给父类。
1 | from manim import * |
FadeTransformPieces
将一个对象的子对象淡入另一个对象的子对象。
1 | from manim import * |