Mobject

全限定名:manim.mobject.mobject.Mobject

class Mobject(color=ManimColor('#FFFFFF'), name=None, dim=3, target=None, z_index=0)[source]

基类: object

数学对象:可在屏幕上显示的对象的基础类。

存在一个兼容层,允许使用 get_*set_* 方法获取和设置通用属性。有关更多详细信息,请参见 set()

参数:
submobjects

包含的对象。

类型:

List[Mobject]

points

对象的点。

另请参阅

VMobject

类型:

numpy.ndarray

方法

添加

添加 mobject 作为子对象。

添加动画覆盖

添加动画覆盖。

添加背景矩形

添加一个 BackgroundRectangle 作为子对象。

为具有点的家族成员添加背景矩形

为子对象添加背景矩形

添加 n 个更多子对象

添加到背面

将所有传入的 mobject 添加到子对象的背面。

添加更新器

为此 mobject 添加一个更新函数。

对齐数据

将此 mobject 的数据与另一个 mobject 对齐。

在边界上对齐

方向只需是指向二维平面中边或角的向量。

对齐点

与较大的对齐点

对齐子对象

对齐到

在某个方向上将 mobject 与另一个 Mobject 对齐。

动画覆盖

返回为此类定义特定动画覆盖的函数。

应用复函数

将复函数应用于 Mobject

应用函数

将函数应用于位置

将函数应用于子对象位置

应用矩阵

跨属性数组应用

围绕点应用点函数

应用于家族

递归地将函数应用于 self 和每个具有点的子对象。

排列

在屏幕上将 Mobject 彼此相邻排列。

在网格中排列

在网格中排列子对象。

排列子对象

用小缓冲区排列 submobjects 的位置。

变成

编辑点、颜色和子对象,使其与另一个 Mobject 相同

居中

将 mobject 的中心移动到场景中心。

清除更新器

移除所有更新器。

复制

创建并返回 Mobject 的完全相同的副本,包括所有 submobjects

淡化

淡化到

具有点的家族成员

翻转

围绕其中心翻转/镜像 mobject。

generate_points (生成点)

初始化 points,从而初始化形状。

生成目标

获取所有点

返回此 mobject 和所有子对象的所有点。

获取数组属性

获取底部

获取包围 Mobject 的框的底部 Point3D。

获取边界点

获取中心

获取中心 Point3D。

获取质心

获取颜色

返回 Mobject 的颜色。

获取坐标

旨在泛化 get_xget_yget_z

获取角点

获取特定方向的角点 Point3D。

获取临界点

想象一个包围 Mobject 的框。

获取边缘中心

获取特定方向的边缘 Point3D。

获取终点

返回包围 Mobject 的笔划的结束点。

沿维度获取极值

获取家族

获取家族更新器

获取组类

获取图像

获取左侧

获取包围 Mobject 的框的左侧 Point3D。

获取合并数组

返回此 mobject 和所有子对象中给定属性的所有值。

获取中点

获取形成 Mobject 路径中点的 Point3D。

获取 mobject 类型类

返回此 mobject 类型的基类。

获取最低点

获取包围 3D Mobject 的框的最低点(与顶点相对)Point3D。

获取点数

获取片段

获取点 mobject

转换为或从 self 转换的最简单的 Mobject

获取定义边界的点

获取右侧

获取包围 Mobject 的框的右侧 Point3D。

获取起点

返回包围 Mobject 的笔划的起始点。

获取起始和结束

将笔划的起始点和结束点作为 tuple 返回。

获取基于时间的更新器

返回所有使用 dt 参数的更新器。

获取顶部

获取包围 Mobject 的框的顶部 Point3D。

获取更新器

返回所有更新器。

获取 x

Mobject 中心的 x Point3D 作为 float 返回。

获取 y

Mobject 中心的 y Point3D 作为 float 返回。

获取 z

Mobject 中心的 z Point3D 作为 float 返回。

获取 z 索引参考点

获取顶点

获取包围 3D Mobject 的框的顶点 Point3D。

没有点

检查 Mobject 是否不包含点。

有点

检查 Mobject 是否包含点。

有基于时间的更新器

测试 self 是否有基于时间的更新器。

初始化颜色

初始化颜色。

插入

将 mobject 插入到 self.submobjects 中的特定位置。

插值

将此 Mobject 变为 mobject1mobject2 之间的插值。

插值颜色

反转

反转 submobjects 列表。

在屏幕外

沿维度长度

测量 Mobject 在特定方向上的长度。

匹配颜色

使颜色与另一个 Mobject 的颜色匹配。

匹配坐标

使 Point3D 与另一个 Mobject 的 Point3D 匹配。

匹配深度

使深度与另一个 Mobject 的深度匹配。

匹配维度大小

使指定维度与另一个 Mobject 的维度匹配。

匹配高度

使高度与另一个 Mobject 的高度匹配。

匹配点

编辑点、位置和子对象,使其与另一个 Mobject 相同,同时保持样式不变。

匹配更新器

匹配给定 mobject 的更新器。

匹配宽度

使宽度与另一个 Mobject 的宽度匹配。

匹配 x

匹配 x 坐标。

匹配 y

匹配 y 坐标。

匹配 z

匹配 z 坐标。

移动到

Mobject 的中心移动到特定 Point3D。

旁边

将此 Mobject 移动到另一个 Mobject 或 Point3D 旁边。

非空子对象

空点对齐

如果一个有点的 Mobject 与一个没有点的 Mobject 对齐,则将两者都视为组,并将有点的那个推入其自身的子对象列表。

从比例获取点

以角度定位

从点获取比例

将自身推入子对象

将起始和结束放在

跨维度缩减

在此 mobject 和子对象的所有点中,查找某个维度的最小值或最大值。

移除

移除 submobjects

移除更新器

移除更新器。

重复

这可以使过渡动画更流畅。

重复子对象

替换

重新缩放以适应

重置点

points 设置为空数组。

恢复

恢复先前使用 save_state() 保存的状态。

恢复更新

启用来自更新器和动画的更新。

反转点

旋转

围绕某个点旋转 Mobject

围绕原点旋转

围绕原点([0,0,0])旋转 Mobject

保存图像

将其图像以其位置保存到 PNG 文件中。

保存状态

保存当前状态(位置、颜色和大小)。

刻度

按比例因子缩放大小。

按深度缩放

缩放 Mobject 以适应某个深度,同时保持宽度/高度比例。

按高度缩放

缩放 Mobject 以适应某个高度,同时保持宽度/深度比例。

按宽度缩放

缩放 Mobject 以适应某个宽度,同时保持高度/深度比例。

设置

设置属性。

设置颜色

条件是一个接受一个参数 (x, y, z) 的函数。

按渐变设置颜色

按径向渐变设置颜色

设置坐标

设置默认值

设置关键字参数的默认值。

按渐变为子对象设置颜色

按径向渐变为子对象设置颜色

设置 x

设置 Mobject 中心的 x 值(intfloat)。

设置 y

设置 Mobject 中心的 y 值(intfloat)。

设置 z

设置 Mobject 中心的 z 值(intfloat)。

设置 z 索引

Mobjectz_index 设置为 z_index_value 中指定的值。

按 z Point3D 设置 z 索引

Mobject 的 z Point3D 设置为 z_index 的值。

平移

按给定向量平移。

平移到屏幕上

显示

打乱

打乱 submobjects 列表。

打乱子对象

打乱 submobjects 的顺序。

排序

根据 submob_func 定义的函数对 submobjects 列表进行排序。

排序子对象

排序 submobjects

间隔子对象

分割

拉伸

围绕点拉伸

拉伸以适应深度

拉伸 Mobject 以适应某个深度,不保持宽度/高度比例。

拉伸以适应高度

拉伸 Mobject 以适应某个高度,不保持宽度/深度比例。

拉伸以适应宽度

拉伸 Mobject 以适应某个宽度,不保持高度/深度比例。

环绕

暂停更新

禁用来自更新器和动画的更新。

如果没有点则抛出错误

到角点

将此 Mobject 移动到屏幕的给定角点。

到边缘

将此 Mobject 移动到屏幕的给定边缘,而不影响其在其他维度上的位置。

恢复原始颜色

更新

应用所有更新器。

属性

animate (动画)

用于动画化 self 的任何方法的应用。

animation_overrides (动画覆盖)

depth (深度)

mobject 的深度。

height (高度)

mobject 的高度。

width (宽度)

mobject 的宽度。

classmethod _add_intrinsic_animation_overrides()[source]

初始化带有 override_animation() 装饰器标记的动画覆盖。

返回类型:

_assert_valid_submobjects(submobjects)[source]

检查所有子对象是否确实是 Mobject 的实例,并且它们中没有一个是 self(一个 Mobject 不能包含自身)。

这是一个辅助函数,在将 Mobject 添加到 submobjects 列表时调用。

此函数旨在由 VMobject 等子类覆盖,这些子类应断言只能将其他 VMobject 添加到其中。

参数:

submobjects (Iterable[Mobject]) – 包含要验证的值的列表。

返回:

Mobject 本身。

返回类型:

Mobject

抛出:
  • TypeError – 如果 submobjects 中的任何值不是 Mobject

  • ValueError – 如果尝试将一个 Mobject 作为其自身的子对象添加。

add(*mobjects)[source]

添加 mobject 作为子对象。

mobject 被添加到 submobjects

mobject 的子类可以实现 ++= 魔法方法。

参数:

mobjects (Mobject) – 要添加的 mobject。

返回:

self

返回类型:

Mobject

抛出:
  • ValueError – 当 mobject 尝试添加自身时。

  • TypeError – 当尝试添加一个不是 Mobject 实例的对象时。

注意

一个 mobject 不能包含自身,也不能包含一个子对象多次。如果父 mobject 被显示,新添加的子对象也将被显示(即它们会自动添加到父场景中)。

另请参阅

remove(), add_to_back()

示例

>>> outer = Mobject()
>>> inner = Mobject()
>>> outer = outer.add(inner)

重复项不会再次添加

>>> outer = outer.add(inner)
>>> len(outer.submobjects)
1

只能添加 Mobject

>>> outer.add(3)
Traceback (most recent call last):
...
TypeError: Only values of type Mobject can be added as submobjects of Mobject, but the value 3 (at index 0) is of type int.

将对象添加到自身会引发错误

>>> outer.add(outer)
Traceback (most recent call last):
...
ValueError: Cannot add Mobject as a submobject of itself (at index 0).

给定 mobject 不能作为子对象两次添加到某个父级

>>> parent = Mobject(name="parent")
>>> child = Mobject(name="child")
>>> parent.add(child, child)
[...] WARNING  ...
parent
>>> parent.submobjects
[child]
classmethod add_animation_override(animation_class, override_func)[source]

添加动画覆盖。

这不适用于子类。

参数:
  • animation_class (type[Animation]) – 要覆盖的动画类型。

  • override_func (FunctionOverride) – 返回替换默认动画的函数的函数。它会传递给动画构造函数。

抛出:

MultiAnimationOverrideException – 如果被覆盖的动画已被覆盖。

返回类型:

add_background_rectangle(color=None, opacity=0.75, **kwargs)[source]

添加一个 BackgroundRectangle 作为子对象。

BackgroundRectangle 会添加到其他子对象的后面。

这可以用来提高 mobject 在嘈杂背景前的可见性。

参数:
  • color (ParsableManimColor | None) – BackgroundRectangle 的颜色。

  • opacity (float) – BackgroundRectangle 的不透明度。

  • kwargs – 传递给 BackgroundRectangle 构造函数的额外关键字参数。

返回:

self

返回类型:

Mobject

add_to_back(*mobjects)[source]

将所有传入的 mobject 添加到子对象的背面。

如果 submobjects 已包含给定的 mobject,它们只会移到背面。

参数:

mobjects (Mobject) – 要添加的 mobject。

返回:

self

返回类型:

Mobject

注意

从技术上讲,这是通过将 mobject 添加(或移动)到 submobjects 的头部来完成的。此列表的头部会首先渲染,这会将相应的 mobject 放置在后续列表成员的后面。

抛出:
  • ValueError – 当 mobject 尝试添加自身时。

  • TypeError – 当尝试添加一个不是 Mobject 实例的对象时。

参数:

mobjects (Mobject)

返回类型:

自身

注意

一个 mobject 不能包含自身,也不能包含一个子对象多次。如果父 mobject 被显示,新添加的子对象也将被显示(即它们会自动添加到父场景中)。

另请参阅

remove(), add()

add_updater(update_function, index=None, call_updater=False)[source]

为此 mobject 添加一个更新函数。

更新函数(简称更新器)是在每一帧中应用于 Mobject 的函数。

参数:
  • update_function (Updater) – 要添加的更新函数。每当调用 update() 时,此更新函数都会以 self 作为第一个参数被调用。更新器可以有第二个参数 dt。如果使用此参数,则会以第二个值 dt 调用,通常表示自上次调用 update() 以来的时间(秒)。

  • index (int | None) – 新更新器应添加到 self.updaters 中的索引。如果 indexNone,则更新器将添加到末尾。

  • call_updater (bool) – 是否在初始时调用更新器。如果为 True,则更新器将使用 dt=0 调用。

返回:

self

返回类型:

Mobject

示例

示例:NextToUpdater

from manim import *

class NextToUpdater(Scene):
    def construct(self):
        def dot_position(mobject):
            mobject.set_value(dot.get_center()[0])
            mobject.next_to(dot)

        dot = Dot(RIGHT*3)
        label = DecimalNumber()
        label.add_updater(dot_position)
        self.add(dot, label)

        self.play(Rotating(dot, about_point=ORIGIN, angle=TAU, run_time=TAU, rate_func=linear))
class NextToUpdater(Scene):
    def construct(self):
        def dot_position(mobject):
            mobject.set_value(dot.get_center()[0])
            mobject.next_to(dot)

        dot = Dot(RIGHT*3)
        label = DecimalNumber()
        label.add_updater(dot_position)
        self.add(dot, label)

        self.play(Rotating(dot, about_point=ORIGIN, angle=TAU, run_time=TAU, rate_func=linear))

示例:DtUpdater

from manim import *

class DtUpdater(Scene):
    def construct(self):
        square = Square()

        #Let the square rotate 90° per second
        square.add_updater(lambda mobject, dt: mobject.rotate(dt*90*DEGREES))
        self.add(square)
        self.wait(2)
class DtUpdater(Scene):
    def construct(self):
        square = Square()

        #Let the square rotate 90° per second
        square.add_updater(lambda mobject, dt: mobject.rotate(dt*90*DEGREES))
        self.add(square)
        self.wait(2)

align_data(mobject, skip_point_alignment=False)[source]

将此 mobject 的数据与另一个 mobject 对齐。

此后,这两个 mobject 将拥有相同数量的子对象(参见 align_submobjects()),相同的父结构(参见 null_point_align())。如果 skip_point_alignment 为 False,它们还将拥有相同数量的点(参见 align_points())。

