Manim文档及源码笔记-CE文档-Manim的积木

Manim是一个用于创建数学动画的Python库。它提供了Mobject、Animation和Scene三个核心概念,用于构建数学表达式的动态演示。Mobject是基本的可视化元素,包括各种形状和图表。Animation描述了Mobject随时间变化的过程,而Scene则负责组合这些元素和动画。通过定义自定义动画和操纵Mobject的属性,用户可以创建复杂的数学可视化。此外,坐标和变换功能允许精确控制Mobject的位置和形态变化。

Manim’s building blocks

Manim的积木

本文档解释了manim的组成部分,并将为您提供开始制作自己的视频所需的所有工具。

基本上,manim提供了三个不同的概念供您使用,您可以将它们编排在一起以生成数学动画:数学对象(简称mobject)、动画和场景。正如我们将在以下几节中看到的,这三个概念中的每一个都作为一个单独的类在manim中实现:MobjectAnimationScene类。

笔记
在阅读本页之前,建议您阅读教程Quickstart和Manim的输出设置。

移动对象,Mobjects

mobject是所有manim动画的基本构建块。从Mobject派生的每个类表示一个可以在屏幕上显示的对象。例如,圆Circle、箭头Arrow和矩形Rectangle等简单形状都是mobject。更复杂的结构,如轴Axes、函数图FunctionGraph或条形图BarChart也是mobject。

如果试图在屏幕上显示Mobject的实例,则只能看到一个空帧。原因是Mobject类是所有其他Mobject的抽象基类,即它没有任何可以在屏幕上显示的预定义视觉形状。它只是一个可以展示的东西的骨架。因此,您很少需要使用Mobject的普通实例;相反,您很可能会创建其派生类的实例。其中一个派生类是VMobject。V代表矢量化Mobject。本质上,vmobject是使用矢量图形vector graphics进行显示的mobject。大多数时候,您将处理vmobjects,尽管我们将继续使用术语“mobject”来指代可以在屏幕上显示的形状类别,因为它更为通用。

笔记
任何可以在屏幕上显示的对象都是mobject,即使它不一定是数学性质的。

提示
要查看从Mobject派生的类的示例,请参阅几何体geometry模块。其中大多数事实上也是从VMobject派生的。

创建和显示移动对象

如Quickstart中所述,通常manim脚本中的所有代码都放在场景类的construct()方法中。要在屏幕上显示mobject,请调用包含场景Sceneadd()方法。这是在屏幕上显示未设置动画的移动对象的主要方式。要从屏幕上删除mobject,只需从包含的场景中调用remove()方法。

from manim import *

class CreatingMobjects(Scene):
    def construct(self):
        circle = Circle()
        self.add(circle)
        self.wait(1)
        self.remove(circle)
        self.wait(1)

放置移动对象

让我们定义一个名为Shapes的新场景Scene,并在其中添加add()一些mobject。该脚本生成一个静态图片,其中显示一个圆、一个正方形和一个三角形:

from manim import *

class Shapes(Scene):
    def construct(self):
        circle = Circle()
        square = Square()
        triangle = Triangle()

        circle.shift(LEFT)
        square.shift(UP)
        triangle.shift(RIGHT)

        self.add(circle, square, triangle)
        self.wait(1)

默认情况下,首次创建移动对象时,将其放置在坐标中心或原点。它们还提供了一些默认颜色。此外,形状场景使用shift()方法放置移动对象。正方形从原点向上移动一个单位,而圆和三角形分别左移LEFT和右移RIGHT一个单位。

注意
与其他图形软件不同,manim将坐标中心放置在屏幕的中心。垂直正方向向上,水平正方向向右。另请参阅常数constants模块中定义的常数原点、上UP、下DOWN、左LEFT、右RIGHT和其他。

有许多其他可能的方法可以将mobject放置在屏幕上,例如move_to()next_to()align_to()。下一个场景MobjectPlacement使用了这三种方法。

from manim import *

class MobjectPlacement(Scene):
    def construct(self):
        circle = Circle()
        square = Square()
        triangle = Triangle()

        # place the circle two units left from the origin
        circle.move_to(LEFT * 2)
        # place the square to the left of the circle
        square.next_to(circle, LEFT)
        # align the left border of the triangle to the left border of the circle
        triangle.align_to(circle, LEFT)

        self.add(circle, square, triangle)
        self.wait(1)

move_to()方法使用绝对单位(相对于原点测量),而next_to()使用相对单位(从作为第一个参数传递的mobject测量)。align_to()不使用LEFT作为测量单位,而是作为确定用于对齐的边界的方法。移动对象边界的坐标是使用其周围的假想边界框确定的。

提示
manim中的许多方法可以链接在一起。例如,两条线

square = Square()
square.shift(LEFT)

可以替换为

square = Square().shift(LEFT)

从技术上讲,这是可能的,因为大多数方法调用返回修改后的mobject。

设置移动对象的样式,Styling mobjects

以下场景更改了移动对象的默认美学。

from manim import *

class MobjectStyling(Scene):
    def construct(self):
        circle = Circle().shift(LEFT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值