manim边做边学–动画更新

今天介绍Manim中用于动画更新的3个类 ,分别是:

  1. UpdateFromFunc:根据自定义的函数来动态更新 Mobject 的属性
  2. UpdateFromAlphaFunc:根据动画的进度来平滑地改变 Mobject 的属性
  3. MaintainPositionRelativeTo:保持多个 Mobject 之间的相对位置关系

3个类 分别从自定义更新、基于进度的过渡以及相对位置保持这三个重要方面,为 Manim 动画的创作提供有力的帮助。

1. 动画概述

1.1. UpdateFromFunc

UpdateFromFunc赋予动画极高的自定义能力。

主要作用是允许用户依据自定义的函数来动态更新 Mobject 的属性。

这一灵活性使得它在各种复杂的动画场景中都能发挥作用,无论是模拟物理过程中物体的动态变化,还是实现复杂的交互动画效果,都能通过定义合适的更新函数来实现对 Mobject 的精确控制,从而创造出符合特定需求的动画效果。

它的参数主要有:

参数名称 类型 说明
mobject Mobject 要应用更新函数的对象
update_function func 定义如何更新 mobject 的状态的函数
suspend_mobject_updating bool 用于暂停或恢复 mobject 的更新操作

1.2. UpdateFromAlphaFunc

UpdateFromAlphaFunc专注于基于动画进度的属性更新,alpha 值代表了动画的完成度,范围从 0 到 1

利用这个类,用户可以根据动画的进度来平滑地改变 Mobject 的属性,例如淡入淡出、缩放、旋转等过渡效果。

这种基于进度的更新方式使得动画过渡自然流畅,与整个动画的时间线紧密结合,特别适合用于创建需要精准控制过渡效果的动画场景。

它的参数主要有:

参数名称 类型 说明
mobject Mobject 要进行更新操作的对象
update_function func 根据动画进度(alpha 值)对 Mobject 进行相应的更新操作
suspend_mobject_updating bool 用于暂停或恢复 mobject 的更新操作

1.3. MaintainPositionRelativeTo

MaintainPositionRelativeTo的核心作用是保持多个 Mobject 之间的相对位置关系。

在复杂的动画场景中,常常需要确保某些对象之间的位置关系在动画过程中保持固定,比如一个物体围绕另一个物体运动,或者一个图标始终跟随某个特定对象移动。

这个类能够自动处理这些相对位置的逻辑,开发者无需手动计算和更新每个对象的位置,大大简化了动画的实现过程,使整个场景在动画过程中保持逻辑一致性和视觉上的合理性。

它的参数主要有:

参数名称 类型 说明
mobject Mobject 需要保持相对位置的对象
tracked_mobject Mobject 被跟踪的对象,mobject 会相对于 tracked_mobject 来维持位置关系

2. 使用示例

这3个动画类的使用不是那么直观,下面通过简单示例来演示如何使用这3个类。

2.1. UpdateFromFunc 正方形匀速旋转

首先构建一个函数square_rotation用来匀速旋转图形,然后通过UpdateFromFunc将图形与函数关联起来。

这样,在run_time时间内,Manim会不断调用square_rotation函数来旋转图形。

```python
# 创建一个正方形
s = Square()
self.add(s)

def square_rotation(square):
    square.rotate(PI / 100)

self.play(UpdateFromFunc(s, square_rotation), run_time=3)
```

manim边做边学--动画更新

2.2. UpdateFromAlphaFunc 圆形逐渐变色

首先构造一个控制颜色变化的函数circle_color,这个函数根据alpha值(也就是动画执行的进度)来逐渐更新图形颜色。

通过UpdateFromAlphaFunc将图形和函数关联起来,使得颜色随着动画的进度逐渐变化。

```python
# 创建一个圆形
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)
```

manim边做边学--动画更新

2.3. MaintainPositionRelativeTo 固定两个元素的相对位置

首先构造两个图形CircleSquare,然后在动画中只移动Circle的位置。

同时用MaintainPositionRelativeTo来保持SquareCircle的相对位置,

这样,Square会随着Circle一起移动,并保持两者相对位置不变。

```python
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,
)
```

manim边做边学--动画更新

3. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(anim_update.py),

下载地址: 完整代码 (访问密码: 6872)

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/5719.html

(0)
LomuLomu
上一篇 2025 年 1 月 11 日 上午3:50
下一篇 2025 年 1 月 11 日 上午4:51

相关推荐

  • 架构师启示录:知识模型、落地方法与思维模式PDF、EPUB免费下载

    适读人群 :资深程序员、初级架构师 从架构知识模型、架构落地方法、架构思维模式三大维度介绍架构师的能力模型,带你穿越“认知迷雾” 电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍 点击原文去下载 书籍信息 作者: 灵犀出版社: 机械工业出版社出版年: 2024-3页数: 212装帧: 平装丛书: 架构师书库ISBN: 97871117…

    2025 年 1 月 11 日
    28100
  • 最新IDEA 2024激活破解教程,附IDEA激活码

    引言 在现代软件开发中,集成开发环境(IDE)是不可或缺的工具,特别是对于Java程序员来说,选择一个高效、智能的IDE至关重要。IntelliJ IDEA作为JetBrains公司推出的旗舰产品,以其强大的功能和卓越的用户体验,成为众多Java开发者的首选。 给大家整理了IDEA永久激活码,IDEA破解教程,需要的直接浏览器访问: docs.qq.com/…

    未分类 2024 年 7 月 31 日
    1.8K00
  • UML扩展用例的应用与实践

    在UML建模中,用例分析是描述业务实现或系统功能的重要手段。每个用例都代表一个完整的业务流程或功能模块。然而,在实际应用中,某些功能可能并非核心需求,而是作为可选补充存在。针对这种情况,UML提供了扩展用例机制来灵活处理这类场景。以银行业务为例,”存款”和”取款”是最基础的核心用例。在完成这些交易后,客户可以选择对服务进行评价,但这个环节并非强制要求。我们可…

    2025 年 5 月 12 日
    4800
  • 如何用串口调试助手ComTone调试串口?附安装包

    前言 大家好,我是小徐啊。我们在调试应用的时候,有时候是需要进行串口通信的。但并不是每次都有实时的串口数据供我们去测试,这个时候就需要一个模拟生成串口数据的工具来帮助我们了。今天,小徐就来介绍下串口调试助手ComTone的用法。文末附获取方式。 如何使用串口调试助手ComTone 首先,需要选择对应的端口号,这个必须是能联通的串口号,然后点击打开串口按钮,如…

    2025 年 1 月 10 日
    26800
  • 微软开源!Office 文档轻松转 Markdown!

    大家好,我是 Java陈序员。 今天,给大家介绍一款微软开源的文档转 Markdown 工具。 关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。 项目介绍 MarkItDown —— 微软开源的 Python 工具,能够将多种常见的文件格式(如 PDF、PowerPoint、Word、Excel、图像、音频…

    2025 年 1 月 10 日
    25000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信