参数:
  • mobject (Mobject) – 此 mobject 应与之对齐的另一个 mobject。

  • skip_point_alignment (bool) – 控制是否跳过计算成本高的点对齐(默认为 False)。

返回类型:

align_on_border(direction, buff=0.5)[source]

方向只需是指向二维平面中边或角的向量。

参数:
返回类型:

自身

align_to(mobject_or_point, direction=array([0., 0., 0.]))[source]

在某个方向上将 mobject 与另一个 Mobject 对齐。

示例:mob1.align_to(mob2, UP) 垂直移动 mob1,使其顶边与 mob2 的顶边对齐。

参数:
返回类型:

自身

property animate: _AnimationBuilder | Self

用于动画化 self 的任何方法的应用。

animate 上调用的任何方法都会转换为在 mobject 本身应用该方法的动画。

例如,square.set_fill(WHITE) 设置正方形的填充颜色,而 square.animate.set_fill(WHITE) 则将此操作动画化。

通过链式调用,可以在单个动画中一次性放置多个方法。

self.play(my_mobject.animate.shift(RIGHT).rotate(PI))

警告

不建议在一次调用 play() 时为同一个 Mobject 传递多个动画,这很可能无法正常工作。请改为使用方法链式调用,而不是编写如下动画:

self.play(
    my_mobject.animate.shift(RIGHT), my_mobject.animate.rotate(PI)
)

make use of method chaining.

可以传递给 Scene.play() 的关键字参数可以直接在访问 .animate 后传递,如下所示:

self.play(my_mobject.animate(rate_func=linear).shift(RIGHT))

这在为需要不同行为的并行 .animate 调用制作动画时特别有用。

self.play(
    mobject1.animate(run_time=2).rotate(PI),
    mobject2.animate(rate_func=there_and_back).shift(RIGHT),
)

另请参阅

override_animate()

示例

示例:AnimateExample

from manim import *

class AnimateExample(Scene):
    def construct(self):
        s = Square()
        self.play(Create(s))
        self.play(s.animate.shift(RIGHT))
        self.play(s.animate.scale(2))
        self.play(s.animate.rotate(PI / 2))
        self.play(Uncreate(s))
class AnimateExample(Scene):
    def construct(self):
        s = Square()
        self.play(Create(s))
        self.play(s.animate.shift(RIGHT))
        self.play(s.animate.scale(2))
        self.play(s.animate.rotate(PI / 2))
        self.play(Uncreate(s))

示例:AnimateChainExample

from manim import *

class AnimateChainExample(Scene):
    def construct(self):
        s = Square()
        self.play(Create(s))
        self.play(s.animate.shift(RIGHT).scale(2).rotate(PI / 2))
        self.play(Uncreate(s))
class AnimateChainExample(Scene):
    def construct(self):
        s = Square()
        self.play(Create(s))
        self.play(s.animate.shift(RIGHT).scale(2).rotate(PI / 2))
        self.play(Uncreate(s))

示例:AnimateWithArgsExample

from manim import *

class AnimateWithArgsExample(Scene):
    def construct(self):
        s = Square()
        c = Circle()

        VGroup(s, c).arrange(RIGHT, buff=2)
        self.add(s, c)

        self.play(
            s.animate(run_time=2).rotate(PI / 2),
            c.animate(rate_func=there_and_back).shift(RIGHT),
        )
class AnimateWithArgsExample(Scene):
    def construct(self):
        s = Square()
        c = Circle()

        VGroup(s, c).arrange(RIGHT, buff=2)
        self.add(s, c)

        self.play(
            s.animate(run_time=2).rotate(PI / 2),
            c.animate(rate_func=there_and_back).shift(RIGHT),
        )

警告

.animate

将会在 .animate 之前和应用 .animate 之后,在 Mobject 的点之间进行插值。这在尝试沿路径或旋转进行插值时可能会导致意外行为。如果希望动画考虑中间点,请考虑使用带更新器的 ValueTracker

classmethod animation_override_for(animation_class)[source]

返回为此类定义特定动画覆盖的函数。

参数:

animation_class (type[Animation]) – 应返回其覆盖函数的动画类。

返回:

返回覆盖动画的函数,如果未定义此类动画覆盖,则返回 None

返回类型:

Optional[Callable[[Mobject, …], Animation]]

apply_complex_function(function, **kwargs)[source]

将复函数应用于 Mobject。x 和 y Point3D 分别对应于实部和虚部。

示例

示例:ApplyFuncExample

from manim import *

class ApplyFuncExample(Scene):
    def construct(self):
        circ = Circle().scale(1.5)
        circ_ref = circ.copy()
        circ.apply_complex_function(
            lambda x: np.exp(x*1j)
        )
        t = ValueTracker(0)
        circ.add_updater(
            lambda x: x.become(circ_ref.copy().apply_complex_function(
                lambda x: np.exp(x+t.get_value()*1j)
            )).set_color(BLUE)
        )
        self.add(circ_ref)
        self.play(TransformFromCopy(circ_ref, circ))
        self.play(t.animate.set_value(TAU), run_time=3)
class ApplyFuncExample(Scene):
    def construct(self):
        circ = Circle().scale(1.5)
        circ_ref = circ.copy()
        circ.apply_complex_function(
            lambda x: np.exp(x*1j)
        )
        t = ValueTracker(0)
        circ.add_updater(
            lambda x: x.become(circ_ref.copy().apply_complex_function(
                lambda x: np.exp(x+t.get_value()*1j)
            )).set_color(BLUE)
        )
        self.add(circ_ref)
        self.play(TransformFromCopy(circ_ref, circ))
        self.play(t.animate.set_value(TAU), run_time=3)

参数:

function (Callable[[complex], complex])

返回类型:

自身

apply_to_family(func)[source]

递归地将函数应用于 self 和每个具有点的子对象。

参数:

func (Callable[[Mobject], None]) – 应用于每个 mobject 的函数。func 会将相应的(子)mobject 作为参数传递。

返回:

self

返回类型:

Mobject

另请参阅

family_members_with_points()

arrange(direction=array([1., 0., 0.]), buff=0.25, center=True, **kwargs)[source]

在屏幕上将 Mobject 彼此相邻排列。

示例

示例:Example

../_images/Example-1.png
from manim import *

class Example(Scene):
    def construct(self):
        s1 = Square()
        s2 = Square()
        s3 = Square()
        s4 = Square()
        x = VGroup(s1, s2, s3, s4).set_x(0).arrange(buff=1.0)
        self.add(x)
class Example(Scene):
    def construct(self):
        s1 = Square()
        s2 = Square()
        s3 = Square()
        s4 = Square()
        x = VGroup(s1, s2, s3, s4).set_x(0).arrange(buff=1.0)
        self.add(x)

参数:
  • direction (Vector3D)

  • buff (浮点数)

  • center (bool)

返回类型:

自身

arrange_in_grid(rows=None, cols=None, buff=0.25, cell_alignment=array([0., 0., 0.]), row_alignments=None, col_alignments=None, row_heights=None, col_widths=None, flow_order='rd', **kwargs)[source]

在网格中排列子对象。

