ManimCE学习笔记
一、ManimCE简介
ManimCE 是由 3Blue1Brown 创建的开源 Python 动画库,用于创建高质量的数学动画。它使用 OpenGL 来渲染图形,并使用 Python 来编写动画逻辑。ManimCE 可以创建各种各样的动画,包括从简单的几何动画到复杂的物理模拟。它还可以与其他 Python 库一起使用,例如 NumPy 和 SciPy,以创建更复杂的动画。ManimCE 是一个非常强大的工具,可以用于创建各种各样的动画。它易于使用,并且可以创建非常高质量的动画。如果您正在寻找一个工具来创建数学动画,那么 ManimCE 是一个很好的选择。
二、ManimCE安装
安装ManimCE的方法,见大佬文章李狗剩
三、ManimCE基本使用
1.开始一个新项目
首先创建一个新文件夹。尊重官方文档,请将文件夹命名为:project
project/
此文件夹是项目的根文件夹。它包含 Manim 运行所需的所有文件,以及项目生成的任何输出。
(1)对圆进行动画处理
打开文本编辑器,如记事本。将以下代码片段输入到窗口中:
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
将代码片段保存到名为project的项目文件夹中,并命名为scene.py:
project/
└─scene.py
打开命令行,导航到您的项目文件夹,然后执行以下命令:
manim -pql scene.py CreateCircle
Manim 将输出渲染信息,然后创建一个 MP4 文件。默认电影播放器将播放 MP4 文件,并显示以下动画。
如果您看到正在绘制粉红色圆圈的动画,那么恭喜您!您刚刚从头开始写了您的第一个 Manim 场景。
如果您收到错误消息,则您看不到视频,或者如果视频输出没有看起来像前面的动画,很可能 Manim 没有被正确安装。请参阅我们的常见问题部分,以获取有关最常见问题的帮助。
解释:
让我们逐行查看您刚刚执行的脚本,看看 Manim 的情况如何能够画圆。
第一行导入库的所有内容:
from manim import *
这是使用 Manim 的推荐方法,因为单个脚本经常使用 Manim 库中的多个函数。在脚本中,导入并使用了 Scene、Circle 和 Create。
现在让我们看一下接下来的两行:
class CreateCircle(Scene):
def construct(self):
...
大多数情况下,用于编写动画脚本的代码完全包含在"类"中。在里面,您可以创建对象,在屏幕上显示它们,并对它们进行动画处理。
接下来的两行创建一个圆并设置其颜色和不透明度:
circle = Circle() # 创建一个圆
circle.set_fill(PINK, opacity=0.5) # 设置其颜色和不透明度
最后,最后一行使用.play来显示屏幕上的圆圈:
self.play(Create(circle)) # show the circle on screen
提示:所有动画都必须位于派生自Scene的类中。其他代码,如辅助或数学函数,可以驻留在类之外。
将正方形转换为圆形:
完成圆形动画后,让我们继续进行更复杂的事情。
打开scene.py文件,并在类下方添加以下代码片段:
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
通过在命令行中运行以下命令进行渲染:
manim -pql scene.py SquareToCircle
将呈现以下动画:
此示例显示了 Manim 的主要功能之一:能够实现复杂且数学密集型的动画(例如在两个几何形状之间插值),只需几行代码。
定位Mobject:
接下来,让我们回顾一些定位的基本技术。
打开scene.py文件,并在类下方添加以下代码片段:
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
通过在命令行中运行以下命令进行渲染:
manim -pql scene.py SquareAndCircle
将呈现以下动画:
next_to
是一种定位方法,用于将一个Mobject放置在另一个Mobject的旁边。我们首先指定粉红色圆圈作为正方形的参考点,作为方法的第一个参数传递。第二个参数用于指定相对于参考点的放置方向。在本例中,我们将方向设置为 RIGHT
,告诉 Manim 将正方形定位在圆的右侧。最后,我们在两个对象之间应用一个小距离缓冲区。
尝试更改为 LEFT
、 UP
或 DOWN
,看看它如何改变正方形的位置。
使用定位方法,可以渲染具有多个Mobjects的场景,使用坐标设置它们在场景中的位置或定位它们彼此相对。
有关 next_to
和其他定位方法的更多信息,请查看参考手册中的方法列表。
使用 .animate
对方法进行动画处理:
本教程的最后一部分是使用 .animate
这种方法对 Mobject 的方法调用进行动画处理。当您预置 .animate
到任何方法调用时,该方法成为动画,其中可以使用 .play
来播放它。
让我们回过头来看看创建正方形、旋转和设置颜色时使用 .animate
方法的区别,并使用 .play
对这些方法调用进行动画处理。
打开scene.py文件,并在类下方添加以下代码片段:
class AnimatedSquareToCircle(Scene):
def construct(self):
circle = Circle() # create a circle
square = Square() # create a square
self.play(Create(square)) # show the square on screen
self.play(square.animate.rotate(PI / 4)) # rotate the square
self.play(
ReplacementTransform(square, circle)
) # transform the square into a circle
self.play(
circle.animate.set_fill(PINK, opacity=0.5)
) # color the circle on screen
通过在命令行中运行以下命令进行渲染:
manim -pql scene.py AnimatedSquareToCircle
将呈现以下动画:
第一个动画是创建正方形。第二个动画将其旋转45度。第三个动画将正方形转变为圆形,最后一个动画将圆形设置为粉红色。尽管最终结果与之前的动画相同,但是通过使用 .animate
对方法调用进行动画处理,而不是创建它们并逐步应用更改,可以动态地显示和应用这些更改。
尝试使用其他方法,例如 .flip
或 .shift
,看看会发生什么。
使用 .animate
对方法进行动画处理的另一个注意事项是在某些情况下可能会出现奇怪的行为。在本例中,当正方形旋转时,您可以观察到这一点:正方形的角在移动到所需位置时似乎略有收缩,让第一个方块变成第二个方块。
在 DifferentRotations
类中,对旋转的解释和使用 .animate
方法之间的差异要明显得多。旋转360度的开始和结束状态是相同的,因此尝试插值两个相同的对象,结果是左边的正方形。如果您发现自己的使用 .animate
导致了类似的不良行为,请考虑使用传统的动画方法,如右方块,它使用 .play
。
大功告成!使用 Manim 的工作安装和这个示例项目,您已准备好开始创建自己的动画。