边学边做Manim中的动画知识点

边学边做Manim中的动画知识点
老刘博客Manim的动画效果虽然炫酷,但是也有一定的难度,对于新手来说,最好的方法就是多总结,今天给大家汇总一些动画常用的知识点,我自己也不是很懂就是简单的整理,留作日后思考查阅。
1.路径与轨迹
1.1沿任意路径运动使用
1 | MoveAlongPath(mobject, path, suspend_mobject_updating=False) |
让对象沿任意VMobject路径运动,配合rate_func=linear可实现匀速。
要点:路径可以是直线、圆弧、贝塞尔曲线或由函数定义的参数曲线,如 ParametricFunction。
1.2保留运动轨迹使用
1 | TracedPath(mobject.get_center, stroke_width=2, color=YELLOW) |
自动绘制对象中心轨迹,便于观察运动规律。
路径采样与抖动优化:对复杂路径或高曲率区域,适当提高采样点可缓解“抖动”,如
1 | Circle().get_points_defining_boundary(n_samples=100) |
1.3物理与向量场驱动使用
1 | PhaseFlow(deriv_func, mobject, virtual_time, rate_func=linear) |
根据微分方程在相空间生成轨迹,适合模拟 谐振子、摆动、相位流 等连续演化过程。
2.动画组合与时序控制
2.1同时播放
1 | AnimationGroup(\*anims, lag_ratio=0.0, run_time=None) |
并行执行多个动画;通过lag_ratio控制子动画间的相对延迟,如lag_ratio=0.5表示后一个在前一个进行到 50% 时启动。
2.2依次启动带延迟
1 | LaggedStart(\*anims, lag_ratio=0.3, run_time=None) |
按添加顺序启动,动画间有固定延迟,适合依次出现/移动的对象序列。
2.3批量延迟
1 | LaggedStartMap(AnimationClass, mobjects, arg_creator, lag_ratio=0.2, run_time=None) |
对一组对象应用同一动画并依次延迟启动,代码更简洁。
2.4严格顺序
1 | Succession(\*anims, lag_ratio=0.0, run_time=None) |
前一个动画完成后才启动下一个,适合流程化演示。
3.联动与参数驱动
3.1数值驱动:
1 | ValueTracker(value=0, kwargs) |
记录屏幕外的数值,常与 updater 联动更新图形属性例如角度、长度、数值显示等。
3.2添加与移除更新器使用
1 | add_updater(func) |
1 | remove_updater(func) |
1 | clear_updaters() |
管理随帧更新的行为,注意匿名函数难以精确移除,必要时用具名函数或 clear_updaters()。
3.3典型联动范式
1 | ValueTracker |
驱动角度/参数,多个对象,如 Angle、Tex、Mobject,各自添加 updater,在
1 | play(tracker.animate.set_value(...)) |
时自动同步变化。
3.4状态快照
1 | save_state() / restore() |
在某一帧保存对象状态,在 updater 中先恢复再叠加新变换,便于实现“回弹/往返”等效果。
4.变形与替换
4.1弧线式变形
1 | Transform(mob1, mob2, path_arc=90\*DEG) |
在形状/位置变换时沿弧线过渡,视觉更自然;可与颜色/位移动画并行。
4.2整体替换
ReplacementTransform(mob1, mob2)
将源对象在场景中直接替换为目标对象,常用于坐标系与函数曲线的同步切换。
参数连续更新
1 | UpdateFromAlphaFunc(mob, update_func, rate_func=linear, run_time=3) |
依据动画进度 alpha∈[0,1] 连续更新对象,如更新函数曲线与参数数值显示,适合展示参数连续变化过程。
5.实用技巧与常见问题
5.1旋转与朝向:
对象沿路径运动时可用 path_arc 控制整体转向;若需自身旋转,可叠加 rotate 或使用 Rotating(逐帧生成目标,视觉更“顺滑”)。
5.2虚线与样式:
1 | DashedVMobject(circle, dash_length=0.1, dashed_ratio=0.8) |
快速生成虚线轮廓;配合 FadeToColor 做颜色过渡。
5.3组合与分组:
Group(*mobs) 将多个对象打包,便于整体 scale/shift/align;对组内对象统一动画时更高效。
5.4边界与对齐:
1 | get_boundary_point(DOWN) |
1 | get_boundary_point(UP) |
1 | get_boundary_point(LEFT) |
1 | get_boundary_point(RIGHT) |
获取对象在某方向的边界点,辅助精确对齐与标注。
5.5抖动与性能:
路径抖动常由采样不足引起,提升采样点(如 n_samples)或简化路径可改善;复杂场景建议分组播放并控制 run_time 与 lag_ratio
1 | Circle().get_points_defining_boundary(n_samples=100) |