参数:
  • rows (int | None) – 网格中的行数。

  • cols (int | None) – 网格中的列数。

  • buff (float | tuple[float, float]) – 网格单元格之间的间隙。要指定水平和垂直方向上的不同缓冲区,可以给定一个包含两个值的元组,即 (row, col)

  • cell_alignment (Vector3D) – 每个子对象在其网格单元格中的对齐方式。

  • row_alignments (str | None) – 每行的垂直对齐方式(从上到下)。接受以下字符:"u" - 向上,"c" - 居中,"d" - 向下。

  • col_alignments (str | None) – 每列的水平对齐方式(从左到右)。接受以下字符:"l" - 左对齐,"c" - 居中,"r" - 右对齐。

  • row_heights (Iterable[float | None] | None) – 定义某些行的高度列表(从上到下)。如果列表中包含 None,则相应的行将根据该行中最高的元素自动调整其高度。

  • col_widths (Iterable[float | None] | None) – 定义某些列的宽度列表(从左到右)。如果列表中包含 None,则相应的列将根据该列中最宽的元素自动调整其宽度。

  • flow_order (str) – 子对象填充网格的顺序。可以是以下值之一:“rd”、“dr”、“ld”、“dl”、“ru”、“ur”、“lu”、“ul”。(“rd” -> 先向右填充,然后向下填充)

返回:

self

返回类型:

Mobject

抛出:
  • ValueError – 如果 rowscols 太小,无法容纳所有子对象。

  • ValueError – 如果 colscol_alignmentscol_widths,或者 rowsrow_alignmentsrow_heights 的大小不匹配。

注意

如果仅隐式设置了 colsrows 中的一个,则另一个将选择足够大以容纳所有子对象。如果两者都未设置,则它们将选择大致相同,倾向于 cols > rows(仅仅因为视频通常比其高)。

如果同时定义了 cell_alignmentrow_alignments / col_alignments,则后者具有更高的优先级。

示例

示例:ExampleBoxes

../_images/ExampleBoxes-1.png
from manim import *

class ExampleBoxes(Scene):
    def construct(self):
        boxes=VGroup(*[Square() for s in range(0,6)])
        boxes.arrange_in_grid(rows=2, buff=0.1)
        self.add(boxes)
class ExampleBoxes(Scene):
    def construct(self):
        boxes=VGroup(*[Square() for s in range(0,6)])
        boxes.arrange_in_grid(rows=2, buff=0.1)
        self.add(boxes)

示例:ArrangeInGrid

../_images/ArrangeInGrid-1.png
from manim import *

class ArrangeInGrid(Scene):
    def construct(self):
        boxes = VGroup(*[
            Rectangle(WHITE, 0.5, 0.5).add(Text(str(i+1)).scale(0.5))
            for i in range(24)
        ])
        self.add(boxes)

        boxes.arrange_in_grid(
            buff=(0.25,0.5),
            col_alignments="lccccr",
            row_alignments="uccd",
            col_widths=[1, *[None]*4, 1],
            row_heights=[1, None, None, 1],
            flow_order="dr"
        )
class ArrangeInGrid(Scene):
    def construct(self):
        boxes = VGroup(*[
            Rectangle(WHITE, 0.5, 0.5).add(Text(str(i+1)).scale(0.5))
            for i in range(24)
        ])
        self.add(boxes)

        boxes.arrange_in_grid(
            buff=(0.25,0.5),
            col_alignments="lccccr",
            row_alignments="uccd",
            col_widths=[1, *[None]*4, 1],
            row_heights=[1, None, None, 1],
            flow_order="dr"
        )

arrange_submobjects(*args, **kwargs)[source]

用小缓冲区排列 submobjects 的位置。

示例

示例:ArrangeSumobjectsExample

../_images/ArrangeSumobjectsExample-1.png
from manim import *

class ArrangeSumobjectsExample(Scene):
    def construct(self):
        s= VGroup(*[Dot().shift(i*0.1*RIGHT*np.random.uniform(-1,1)+UP*np.random.uniform(-1,1)) for i in range(0,15)])
        s.shift(UP).set_color(BLUE)
        s2= s.copy().set_color(RED)
        s2.arrange_submobjects()
        s2.shift(DOWN)
        self.add(s,s2)
class ArrangeSumobjectsExample(Scene):
    def construct(self):
        s= VGroup(*[Dot().shift(i*0.1*RIGHT*np.random.uniform(-1,1)+UP*np.random.uniform(-1,1)) for i in range(0,15)])
        s.shift(UP).set_color(BLUE)
        s2= s.copy().set_color(RED)
        s2.arrange_submobjects()
        s2.shift(DOWN)
        self.add(s,s2)

返回类型:

自身

become(mobject, match_height=False, match_width=False, match_depth=False, match_center=False, stretch=False)[source]

编辑点、颜色和子对象,使其与另一个 Mobject 相同

注意

如果 match_height 和 match_width 都为 True,则转换后的 Mobject 将首先匹配高度,然后匹配宽度。

参数:
  • match_height (bool) – 是否保留原始 Mobject 的高度。

  • match_width (bool) – 是否保留原始 Mobject 的宽度。

  • match_depth (bool) – 是否保留原始 Mobject 的深度。

  • match_center (bool) – 是否保留原始 Mobject 的中心。

  • stretch (bool) – 是否拉伸目标 mobject 以匹配原始 Mobject 的比例。

  • mobject (Mobject)

返回类型:

自身

示例

示例:BecomeScene

from manim import *

class BecomeScene(Scene):
    def construct(self):
        circ = Circle(fill_color=RED, fill_opacity=0.8)
        square = Square(fill_color=BLUE, fill_opacity=0.2)
        self.add(circ)
        self.wait(0.5)
        circ.become(square)
        self.wait(0.5)
class BecomeScene(Scene):
    def construct(self):
        circ = Circle(fill_color=RED, fill_opacity=0.8)
        square = Square(fill_color=BLUE, fill_opacity=0.2)
        self.add(circ)
        self.wait(0.5)
        circ.become(square)
        self.wait(0.5)

以下示例说明了在使用 match_...stretch 参数时 mobject 测量值如何变化。我们从一个高 2 单位、宽 4 单位的矩形开始,我们想将其变成一个半径为 3 的圆形。

>>> from manim import Rectangle, Circle
>>> import numpy as np
>>> rect = Rectangle(height=2, width=4)
>>> circ = Circle(radius=3)

stretch=True 时,目标圆被变形以匹配矩形的比例,导致目标 mobject 成为一个高 2 宽 4 的椭圆。我们可以检查所得点是否满足椭圆方程 \(x^2/a^2 + y^2/b^2 = 1\),其中 \(a = 4/2\)\(b = 2/2\) 是半轴。

>>> result = rect.copy().become(circ, stretch=True)
>>> result.height, result.width
(np.float64(2.0), np.float64(4.0))
>>> ellipse_points = np.array(result.get_anchors())
>>> ellipse_eq = np.sum(ellipse_points**2 * [1/4, 1, 0], axis=1)
>>> np.allclose(ellipse_eq, 1)
True

match_height=Truematch_width=True 时,圆形会按比例缩放,以便分别保留矩形的高度或宽度。所得 mobject 的点满足相应半径 \(r\) 的圆方程 \(x^2 + y^2 = r^2\)

>>> result = rect.copy().become(circ, match_height=True)
>>> result.height, result.width
(np.float64(2.0), np.float64(2.0))
>>> circle_points = np.array(result.get_anchors())
>>> circle_eq = np.sum(circle_points**2, axis=1)
>>> np.allclose(circle_eq, 1)
True
>>> result = rect.copy().become(circ, match_width=True)
>>> result.height, result.width
(np.float64(4.0), np.float64(4.0))
>>> circle_points = np.array(result.get_anchors())
>>> circle_eq = np.sum(circle_points**2, axis=1)
>>> np.allclose(circle_eq, 2**2)
True

