ManimCE学习笔记(一)

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 将正方形定位在圆的右侧。最后,我们在两个对象之间应用一个小距离缓冲区。

尝试更改为 LEFTUPDOWN ,看看它如何改变正方形的位置。

使用定位方法,可以渲染具有多个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 的工作安装和这个示例项目,您已准备好开始创建自己的动画。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值