Mobject¶
MK做了一个关于常用 Mobject
的方法的视频:
〔manim教程〕第一讲 物体的位置与坐标变换
虽然 manimgl
对一部分物件进行了更新,但大体还能用,有变化的可以看源码进行修改。
Mobject¶
-
class
manimlib.mobject.mobject.
Mobject
(**kwargs)¶ 数学物品(屏幕上的所有物体的超类)
-
add
(*mobjects)¶ 将
mobjects
添加到子物体中
-
add_background_rectangle
(color=None, opacity=0.75, **kwargs)¶ 添加背景矩形
-
add_background_rectangle_to_submobjects
(**kwargs)¶ 给子物件添加背景矩形
-
add_event_listner
(event_type, event_callback)¶ 添加事件侦听
-
add_to_back
(*mobjects)¶ 将
mobjects
添加到子物体前面(覆盖关系在下)
-
add_updater
(update_function, index=None, call_updater=True)¶ 添加
updater
函数
-
align_on_border
(direction, buff=0.5)¶ 以
direction
这个边界对齐
-
align_to
(mobject_or_point, direction=array([0.0, 0.0, 0.0]))¶ 对齐
例子:
mob1.align_to(mob2, UP)
会将mob1
垂直移动,顶部与mob2
的上边缘对齐
-
append_points
(new_points)¶ 添加锚点
-
apply_complex_function
(function, **kwargs)¶ 施加一个复变函数
-
apply_function
(function, **kwargs)¶ 把
function
作用到所有锚点上
-
apply_function_to_position
(function)¶ 给物体所在的位置执行
function
-
apply_function_to_submobject_positions
(function)¶ 给所有子物体所在的位置执行
function
-
apply_matrix
(matrix, **kwargs)¶ 把
matrix
矩阵作用到所有点上
-
apply_points_function
(func, about_point=None, about_edge=array([0.0, 0.0, 0.0]), works_on_bounding_box=False)¶ 以
about_point
为不变基准点,或以about_edge
为不变基准边,对所有点执行func
-
arrange
(direction=array([1.0, 0.0, 0.0]), center=True, **kwargs)¶ 将子物件按照
direction
方向排列
-
arrange_in_grid
(n_rows=None, n_cols=None, buff=None, h_buff=None, v_buff=None, buff_ratio=None, h_buff_ratio=0.5, v_buff_ratio=0.5, aligned_edge=array([0.0, 0.0, 0.0]), fill_rows_first=True)¶ 将子物件按表格方式排列
n_rows
,n_cols
: 行数、列数v_buff
,``h_buff`` : 行距、列距aligned_edge
: 对齐边缘
-
become
(mobject)¶ 重构物件数据并将它变成传入的
mobject
-
center
()¶ 放到画面中心
-
clear_event_listners
(recurse=True)¶ 清空事件侦听
-
clear_points
()¶ 清空物件锚点
-
clear_updaters
(recurse=True)¶ 清空所有的
updater
函数
-
compute_bounding_box
()¶ 计算包围框
-
copy
()¶ 获取物件的拷贝
-
digest_mobject_attrs
()¶ 确保所有对象属性都包含在子对象列表中
-
fade
(darkness=0.5, recurse=True)¶ 变暗
-
fix_in_frame
()¶ 将物件锁定在屏幕上,常用于 3D 场景需要旋转镜头的情况
-
flip
(axis=array([0.0, 1.0, 0.0]), **kwargs)¶ 绕
axis
轴翻转
-
generate_target
(use_deepcopy=False)¶ 通过复制自身作为自己的 target, 生成一个 target 属性
-
get_all_points
()¶ 获取物件所有锚点
-
get_bottom
()¶ 获取下边缘中心
-
get_bounding_box
()¶ 获取物件的矩形包围框(碰撞箱)
包含三个元素,分别为左上,中心,右下
-
get_center
()¶ 获取物件中心坐标
-
get_center_of_mass
()¶ 获取重心
-
get_color
()¶ 获取颜色
-
get_coord
(dim, direction=array([0.0, 0.0, 0.0]))¶ 获取物件在
dim
维度上的坐标
-
get_corner
(direction)¶ 获取某一个角落
-
get_depth
()¶ 获取物件深度(即 z 轴方向的宽度)
-
get_edge_center
(direction)¶ 获取某一边缘的中心
-
get_end
()¶ 获取终止点
-
get_event_listners
()¶ 获取事件侦听
-
get_gloss
()¶ 获取光泽
-
get_grid
(n_rows, n_cols, height=None, **kwargs)¶ 拷贝一份,并将这份拷贝按表格方式排好后返回
-
get_height
()¶ 获取物件高度
-
get_left
()¶ 获取左边缘中心
-
get_nadir
()¶ 获取内边缘中心(这里的内,指垂直于屏幕向内的平面)
-
get_num_points
()¶ 获取锚点数量
-
get_opacity
()¶ 获取透明度
-
get_pieces
(n_pieces)¶ 将物体拆成
n_pieces
个部分,便于部分解决 3D 中透视问题
-
get_points
()¶ 获取物件锚点
-
get_right
()¶ 获取右边缘中心
-
get_shader_data
()¶ 获取 shader 数据
-
get_shader_wrapper
()¶ 获取 shader 包装
-
get_shader_wrapper_list
()¶ 获取 shader 包装列表
-
get_shadow
()¶ 阴影光泽
-
get_start
()¶ 获取起始点
-
get_start_and_end
()¶ 获取起始点和终止点
-
get_top
()¶ 获取上边缘中心
-
get_width
()¶ 获取物件宽度
-
get_x
(direction=array([0.0, 0.0, 0.0]))¶ 获取 x 坐标
-
get_y
(direction=array([0.0, 0.0, 0.0]))¶ 获取 y 坐标
-
get_z
(direction=array([0.0, 0.0, 0.0]))¶ 获取 z 坐标
-
get_zenith
()¶ 获取外边缘中心(这里的外,指垂直于屏幕向外的平面)
-
has_points
()¶ 判断是否有锚点
-
is_off_screen
()¶ 判断是否在画面外
-
is_point_touching
(point, buff=0.25)¶ 判断某一点是否在本物件的包围框范围内
-
length_over_dim
(dim)¶ 在
dim
维度的长度
-
lock_data
(keys)¶ 为了加速一些动画,尤其是 Transform,它可以很方便地确认哪些数据片段不会在动画期间改变, 以便调用插值可以跳过这一点,这样它就不会被不必要地读入 shader_wrapper 对象
-
match_color
(mobject)¶ 将自己的颜色与
mobject
匹配
-
match_depth
(mobject, **kwargs)¶ 将自己的深度与
mobject
匹配(这里的深度指 z 轴方向的宽度)
-
match_height
(mobject, **kwargs)¶ 将自己的高度与
mobject
匹配
-
match_points
(mobject)¶ 将自身锚点与
mobject
的锚点匹配
-
match_updaters
(mobject)¶ 将自己的
updater
函数与mobject
匹配
-
match_width
(mobject, **kwargs)¶ 将自己的宽度与
mobject
匹配
-
match_x
(mobject, direction=array([0.0, 0.0, 0.0]))¶ 移动到
mobject
的 x 轴坐标
-
match_y
(mobject, direction=array([0.0, 0.0, 0.0]))¶ 移动到
mobject
的 y 轴坐标
-
match_z
(mobject, direction=array([0.0, 0.0, 0.0]))¶ 移动到
mobject
的 z 轴坐标
-
move_to
(point_or_mobject, aligned_edge=array([0.0, 0.0, 0.0]), coor_mask=array([1, 1, 1]))¶ 移动到
point_or_mobject
的位置
-
next_to
(mobject_or_point, direction=array([1.0, 0.0, 0.0]), buff=0.25, aligned_edge=array([0.0, 0.0, 0.0]), submobject_to_align=None, index_of_submobject_to_align=None, coor_mask=array([1, 1, 1]))¶ 放到
mobject_or_point
旁边
-
pfp
(alpha)¶ point_from_proportion 的简写
-
point_from_proportion
(alpha)¶ 在整条路径上占比为
alpha
处的点
-
pointwise_become_partial
(mobject, a, b)¶ 生成一个路径百分比从 a 到 b 的物件
-
put_start_and_end_on
(start, end)¶ 把物体点集中的起点和终点通过旋转缩放放在
start
和end
-
refresh_bounding_box
(recurse_down=False, recurse_up=True)¶ 更新包围框
-
remove
(*mobjects)¶ 将
mobjects
从子物体中移除
-
remove_event_listner
(event_type, event_callback)¶ 移除事件侦听
-
remove_updater
(update_function)¶ 移除指定的
updater
函数
-
replace
(mobject, dim_to_match=0, stretch=False)¶ 放到和
mobject
的位置,并且大小相同
-
replace_submobject
(index, new_submob)¶ 用新的子物件代替指定索引处的旧子物件
-
restore
()¶ 恢复为
saved_state
的状态
-
resume_updating
(recurse=True, call_updater=True)¶ 恢复物件更新
-
reverse_points
()¶ 反转锚点
-
rotate
(angle, axis=array([0.0, 0.0, 1.0]), **kwargs)¶ 以
axis
为方向,angle
为角度旋转,kwargs
中可传入about_point
-
rotate_about_origin
(angle, axis=array([0.0, 0.0, 1.0]))¶ 绕原点旋转
angle
弧度
-
save_state
(use_deepcopy=False)¶ 保留状态,即复制一份作为
saved_state
属性
-
scale
(scale_factor, min_scale_factor=1e-08, about_point=None, about_edge=array([0.0, 0.0, 0.0]))¶ 放大 (缩小) 到原来的
scale_factor
倍,kwargs
中可以传入about_point/about_edge
-
set_color
(color, opacity=None, recurse=True)¶ 设置颜色
-
set_color_by_code
(glsl_code)¶ 传入一段
glsl
代码,用这段代码来给物件上色代码中包含以下变量:
vec4 color
vec3 point
vec3 unit_normal
vec3 light_coords
float gloss
float shadow
如果想要学习如何用 glsl 上色,推荐去 https://thebookofshaders/ 和 https://shadertoy.com/ 学习一番`
-
set_color_by_gradient
(*colors)¶ 渐变染色
-
set_color_by_rgb_func
(func, opacity=1, recurse=True)¶ 传入一个函数,这个函数接受一个三维坐标,将物件按照这个函数的方法设置颜色
-
set_color_by_rgba_func
(func, recurse=True)¶ 传入一个函数,这个函数接受一个三维坐标,将物件按照这个函数的方法设置颜色,包含透明度
-
set_color_by_xyz_func
(glsl_snippet, min_value=- 5.0, max_value=5.0, colormap='viridis')¶ 传入一个关于
x, y, z
的字符串表达式,这个表达式应当返回一个 float 值这个方法不是非常智能,因为会把所有匹配到的
x, y, z
都认为是变量, 所以如果有特殊必要的话请查看该方法的源码,进行一些更改,取消字符串的匹配和替换
-
set_coord
(value, dim, direction=array([0.0, 0.0, 0.0]))¶ 移动到
dim
维度的value
位置
-
set_gloss
(gloss, recurse=True)¶ 设置光泽
-
set_opacity
(opacity, recurse=True)¶ 设置透明度
-
set_points
(points)¶ 设置锚点
-
set_rgba_array
(rgba_array, name='rgbas', recurse=False)¶ 将 rgbas 成员变量设置为指定的值
-
set_rgba_array_by_color
(color=None, opacity=None, name='rgbas', recurse=True)¶ 通过颜色设置 rgba_array 成员以染色
-
set_shadow
(shadow, recurse=True)¶ 设置阴影
-
set_submobjects
(submobject_list)¶ 重新设置子物件
-
set_x
(x, direction=array([0.0, 0.0, 0.0]))¶ 将 x 轴坐标设置为 x
-
set_y
(y, direction=array([0.0, 0.0, 0.0]))¶ 将 y 轴坐标设置为 y
-
set_z
(z, direction=array([0.0, 0.0, 0.0]))¶ 将 z 轴坐标设置为 z
-
shift
(vector)¶ 相对移动 vector 向量
-
shift_onto_screen
(**kwargs)¶ 确保在画面中
-
shuffle
(recurse=False)¶ 随机打乱子物件的顺序
-
sort
(point_to_num_func=<function Mobject.<lambda>>, submob_func=None)¶ 对子物件进行排序
-
space_out_submobjects
(factor=1.5, **kwargs)¶ 调整子物件的间距为
factor
倍
-
stretch
(factor, dim, **kwargs)¶ 把
dim
维度伸缩到原来的factor
倍
-
surround
(mobject, dim_to_match=0, stretch=False, buff=0.25)¶ 环绕着 mobject
-
suspend_updating
(recurse=True)¶ 停止物件更新
-
to_corner
(corner=array([- 1.0, - 1.0, 0.0]), buff=0.5)¶ 和
corner
这个角落对齐
-
to_edge
(edge=array([- 1.0, 0.0, 0.0]), buff=0.5)¶ 和
edge
这个边对齐
-
unfix_from_frame
()¶ 将锁定在屏幕上的物件解锁
-
wag
(direction=array([1.0, 0.0, 0.0]), axis=array([0.0, - 1.0, 0.0]), wag_factor=1.0)¶ 沿
axis
轴direction
方向摇摆wag_factor
-
Group¶
-
class
manimlib.mobject.mobject.
Group
(*mobjects, **kwargs)¶ 数学物件组合
传入一系列
mobjects
作为子物件,可以用[]
索引
和Mobject相同,用于存放一些子物体
Point¶
_AnimationBuilder¶
-
class
manimlib.mobject.mobject.
_AnimationBuilder
(mobject)¶ 动画编译器
用于场景类
Scene
的play
中,用法如下:self.play(mob.animate.shift(UP).scale(2).rotate(PI))
该示例中,会使 mob 生成一个 向上移动 2 个单位,放大至 2 倍,旋转 180 度 的目标,并使用类似
MoveToTarget
的方法将它变为目标的样式