match_center=True 时,所得 mobject 会被移动,使其中心与原始 mobject 的中心相同。

>>> rect = rect.shift(np.array([0, 1, 0]))
>>> np.allclose(rect.get_center(), circ.get_center())
False
>>> result = rect.copy().become(circ, match_center=True)
>>> np.allclose(rect.get_center(), result.get_center())
True
center()[source]

将 mobject 的中心移动到场景中心。

返回:

居中的 mobject。

返回类型:

Mobject

clear_updaters(recursive=True)[source]

移除所有更新器。

参数:

recursive (bool) – 是否递归地在所有子对象上调用 clear_updaters

返回:

self

返回类型:

Mobject

copy()[source]

创建并返回 Mobject 的完全相同的副本,包括所有 submobjects

返回:

复制品。

返回类型:

Mobject

注意

克隆对象在场景中初始不可见,即使原始对象可见。

property depth: float

mobject 的深度。

返回类型:

浮点数

另请参阅

length_over_dim()

flip(axis=array([0., 1., 0.]), **kwargs)[source]

围绕其中心翻转/镜像 mobject。

示例

示例: FlipExample

../_images/FlipExample-1.png
from manim import *

class FlipExample(Scene):
    def construct(self):
        s= Line(LEFT, RIGHT+UP).shift(4*LEFT)
        self.add(s)
        s2= s.copy().flip()
        self.add(s2)
class FlipExample(Scene):
    def construct(self):
        s= Line(LEFT, RIGHT+UP).shift(4*LEFT)
        self.add(s)
        s2= s.copy().flip()
        self.add(s2)

参数:

axis (Vector3D)

返回类型:

自身

generate_points()[source]

初始化 points,从而初始化形状。

在创建时调用。这是一个空方法,可由子类实现。

返回类型:

对象

get_all_points()[source]

返回此 mobject 和所有子对象的所有点。

可能包含重复项;顺序是子对象深度优先(先序)遍历的顺序。

返回类型:

Point3D_Array

get_bottom()[source]

获取包围 Mobject 的框的底部 Point3D。

返回类型:

Point3D

get_center()[source]

获取中心 Point3D。

返回类型:

Point3D

get_color()[source]

返回 Mobject 的颜色。

示例

>>> from manim import Square, RED
>>> Square(color=RED).get_color() == RED
True
返回类型:

Manim颜色

get_coord(dim, direction=array([0., 0., 0.]))[source]

旨在泛化 get_xget_yget_z

参数:
get_corner(direction)[source]

获取特定方向的角点 Point3D。

参数:

direction (Vector3D)

返回类型:

Point3D

get_critical_point(direction)[source]

想象一个边界框包围着 Mobject。这样的边界框有9个“关键点”:4个角点,4个边中心点,以及中心点。此方法沿着给定方向返回其中一个点。

sample = Arc(start_angle=PI / 7, angle=PI / 5)

# These are all equivalent
max_y_1 = sample.get_top()[1]
max_y_2 = sample.get_critical_point(UP)[1]
max_y_3 = sample.get_extremum_along_dim(dim=1, key=1)
参数:

direction (Vector3D)

返回类型:

Point3D

get_edge_center(direction)[source]

获取特定方向的边缘 Point3D。

参数:

direction (Vector3D)

返回类型:

Point3D

get_end()[source]

返回包围 Mobject 的笔划的结束点。

返回类型:

Point3D

get_left()[source]

获取包围 Mobject 的框的左侧 Point3D。

返回类型:

Point3D

get_merged_array(array_attr)[source]

返回此 mobject 和所有子对象中给定属性的所有值。

可能包含重复项;顺序是子对象深度优先(先序)遍历的顺序。

参数:

array_attr (str)

返回类型:

ndarray

get_midpoint()[source]

获取形成 Mobject 路径中点的 Point3D。

示例

示例: AngleMidPoint

../_images/AngleMidPoint-1.png
from manim import *

class AngleMidPoint(Scene):
    def construct(self):
        line1 = Line(ORIGIN, 2*RIGHT)
        line2 = Line(ORIGIN, 2*RIGHT).rotate_about_origin(80*DEGREES)

        a = Angle(line1, line2, radius=1.5, other_angle=False)
        d = Dot(a.get_midpoint()).set_color(RED)

        self.add(line1, line2, a, d)
        self.wait()
class AngleMidPoint(Scene):
    def construct(self):
        line1 = Line(ORIGIN, 2*RIGHT)
        line2 = Line(ORIGIN, 2*RIGHT).rotate_about_origin(80*DEGREES)

        a = Angle(line1, line2, radius=1.5, other_angle=False)
        d = Dot(a.get_midpoint()).set_color(RED)

        self.add(line1, line2, a, d)
        self.wait()

返回类型:

Point3D

static get_mobject_type_class()[source]

返回此 mobject 类型的基类。

返回类型:

type[Mobject]

get_nadir()[source]

获取包围 3D Mobject 的框的最低点(与顶点相对)Point3D。

返回类型:

Point3D

get_point_mobject(center=None)[source]

可被转换成或从自身转换出的最简单的 Mobject。它应该是适当类型的点。

get_right()[source]

获取包围 Mobject 的框的右侧 Point3D。

返回类型:

Point3D

get_start()[source]

返回包围 Mobject 的笔划的起始点。

返回类型:

Point3D

get_start_and_end()[source]

将笔划的起始点和结束点作为 tuple 返回。

返回类型:

tuple[Point3D, Point3D]

get_time_based_updaters()[source]

返回所有使用 dt 参数的更新器。

更新器使用此参数作为时间差的输入。

返回:

基于时间的更新器列表。

返回类型:

List[Callable]

get_top()[source]

获取包围 Mobject 的框的顶部 Point3D。

返回类型:

Point3D

get_updaters()[source]

返回所有更新器。

返回:

更新器列表。

返回类型:

List[Callable]

get_x(direction=array([0., 0., 0.]))[source]

Mobject 中心的 x Point3D 作为 float 返回。

参数:

direction (Vector3D)

返回类型:

浮点数

get_y(direction=array([0., 0., 0.]))[source]

Mobject 中心的 y Point3D 作为 float 返回。

参数:

direction (Vector3D)

返回类型:

浮点数

get_z(direction=array([0., 0., 0.]))[source]

Mobject 中心的 z Point3D 作为 float 返回。

参数:

direction (Vector3D)

返回类型:

浮点数

get_zenith()[source]

获取包围 3D Mobject 的框的顶点 Point3D。

返回类型:

Point3D

has_no_points()[source]

检查 Mobject 是否不包含点。

返回类型:

bool

has_points()[source]

检查 Mobject 是否包含点。

返回类型:

bool

has_time_based_updater()[source]

测试 self 是否有基于时间的更新器。

返回:

如果至少有一个更新器使用了 `dt` 参数,则为 `True`,否则为 `False`。

返回类型:

bool

property height: float

mobject 的高度。

返回类型:

浮点数

示例

示例: HeightExample

from manim import *

class HeightExample(Scene):
    def construct(self):
        decimal = DecimalNumber().to_edge(UP)
        rect = Rectangle(color=BLUE)
        rect_copy = rect.copy().set_stroke(GRAY, opacity=0.5)

        decimal.add_updater(lambda d: d.set_value(rect.height))

        self.add(rect_copy, rect, decimal)
        self.play(rect.animate.set(height=5))
        self.wait()
