今天先容Manim中用于动画更新的3个类,分别是:
- UpdateFromFunc:根据自定义的函数来动态更新 Mobject 的属性
- UpdateFromAlphaFunc:根据动画的进度来平滑地改变 Mobject 的属性
- MaintainPositionRelativeTo:保持多个 Mobject 之间的相对位置关系
这3个类分别从自定义更新、基于进度的过渡以及相对位置保持这三个告急方面,为 Manim 动画的创作提供有力的资助。
1. 动画概述
1.1. UpdateFromFunc
UpdateFromFunc赋予动画极高的自定义能力。
主要作用是允许用户依据自定义的函数来动态更新 Mobject 的属性。
这一机动性使得它在各种复杂的动画场景中都能发挥作用,无论是模仿物理过程中物体的动态变化,还是实现复杂的交互动画结果,都能通过定义合适的更新函数来实现对 Mobject 的精确控制,从而创造出符合特定需求的动画结果。
它的参数主要有:
参数名称范例阐明mobjectMobject要应用更新函数的对象update_functionfunc定义如何更新 mobject 的状态的函数suspend_mobject_updatingbool用于暂停或规复 mobject 的更新操作1.2. UpdateFromAlphaFunc
UpdateFromAlphaFunc专注于基于动画进度的属性更新,alpha 值代表了动画的完成度,范围从 0 到 1。
使用这个类,用户可以根据动画的进度来平滑地改变 Mobject 的属性,例如淡入淡出、缩放、旋转等过渡结果。
这种基于进度的更新方式使得动画过渡自然流畅,与整个动画的时间线精密结合,特别适合用于创建必要精准控制过渡结果的动画场景。
它的参数主要有:
参数名称范例阐明mobjectMobject要进行更新操作的对象update_functionfunc根据动画进度(alpha 值)对 Mobject 进行相应的更新操作suspend_mobject_updatingbool用于暂停或规复 mobject 的更新操作1.3. MaintainPositionRelativeTo
MaintainPositionRelativeTo的焦点作用是保持多个 Mobject 之间的相对位置关系。
在复杂的动画场景中,常常必要确保某些对象之间的位置关系在动画过程中保持固定,比如一个物体围绕另一个物体运动,或者一个图标始终跟随某个特定对象移动。
这个类能够主动处理这些相对位置的逻辑,开发者无需手动盘算和更新每个对象的位置,大大简化了动画的实现过程,使整个场景在动画过程中保持逻辑一致性和视觉上的合理性。
它的参数主要有:
参数名称范例阐明mobjectMobject必要保持相对位置的对象tracked_mobjectMobject被跟踪的对象,mobject 会相对于 tracked_mobject 来维持位置关系2. 使用示例
这3个动画类的使用不是那么直观,下面通过简单示例来演示如何使用这3个类。
2.1. UpdateFromFunc 正方形匀速旋转
起首构建一个函数square_rotation用来匀速旋转图形,然后通过UpdateFromFunc将图形与函数关联起来。
这样,在run_time时间内,Manim会不断调用square_rotation函数来旋转图形。- # 创建一个正方形
- s = Square()
- self.add(s)
- def square_rotation(square):
- square.rotate(PI / 100)
- self.play(UpdateFromFunc(s, square_rotation), run_time=3)
复制代码
2.2. UpdateFromAlphaFunc 圆形逐渐变色
起首构造一个控制颜色变化的函数circle_color,这个函数根据alpha值(也就是动画执行的进度)来逐渐更新图形颜色。
通过UpdateFromAlphaFunc将图形和函数关联起来,使得颜色随着动画的进度逐渐变化。- # 创建一个圆形
- c = Circle()
- self.add(c)
- def circle_color(circle, alpha):
- # 基于 alpha 值更新圆形的颜色
- new_color = interpolate_color(BLUE, RED, alpha)
- circle.set_color(new_color)
- # 使用 UpdateFromAlphaFunc 进行动画
- self.play(UpdateFromAlphaFunc(c, circle_color), run_time=3)
复制代码
2.3. MaintainPositionRelativeTo 固定两个元素的相对位置
起首构造两个图形Circle和Square,然后在动画中只移动Circle的位置。
同时用MaintainPositionRelativeTo来保持Square与Circle的相对位置,
这样,Square会随着Circle一起移动,并保持两者相对位置稳定。- c = Circle().shift(UP + LEFT * 2)
- s = Square().next_to(c, DOWN)
- self.add(c, s)
- self.play(
- c.animate.shift(RIGHT * 3),
- MaintainPositionRelativeTo(s, c),
- run_time=2,
- )
复制代码
3. 附件
文中的代码只是关键部分的截取,完整的代码共享在网盘中(anim_update.py),
下载地址: 完整代码 (访问密码: 6872)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |