Skip to content

mobject 数学对象

鹤翔万里 edited this page Mar 19, 2020 · 2 revisions

Mobject,即Mathematical Object,是所有屏幕上出现的物体的父类

子类目录

Mobject

位于文件manimlib/mobject/mobject.py

父类为Container

CONFIG中属性

  • color: 默认颜色(白)
  • name: 指定物体名称,方便调试时使用。若为None则默认为类名
  • dim:维度,默认三维
  • target:目标物体,默认None

方法

  • 初始化

    • __init__(self, **kwargs)
      初始化self.submobjects, self.updaters为空列表
      self.updating_suspended=False,不暂停update
      调用reset_points(),generate_points(),init_colors()方法
    • __str__(self)
      定义为self.name
    • reset_points(self)
      self.points为空
    • init_colors(self)
      留给子类
    • generate_points(self)
      留给子类
  • 基础操作

    • add(self, *mobjects)
      将mobjects添加到submobjects列表后面
    • add_to_back(self, *mobjects)
      将mobjects添加到submobjects列表前面
    • remove(self, *mobjects)
      将mobjects从submobjects列表中删去
    • get_array_attrs(self)
      获取属性(在这里就是points)
    • digest_mobject_attrs(self)
      确保作为mobjects的所有属性都包含在submobjects列表中
    • apply_over_attr_arrays(self, func)
      对所有通过get_array_attrs()获取的属性施加func的作用
  • 显示

    • get_image(self, camera=None)
      通过camera获取图像
    • show(self, camera=None)
      获取图像后显示出来
    • save_image(self, name=None)
      获取图像后保存到VIDEO_DIR文件夹中
    • copy(self)
      复制一份
    • deepcopy(self)
      深度复制
    • generate_target(self, use_deepcopy=False)
      将该物体copy一份作为target
  • 更新

    • update(self, dt=0, recursive=True)
      对当前物体执行updaters列表中的所有updater
      • 如果这个updater有参数dt,则传入dt
      • 如果recursive=True,则对submobject也执行update方法
    • get_time_based_updaters(self)
      获取updaters列表中所有含有参数dt的updater
    • has_time_based_updaters(self)
      如果updaters列表中所有含有参数dt,返回Ture,否则返回False
    • get_updaters(self)
      获取updaters列表
    • get_family_updaters(self)
      获取submobjects中所有updaters
    • add_updater(self, update_function, index=None, call_updater=True)
      • 如果index=None或无index参数,在updaters列表中加入update_function
      • 如果index!=None,在updaters的index位置插入update_function
      • 如果call_updater=True或无call_updater参数,对当前物体执行updaters列表中的所有updater
      • update_function中有无dt参数的区别:
        • self.add(Circle(radius=3).add_updater(update_function=lambda m:m.shift(RIGHT*0.05))).wait(3)
        • self.add(Circle(radius=3).add_updater(update_function=lambda m,dt:m.shift(RIGHT*0.05))).wait(3)
    • remove_updater(self, update_function)
      在updaters列表里移除update_function
    • clear_updaters(self, recursive=True)
      将updaters列表清空
    • match_updaters(self, mobject)
      用参数mobject的updaters列表替换self的updaters列表
      • example:
        cir = Circle(radius=3).add_updater(update_function=lambda m,dt:m.shift(RIGHT*0.05))
        dot = Dot().match_updaters(cir)
        self.add(cir,dot)
        self.wait(3)
    • suspend_updating(self, recursive=True)
      递归赋submobjects的updating_suspended为False
  • 变换

    • apply_to_family(self, func)
      对self所有submobjects应用func方法
    • shift(self, *vectors)
      使当前物体沿vectors移动
    • scale(self, scale_factor, **kwargs):\
      • scale_factor:
        使当前物体大小变为原来的scale_factor倍
      • **kwargs:
        一个包含about_point和about_edge的字典
      • example:
        cir = Circle(radius=1,stroke_width=6)
        self.add(cir)
        self.play(cir.scale,3,{"about_point":LEFT})
    • rotate_about_origin(self, angle, axis=OUT, axes=[])
      使当前物体沿axis轴,ORIGIN点旋转angle度
      • example:
        rectg = Rectangle()
        self.add(rectg)
        self.play(rectg.rotate_about_origin,PI/3)
    • rotate(self, angle, axis=OUT, **kwargs)\
      • angle:旋转角度
      • axis:旋转轴
      • **kwargs:一个包含about_point和about_edge的字典
      • example:
        rectg = Rectangle()
        self.add(rectg)
        self.play(rectg.rotate,PI/3,{"about_point":LEFT*2})
    • flip(self, axis=UP, **kwargs)
      使当前物体沿axis轴翻转,可以在字典中约束about_point和about_edge
      • example:
        trig = RegularPolygon(3).scale(2)
        self.add(trig)
        self.play(trig.flip)
        self.play(trig.flip,{"about_point":RIGHT})
        self.play(trig.flip,{"about_point":RIGHT,"about_edge":RIGHT})
    • stretch(self, factor, dim, **kwargs)
      使当前物体拉伸factor倍
      • example:
        trig = RegularPolygon(3).scale(2)
        self.add(trig)
        self.play(trig.stretch,2,0)#dim=0,长拉伸2倍
        self.play(trig.stretch,2,1)#dim=1,宽拉伸2倍
        self.play(trig.stretch,2,2)#dim=1,高拉伸2倍,二维物体无效