class HeightExample(Scene):
    def construct(self):
        decimal = DecimalNumber().to_edge(UP)
        rect = Rectangle(color=BLUE)
        rect_copy = rect.copy().set_stroke(GRAY, opacity=0.5)

        decimal.add_updater(lambda d: d.set_value(rect.height))

        self.add(rect_copy, rect, decimal)
        self.play(rect.animate.set(height=5))
        self.wait()

另请参阅

length_over_dim()

init_colors()[source]

初始化颜色。

在创建时调用。这是一个空方法,可由子类实现。

返回类型:

对象

insert(index, mobject)[source]

将 mobject 插入到 self.submobjects 中的特定位置。

实际上只是调用 `self.submobjects.insert(index, mobject)`,其中 `self.submobjects` 是一个列表。

高度改编自 `Mobject.add`。

参数:
  • index (int) – 插入的索引。

  • mobject (Mobject) – 要插入的 mobject 对象。

返回类型:

interpolate(mobject1, mobject2, alpha, path_func=<function interpolate>)[source]

将此 Mobject 变为 mobject1mobject2 之间的插值。

示例

示例: DotInterpolation

../_images/DotInterpolation-1.png
from manim import *

class DotInterpolation(Scene):
    def construct(self):
        dotR = Dot(color=DARK_GREY)
        dotR.shift(2 * RIGHT)
        dotL = Dot(color=WHITE)
        dotL.shift(2 * LEFT)

        dotMiddle = VMobject().interpolate(dotL, dotR, alpha=0.3)

        self.add(dotL, dotR, dotMiddle)
class DotInterpolation(Scene):
    def construct(self):
        dotR = Dot(color=DARK_GREY)
        dotR.shift(2 * RIGHT)
        dotL = Dot(color=WHITE)
        dotL.shift(2 * LEFT)

        dotMiddle = VMobject().interpolate(dotL, dotR, alpha=0.3)

        self.add(dotL, dotR, dotMiddle)

参数:
返回类型:

自身

invert(recursive=False)[source]

反转 submobjects 列表。

参数:

recursive (bool) – 如果为 `True`,则此 mobject 族的所有子对象列表都将被反转。

返回类型:

示例

示例: InvertSumobjectsExample

from manim import *

class InvertSumobjectsExample(Scene):
    def construct(self):
        s = VGroup(*[Dot().shift(i*0.1*RIGHT) for i in range(-20,20)])
        s2 = s.copy()
        s2.invert()
        s2.shift(DOWN)
        self.play(Write(s), Write(s2))
class InvertSumobjectsExample(Scene):
    def construct(self):
        s = VGroup(*[Dot().shift(i*0.1*RIGHT) for i in range(-20,20)])
        s2 = s.copy()
        s2.invert()
        s2.shift(DOWN)
        self.play(Write(s), Write(s2))

length_over_dim(dim)[source]

测量 Mobject 在特定方向上的长度。

参数:

dim (int)

返回类型:

浮点数

match_color(mobject)[source]

使颜色与另一个 Mobject 的颜色匹配。

参数:

mobject (Mobject)

返回类型:

自身

match_coord(mobject, dim, direction=array([0., 0., 0.]))[source]

使 Point3D 与另一个 Mobject 的 Point3D 匹配。

参数:
返回类型:

自身

match_depth(mobject, **kwargs)[source]

使深度与另一个 Mobject 的深度匹配。

参数:

mobject (Mobject)

返回类型:

自身

match_dim_size(mobject, dim, **kwargs)[source]

使指定维度与另一个 Mobject 的维度匹配。

参数:
返回类型:

自身

match_height(mobject, **kwargs)[source]

使高度与另一个 Mobject 的高度匹配。

参数:

mobject (Mobject)

返回类型:

自身

match_points(mobject, copy_submobjects=True)[source]

编辑点、位置和子对象,使其与另一个 Mobject 相同,同时保持样式不变。

示例

示例: MatchPointsScene

from manim import *

class MatchPointsScene(Scene):
    def construct(self):
        circ = Circle(fill_color=RED, fill_opacity=0.8)
        square = Square(fill_color=BLUE, fill_opacity=0.2)
        self.add(circ)
        self.wait(0.5)
        self.play(circ.animate.match_points(square))
        self.wait(0.5)
class MatchPointsScene(Scene):
    def construct(self):
        circ = Circle(fill_color=RED, fill_opacity=0.8)
        square = Square(fill_color=BLUE, fill_opacity=0.2)
        self.add(circ)
        self.wait(0.5)
        self.play(circ.animate.match_points(square))
        self.wait(0.5)

参数:
  • mobject (Mobject)

  • copy_submobjects (bool)

返回类型:

自身

match_updaters(mobject)[source]

匹配给定 mobject 的更新器。

参数:

mobject (Mobject) – 其更新器将匹配的 mobject。

返回:

self

返回类型:

Mobject

注意

子对象的所有更新器都将被移除,但只会匹配给定 mobject 的更新器,而非其子对象的更新器。

match_width(mobject, **kwargs)[source]

使宽度与另一个 Mobject 的宽度匹配。

参数:

mobject (Mobject)

返回类型:

自身

match_x(mobject, direction=array([0., 0., 0.]))[source]

将 x 坐标与另一个 Mobject 的 x 坐标匹配。

参数:

mobject (Mobject)

返回类型:

自身

match_y(mobject, direction=array([0., 0., 0.]))[source]

将 y 坐标与另一个 Mobject 的 x 坐标匹配。

参数:

mobject (Mobject)

返回类型:

自身

match_z(mobject, direction=array([0., 0., 0.]))[source]

将 z 坐标与另一个 Mobject 的 x 坐标匹配。

参数:

mobject (Mobject)

返回类型:

自身

move_to(point_or_mobject, aligned_edge=array([0., 0., 0.]), coor_mask=array([1, 1, 1]))[source]

Mobject 的中心移动到特定 Point3D。

参数:
返回类型:

自身

next_to(mobject_or_point, direction=array([1., 0., 0.]), buff=0.25, aligned_edge=array([0., 0., 0.]), submobject_to_align=None, index_of_submobject_to_align=None, coor_mask=array([1, 1, 1]))[source]

将此 Mobject 移至另一个 Mobject 或 Point3D 旁边。

示例

示例: GeometricShapes

../_images/GeometricShapes-1.png
from manim import *

class GeometricShapes(Scene):
    def construct(self):
        d = Dot()
        c = Circle()
        s = Square()
        t = Triangle()
        d.next_to(c, RIGHT)
        s.next_to(c, LEFT)
        t.next_to(c, DOWN)
        self.add(d, c, s, t)
class GeometricShapes(Scene):
    def construct(self):
        d = Dot()
        c = Circle()
        s = Square()
        t = Triangle()
        d.next_to(c, RIGHT)
        s.next_to(c, LEFT)
        t.next_to(c, DOWN)
        self.add(d, c, s, t)

参数:
返回类型:

自身

null_point_align(mobject)[source]

如果一个有点的 Mobject 与一个没有点的 Mobject 对齐,则将两者都视为组,并将有点的那个推入其自身的子对象列表。

返回:

self

返回类型:

Mobject

参数:

mobject (Mobject)

reduce_across_dimension(reduce_func, dim)[source]

在此 mobject 和子对象的所有点中,查找某个维度的最小值或最大值。

参数:
  • reduce_func (Callable)

  • dim (int)

remove(*mobjects)[source]

移除 submobjects

如果存在,mobjects 将从 submobjects 中移除。

mobject 的子类可以实现 `-` 和 `-=` 魔法方法。

参数:

mobjects (Mobject) – 要移除的 mobjects。

返回:

self

返回类型:

