Quickstart 快速入门#
Note
在继续之前,需要按照Installation中的步骤安装Manim,并确保它正常运行。
如果你想了解如何在Jupyterlab或Jupyter笔记本中使用Manim,请前往IPython magic command
,%%manim
。
概述#
这个快速入门指南将引导你创建一个使用Manim的示例项目:一个用于精确编程动画的动画引擎。
首先我们使用命令行界面(Command Line Interface,CLI)创建一个类 Scene
(场景类), 这是Manim生成视频的主要类。
第一个例子,Scene
我们将创建一个圆(动画实体)。
第二个例子:我们在Scene
中显示一个正方形变成一个圆形。
这将是你带入到Manim动画世界。
接下来将会看到多个数学 (Mobject
们)。最后,
你会学到
.animate
语法规则,他具备强大的功能,可以通过修改一些属性和方法
让Mobject
们生动,并跳动起来
开始一个新的 project#
首先新建一个目录。 比如我们取名字叫project
:
project/
这个文件夹是你的项目的根目录,它包含了Manim运行所需的所有文件,以及你的项目产生的任何输出文件。
圆动画#
-
打开一个文本编辑器比如 Notepad之类. 将下面这段程序copy进去:
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(Create(circle)) # show the circle on screen
-
将代码片段保存到你的项目文件夹中,并将其命名为某个名称比如:
scene.py
.
project/
└─scene.py
3. 打开命令行编辑器, 进入到你刚才建立的 project 目录中,并执行以下命令:
manim -pql scene.py CreateCircle
Manim会输出一些渲染信息,例如正在渲染的帧数、渲染时间等等。 这些信息可以帮助你了解Manim正在进行的操作和进度。同时,Manim还会创建一个MP4文件,其中包含了你创建的动画。 这个MP4文件可以在你的默认影片播放器中播放,例如Windows Media Player或QuickTime Player。
如果你看到了一个粉色的圆被绘制的动画,恭喜你!你刚刚从头开始编写了你的第一个Manim场景。
如果你看到错误消息而不是视频,或者视频输出不像前面的动画,那么很可能是Manim没有正确安装。 请参考我们的FAQ section解答部分,以获取帮助解决最常见的问题。
代码解释#
让我们逐行分析刚才执行的脚本,看看Manim是如何绘制圆的。
第一行代码导入了整个Manim库的内容。
在Python中,导入库是一种常见的方式,用于在代码中使用库中提供的函数、类和变量等。 在Manim中,你需要导入Manim库,以便在你的代码中使用Manim提供的API和功能。
在这个指南中,第一行代码使用Python的import语句导入了整个Manim库的内容。 这意味着你可以在这个脚本中使用Manim库中的任何函数、类和变量,而不需要显式地导入它们:
from manim import *
这是使用Manim的推荐方式,因为一个脚本通常会使用Manim命名空间中的多个名称。
在你的脚本中,你导入并使用了Scene
、Circle
、PINK
和Create
这些名称。
在Manim中,一个命名空间(namespace)是一个包含函数、类、变量和其他名称的集合。
当你导入Manim库时,你实际上是导入了Manim命名空间中的所有名称。
这意味着你可以在你的脚本中直接使用Manim命名空间中的名称,而不需要在每个名称前面加上前缀。
这种方式可以使代码更简洁,更易于阅读和编写。因此,这是使用Manim的推荐方式。
在你的脚本中,你使用了Scene
、Circle
、PINK
和Create
这些名称。
Scene
是Manim中的一个类,用于表示一个动画场景。
Create
是Manim中的一个类,用于表示一个圆形。PINK是一个变量,表示粉色。
Create
是Manim中的一个函数,
用于创建一个Mobject(即可动画的对象)并将其添加到场景中。
现在我们看下面两行:
class CreateCircle(Scene):
def construct(self):
...
大多数情况下,编写动画脚本的代码完全包含在Scene
类的construct()
方法中。
在construct()
方法中,你可以创建对象,将它们显示在屏幕上,并将它们进行动画处理。
在Manim中,一个场景(Scene
)表示一个动画场景,可以包含多个物体(Mobjects)和动画效果。
为了编写一个Manim场景,你需要创建一个继承自Scene的子类,并实现它的construct()
方法。
在construct()
方法中,
你可以编写场景的代码,包括创建物体、控制动画效果等等。
接下来的两行代码创建了一个圆,并设置了它的颜色和透明度。:
circle = Circle() # 建立一个圆
circle.set_fill(PINK, opacity=0.5) # 设置颜色和透明度
最后一行使用动画创建类 Create
创建一个圆类的实体并且通过play放到Scene
中:
self.play(Create(circle)) # 在 screen 中显示 circle
建议
所有的动画效果必须放置在一个继承自Scene
的类的
construct()
方法中。其他的代码,如辅助函数或数学函数,可以放置在类外部。
将一个正方形转化为一个圆形#
完成了圆形动画之后,让我们继续进行一些更加复杂的事情。
-
打开
scene.py
文件, 将以下代码copy到CreateCircle
类定义的后面:
class SquareToCircle(Scene):
def construct(self):
circle = Circle() # create a circle
circle.set_fill(PINK, opacity=0.5) # set color and transparency
square = Square() # create a square
square.rotate(PI / 4) # rotate a certain amount
self.play(Create(square)) # animate the creation of the square
self.play(Transform(square, circle)) # interpolate the square into the circle
self.play(FadeOut(square)) # fade out animation
-
将
SquareToCircle
对象转换为视频可以通过以下命令行:
manim -pql scene.py SquareToCircle
接下来的动画效果将会被渲染为视频文件:
这个例子展示了Manim的一个主要特点:使用少量的代码就可以实现复杂的、数学密集型的动画效果(比如在两个几何形状之间进行平滑的插值)。这表明Manim具有强大的数学计算和动画效果实现能力,可以帮助用户快速实现复杂的动画效果。同时,Manim也提供了简单易用的API和工具,使得使用Manim编写动画变得更加容易和高效。
放置 Mobject
们#
接下来,是时候展现一些基本的定位Mobject
们的技术了。
-
打开
scene.py
, 在代码后面接上后面的代码SquareToCircle
方法:
class SquareAndCircle(Scene):
def construct(self):
circle = Circle() # create a circle
circle.set_fill(PINK, opacity=0.5) # set the color and transparency
square = Square() # create a square
square.set_fill(BLUE, opacity=0.5) # set the color and transparency
square.next_to(circle, RIGHT, buff=0.5) # set the position
self.play(Create(circle), Create(square)) # show the shapes on screen
-
将
SquareAndCircle
对象转换为视频可以通过以下命令行:
manim -pql scene.py SquareAndCircle
接下来的动画效果将会被渲染为视频文件:
next_to
是一个Manim中的物体(Mobject
)方法,用于定位Mobject
们的位置。
我们首先通过将粉色circle
指定为正方形方法的第一个参数,将其作为正方形的参考点。
第二个参数用于指定Mobject
相对于参考点的方向。
在这个例子中,相对位置是RIGHT
,
告诉Manim正方形在圆形的 RIGHT。
最后, 给定了一个buff=0.5
指定两个物体之间的距离。
试试把RIGHT
变成
LEFT
, UP
, 或者是 DOWN
, 我们可以看看正方形的位置变化。
在 Manim 中可以使用定位方法,来呈现包含多个 Mobject
们的场景,可以使用坐标将它们定位在场景中,也可以通过相对位置的方式来设置它们的位置。
如果需要获得 next_to
和其他关于相对位置的信息,可以在参考手册中查找检查
list of Mobject
类,有更详细的介绍
使用 .animate
语法来对方法进行动画化。
#
在 Manim 中,可以使用 .animate
语法来对 Mobject
的方法进行动画化,例如对 Mobject
的位置、旋转、缩放等属性进行动画变化。
通过使用 .animate
语法,可以创建动画效果,使Mobject
的属性值在一段时间内逐渐变化,从而形成动态的效果。
举个例子,如果要在 Manim 中对一个 Mobject 进行旋转动画,可以使用以下语法:
最后介绍 Manim 中的 .animate
方法,它可以用来对Mobject
进行动画化。
当你在对一个Mobject
对象进行修改的方法调用前加上 .animate
,该方法就会变成一个可以播放的动画,你可以通过 self.play 来播放这个动画。
中的 SquareToCircle 示例中,可以看到直接调用方法和使用 .animate
方法进行动画化的区别。
-
打开
scene.py
, 把代码加到 the following code snippet below theSquareAndCircle
class后面:
class AnimatedSquareToCircle(Scene):
def construct(self):
circle = Circle() # 创建一个圆
square = Square() # 创建一个正方形
self.play(Create(square)) # 将正方形显示在场景中
self.play(square.animate.rotate(PI / 4)) # 旋转正方形
self.play(
ReplacementTransform(square, circle)
) # 将一个正方形转换成一个圆形
self.play(
circle.animate.set_fill(PINK, opacity=0.5)
) # 改变圆形的颜色
-
将
AnimatedSquareToCircle
对象转换为视频可以通过以下命令行:
manim -pql scene.py AnimatedSquareToCircle
接下来的动画效果将会被渲染为视频文件:
首先第一步 self.play
创建了一个正方形. 第二布让正方形旋转45度。
第三步件正方形变成一个圆, 最后一步将圆变成粉色。
虽然结果和SquareToCircle
相同 , .animate
展示
rotate
和 set_fill
动态应用于
Mobject
,
而不是使用已应用的更改创建他们.
试试别的方法, 比如 flip
或者 shift
, 看看会发生什么情况
-
打开
scene.py
, 在代码后面接上后面的代码AnimatedSquareToCircle
方法:
class DifferentRotations(Scene):
def construct(self):
left_square = Square(color=BLUE, fill_opacity=0.7).shift(2 * LEFT)
right_square = Square(color=GREEN, fill_opacity=0.7).shift(2 * RIGHT)
self.play(
left_square.animate.rotate(PI), Rotate(right_square, angle=PI), run_time=2
)
self.wait()
-
将
DifferentRotations
对象转换为视频可以通过以下命令行:
manim -pql scene.py DifferentRotations
接下来的动画效果将会被渲染为视频文件:
在 Scene
中说明了
.animate
的特性. 当使用
.animate
, Manim
实际上是获得 Mobject
’s
开始和结束的那两种状态,Manim 会根据这两个状态之间的差异,计算出一个变换函数,将 Mobject 从起始状态平滑地过渡到结束状态。
在 AnimatedSquareToCircle
类,
当正方形旋转时,你会观察到正方形的角落似乎会略微收缩,以便将其移动到第一个正方形转换为第二个正方形所需的位置。
在DifferentRotations
类, .animate
对应旋转的实现,和
Rotate
方法直接差异明显。
Mobject
旋转360度开始和结束的状态是相同的。
, 因此.animate
方法会尝试对两个相同的对象进行插值操作,并且结果是左侧的正方形。如果你发现自己使用 .animate
方法时出现类似的不良行为,
请考虑使用传统的动画方法,例如右侧使用 Rotate
方法的正方形。
.animate
方法是一种用于实现动画效果的简便方法,但它并不总是能够正确地解释所有的变换操作。
在某些情况下,如旋转操作等,.animate
方法可能会导致不必要的行为,
这时我们可以使用更加传统的动画方法,例如Rotate
方法,来更准确地控制对象的变化。
在这个示例中,我们可以看到通过使用 Rotate
方法,我们可以更好地控制正方形的旋转,
并且得到我们期望的动画效果。
你完成了!#
如果您已经成功地安装了Manim并且已经能够运行这个示例项目,那么您已经准备好开始制作自己的动画了。 为了更深入地了解Manim在幕后的运作,可以继续学习下一个教程:Manim’s Output Settings(Manim的输出设置)。这个教程将介绍Manim的输出设置,例如视频分辨率、帧率、渲染器等等, 这些设置将影响你的动画的最终效果和质量。通过学习这个教程,您将更好地理解Manim的工作原理,并能够更好地控制和定制您的动画输出。 为了了解Manim的功能概述、配置和其他设置,可以查看其他教程。Manim拥有许多功能和选项,可以通过学习其他Tutorials来了解它们的具体用法和设置方法。 另外,Manim还提供了Reference Manual(参考手册), 其中列出了所有可用的功能和选项,如果您需要查找某个具体功能的详细信息,可以参考这个页面。