Mobject

另请参阅

add()

remove_updater(update_function)[source]

移除更新器。

如果同一个更新器被多次应用,则每个实例都将被移除。

参数:

update_function (Updater) – 要移除的更新函数。

返回:

self

返回类型:

Mobject

repeat(count)[source]

这可以使过渡动画更流畅。

参数:

count (int)

返回类型:

自身

reset_points()[source]

points 设置为空数组。

返回类型:

restore()[source]

恢复先前使用 save_state() 保存的状态。

返回类型:

自身

resume_updating(recursive=True)[source]

启用来自更新器和动画的更新。

参数:

recursive (bool) – 是否递归地为所有子对象启用更新。

返回:

self

返回类型:

Mobject

rotate(angle, axis=array([0., 0., 1.]), about_point=None, **kwargs)[source]

围绕某个点旋转 Mobject

参数:
返回类型:

自身

rotate_about_origin(angle, axis=array([0., 0., 1.]), axes=[])[source]

围绕原点([0,0,0])旋转 Mobject

参数:
返回类型:

自身

save_image(name=None)[source]

将其图像以其位置保存到 PNG 文件中。

参数:

name (str | None)

返回类型:

save_state()[source]

保存当前状态(位置、颜色和大小)。可以通过 restore() 恢复。

返回类型:

自身

scale(scale_factor, **kwargs)[source]

按比例因子缩放大小。

默认行为是围绕 mobject 的中心进行缩放。

参数:
  • 缩放因子 (float) – 缩放因子 \(\alpha\)。如果 \(0 < |\alpha| < 1\),mobject 将缩小;如果 \(|\alpha| > 1\),它将增大。此外,如果 \(\alpha < 0\),mobject 也会被翻转。

  • kwargs – 传递给 apply_points_function_about_point() 的其他关键字参数。

返回:

self

返回类型:

Mobject

示例

示例: MobjectScaleExample

../_images/MobjectScaleExample-1.png
from manim import *

class MobjectScaleExample(Scene):
    def construct(self):
        f1 = Text("F")
        f2 = Text("F").scale(2)
        f3 = Text("F").scale(0.5)
        f4 = Text("F").scale(-1)

        vgroup = VGroup(f1, f2, f3, f4).arrange(6 * RIGHT)
        self.add(vgroup)
class MobjectScaleExample(Scene):
    def construct(self):
        f1 = Text("F")
        f2 = Text("F").scale(2)
        f3 = Text("F").scale(0.5)
        f4 = Text("F").scale(-1)

        vgroup = VGroup(f1, f2, f3, f4).arrange(6 * RIGHT)
        self.add(vgroup)

另请参阅

move_to()

scale_to_fit_depth(depth, **kwargs)[source]

缩放 Mobject 以适应某个深度,同时保持宽度/高度比例。

参数:

深度 (float)

返回类型:

自身

scale_to_fit_height(height, **kwargs)[source]

缩放 Mobject 以适应某个高度,同时保持宽度/深度比例。

返回:

self

返回类型:

Mobject

参数:

高度 (浮点数)

示例

>>> from manim import *
>>> sq = Square()
>>> sq.width
np.float64(2.0)
>>> sq.scale_to_fit_height(5)
Square
>>> sq.height
np.float64(5.0)
>>> sq.width
np.float64(5.0)
scale_to_fit_width(width, **kwargs)[source]

缩放 Mobject 以适应某个宽度,同时保持高度/深度比例。

返回:

self

返回类型:

Mobject

参数:

宽度 (浮点数)

示例

>>> from manim import *
>>> sq = Square()
>>> sq.height
np.float64(2.0)
>>> sq.scale_to_fit_width(5)
Square
>>> sq.width
np.float64(5.0)
>>> sq.height
np.float64(5.0)
set(**kwargs)[source]

设置属性。

即 `my_mobject.set(foo=1)` 会应用 `my_mobject.foo = 1`。

这是一个方便的功能,可与 animate 一起使用,以动画方式设置属性。

除了此方法之外,还有一个兼容层,允许 `get_*` 和 `set_*` 方法获取和设置通用属性。例如

>>> mob = Mobject()
>>> mob.set_foo(0)
Mobject
>>> mob.get_foo()
0
>>> mob.foo
0

此兼容层不会干扰任何显式定义的 `get_*` 或 `set_*` 方法。

警告

此兼容层是为了向后兼容,并且不保证会一直存在。在适用的情况下,请优先正常获取/设置属性或使用 set() 方法。

参数:

**kwargs – 要设置的属性及其相应的值。

返回:

self

返回类型:

Mobject

示例

>>> mob = Mobject()
>>> mob.set(foo=0)
Mobject
>>> mob.foo
0
set_color(color=ManimColor('#FFFF00'), family=True)[source]

条件是一个函数,它接受一个参数 (x, y, z)。这里它只是递归地作用于子对象,但在子类中,这应该根据颜色的内部工作原理进一步实现。

参数:
返回类型:

自身

set_color_by_gradient(*colors)[source]
参数:
  • 颜色 (ParsableManimColor) – 用于渐变的颜色。用法例如 `set_color_by_gradient(RED, BLUE, GREEN)`。

  • ManimColor.parse(color) (self.color =)

  • self (return)

返回类型:

自身

classmethod set_default(**kwargs)

设置关键字参数的默认值。

如果调用此方法时未附带任何额外关键字参数,则此类的初始化方法的原始默认值将被恢复。

参数:

kwargs – 传递任何关键字参数都将更新此类的初始化函数的关键字参数的默认值。

返回类型:

示例

>>> from manim import Square, GREEN
>>> Square.set_default(color=GREEN, fill_opacity=0.25)
>>> s = Square(); s.color, s.fill_opacity
(ManimColor('#83C167'), 0.25)
>>> Square.set_default()
>>> s = Square(); s.color, s.fill_opacity
(ManimColor('#FFFFFF'), 0.0)

示例: ChangedDefaultTextcolor

../_images/ChangedDefaultTextcolor-1.png
from manim import *

config.background_color = WHITE

class ChangedDefaultTextcolor(Scene):
    def construct(self):
        Text.set_default(color=BLACK)
        self.add(Text("Changing default values is easy!"))

        # we revert the colour back to the default to prevent a bug in the docs.
        Text.set_default(color=WHITE)
config.background_color = WHITE

class ChangedDefaultTextcolor(Scene):
    def construct(self):
        Text.set_default(color=BLACK)
        self.add(Text("Changing default values is easy!"))

        # we revert the colour back to the default to prevent a bug in the docs.
        Text.set_default(color=WHITE)

set_x(x, direction=array([0., 0., 0.]))[source]

设置 Mobject 中心的 x 值(intfloat)。

参数:
返回类型:

自身

set_y(y, direction=array([0., 0., 0.]))[source]

设置 Mobject 中心的 y 值(intfloat)。

参数:
返回类型:

自身

set_z(z, direction=array([0., 0., 0.]))[source]

设置 Mobject 中心的 z 值(intfloat)。

参数:
返回类型:

自身

set_z_index(z_index_value, family=True)[source]

Mobject 的 `z_index` 设置为 `z_index_value` 中指定的值。

参数:
  • z_index_value (float) – 设置的 `z_index` 新值。

  • family (bool) – 如果为 `True`,则所有子对象的 `z_index` 值也将被设置。

返回:

`z_index` 设置后的 Mobject 对象本身。用于链式调用。(返回 `self`。)

返回类型:

Mobject

示例

示例: SetZIndex

../_images/SetZIndex-1.png
from manim import *

class SetZIndex(Scene):
    def construct(self):
        text = Text('z_index = 3', color = PURE_RED).shift(UP).set_z_index(3)
        square = Square(2, fill_opacity=1).set_z_index(2)
        tex = Tex(r'zIndex = 1', color = PURE_BLUE).shift(DOWN).set_z_index(1)
        circle = Circle(radius = 1.7, color = GREEN, fill_opacity = 1) # z_index = 0

        # Displaying order is now defined by z_index values
        self.add(text)
        self.add(square)
        self.add(tex)
        self.add(circle)
class SetZIndex(Scene):
    def construct(self):
        text = Text('z_index = 3', color = PURE_RED).shift(UP).set_z_index(3)
        square = Square(2, fill_opacity=1).set_z_index(2)
        tex = Tex(r'zIndex = 1', color = PURE_BLUE).shift(DOWN).set_z_index(1)
        circle = Circle(radius = 1.7, color = GREEN, fill_opacity = 1) # z_index = 0

        # Displaying order is now defined by z_index values
        self.add(text)
        self.add(square)
        self.add(tex)
        self.add(circle)

set_z_index_by_z_Point3D()[source]

Mobject 的 z Point3D 设置为 `z_index` 的值。

返回:

`z_index` 设置后的 Mobject 对象本身。(返回 `self`。)

返回类型:

Mobject

shift(*vectors)[source]

按给定向量平移。

参数:

向量 (Vector3D) – 要偏移的向量。如果给出多个向量,它们将相加。

返回:

self

返回类型:

Mobject

另请参阅

move_to()

shuffle(recursive=False)[source]

打乱 submobjects 列表。

参数:

recursive (bool)

返回类型:

shuffle_submobjects(*args, **kwargs)[source]

打乱 submobjects 的顺序。

示例

示例: ShuffleSubmobjectsExample

from manim import *

class ShuffleSubmobjectsExample(Scene):
    def construct(self):
        s= VGroup(*[Dot().shift(i*0.1*RIGHT) for i in range(-20,20)])
        s2= s.copy()
        s2.shuffle_submobjects()
        s2.shift(DOWN)
        self.play(Write(s), Write(s2))
class ShuffleSubmobjectsExample(Scene):
    def construct(self):
        s= VGroup(*[Dot().shift(i*0.1*RIGHT) for i in range(-20,20)])
        s2= s.copy()
        s2.shuffle_submobjects()
        s2.shift(DOWN)
        self.play(Write(s), Write(s2))

返回类型:

sort(point_to_num_func=<function Mobject.<lambda>>, submob_func=None)[source]

根据 submob_func 定义的函数对 submobjects 列表进行排序。

参数:
  • point_to_num_func (Callable[[Point3DLike], float])

  • submob_func (Callable[[Mobject], Any] | None)

返回类型:

自身

sort_submobjects(*args, **kwargs)[source]

排序 submobjects

返回类型:

自身

stretch_to_fit_depth(depth, **kwargs)[source]

拉伸 Mobject 以适应某个深度,不保持宽度/高度比例。

参数:

深度 (float)

返回类型:

自身

stretch_to_fit_height(height, **kwargs)[source]

拉伸 Mobject 以适应某个高度,不保持宽度/深度比例。

返回:

self

返回类型:

Mobject

参数:

高度 (浮点数)

示例

>>> from manim import *
>>> sq = Square()
>>> sq.width
np.float64(2.0)
>>> sq.stretch_to_fit_height(5)
Square
>>> sq.height
np.float64(5.0)
>>> sq.width
np.float64(2.0)
stretch_to_fit_width(width, **kwargs)[source]

拉伸 Mobject 以适应某个宽度,不保持高度/深度比例。

返回:

self

返回类型:

Mobject

参数:

宽度 (浮点数)

示例

>>> from manim import *
>>> sq = Square()
>>> sq.height
np.float64(2.0)
>>> sq.stretch_to_fit_width(5)
Square
>>> sq.width
np.float64(5.0)
>>> sq.height
np.float64(2.0)
suspend_updating(recursive=True)[source]

禁用来自更新器和动画的更新。

参数:

recursive (bool) – 是否递归地暂停所有子对象的更新。

返回:

self

返回类型:

Mobject

to_corner(corner=array([-1., -1., 0.]), buff=0.5)[source]

将此 Mobject 移动到屏幕的给定角点。

返回:

新定位的 mobject。

返回类型:

Mobject

参数:

示例

示例: ToCornerExample

../_images/ToCornerExample-1.png
from manim import *

class ToCornerExample(Scene):
    def construct(self):
        c = Circle()
        c.to_corner(UR)
        t = Tex("To the corner!")
        t2 = MathTex("x^3").shift(DOWN)
        self.add(c,t,t2)
        t.to_corner(DL, buff=0)
        t2.to_corner(UL, buff=1.5)
class ToCornerExample(Scene):
    def construct(self):
        c = Circle()
        c.to_corner(UR)
        t = Tex("To the corner!")
        t2 = MathTex("x^3").shift(DOWN)
        self.add(c,t,t2)
        t.to_corner(DL, buff=0)
        t2.to_corner(UL, buff=1.5)

to_edge(edge=array([-1., 0., 0.]), buff=0.5)[source]

将此 Mobject 移动到屏幕的给定边缘,而不影响其在其他维度上的位置。

返回:

新定位的 mobject。

返回类型:

Mobject

参数:

示例

示例: ToEdgeExample

../_images/ToEdgeExample-1.png
from manim import *

class ToEdgeExample(Scene):
    def construct(self):
        tex_top = Tex("I am at the top!")
        tex_top.to_edge(UP)
        tex_side = Tex("I am moving to the side!")
        c = Circle().shift(2*DOWN)
        self.add(tex_top, tex_side, c)
        tex_side.to_edge(LEFT)
        c.to_edge(RIGHT, buff=0)
class ToEdgeExample(Scene):
    def construct(self):
        tex_top = Tex("I am at the top!")
        tex_top.to_edge(UP)
        tex_side = Tex("I am moving to the side!")
        c = Circle().shift(2*DOWN)
        self.add(tex_top, tex_side, c)
        tex_side.to_edge(LEFT)
        c.to_edge(RIGHT, buff=0)

update(dt=0, recursive=True)[source]

应用所有更新器。

如果更新被暂停,则不执行任何操作。

参数:
  • dt (float) – 传递给更新函数的参数 `dt`。通常,这是自上次调用 `update` 以来经过的秒数。

  • recursive (bool) – 是否递归地更新所有子对象。

返回:

self

返回类型:

Mobject

property width: float

mobject 的宽度。

返回类型:

浮点数

示例

示例: WidthExample

from manim import *

class WidthExample(Scene):
    def construct(self):
        decimal = DecimalNumber().to_edge(UP)
        rect = Rectangle(color=BLUE)
        rect_copy = rect.copy().set_stroke(GRAY, opacity=0.5)

        decimal.add_updater(lambda d: d.set_value(rect.width))

        self.add(rect_copy, rect, decimal)
        self.play(rect.animate.set(width=7))
        self.wait()
class WidthExample(Scene):
    def construct(self):
        decimal = DecimalNumber().to_edge(UP)
        rect = Rectangle(color=BLUE)
        rect_copy = rect.copy().set_stroke(GRAY, opacity=0.5)

        decimal.add_updater(lambda d: d.set_value(rect.width))

        self.add(rect_copy, rect, decimal)
        self.play(rect.animate.set(width=7))
        self.wait()

另请参阅

length_over_dim()