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

相关推荐

  • 永久激活破解IDEA2024最新教程

    IntelliJ IDEA 是被广泛认可的Java开发高效工具,优选于多种编程环境中。本文将指导您通过脚本方法免费激活 IntelliJ IDEA 以及 Jetbrains 的其它产品,有效对应2021年及以后版本,含最新发布版本。 快速安装 您可以从 JetBrains 官网下载到 IntelliJ IDEA 的最新版。简单几步,轻松完成安装。 激活工具获…

    未分类 2024 年 7 月 10 日
    1.3K00
  • 10个案例告诉你mysql不使用子查询的原因

    大家好,我是V哥。上周末与一位技术同行共进晚餐,我们很快便将话题转向了技术讨论,特别是关于数据库子查询的优化问题。回家后,我整理了以下10个案例,展示了如何在不使用子查询的情况下解决问题,现在与大家分享。 首先,让我们探讨一下在MySQL中避免使用子查询和JOIN的原因,主要基于以下几点: 性能考量:子查询在执行过程中,MySQL需要创建临时表来存储内部查询…

    未分类 2024 年 12 月 26 日
    42500
  • 数据结构(Java版)第二期:包装类和泛型

    目录 一、包装类 1.1. 基本类型和对应的包装类 1.2. 装箱和拆箱 1.3. 自动装箱和自动拆箱 二、泛型的概念 三、引出泛型 3.1. 语法规则 3.2. 泛型的优点 四、类型擦除 4.1. 擦除的机制 五、泛型的上界 5.1. 泛型的上界的定义 5.2. 语法规则 六、泛型方法 6.1. 定义语法 6.2. 交换方法的实例 七、通配符 包装类和泛型…

    2025 年 1 月 1 日
    44500
  • springboot~多节点应用里的雪花算法唯一性

    雪花算法的唯一性,在单个节点中是可以保证的,对应kubernetes中的应用,如果是横向扩展后,进行多副本的情况下,可能出现重复的ID,这需要我们按着pod_name进行一个workId的生成,我还是建议通过不引入第三方组件和网络请求的前提下解决这个问题,所以我修改了kubernetes的yaml文件。 k8s的yaml配置 apiVersion: apps…

    未分类 2024 年 12 月 31 日
    53200
  • 最新IDEA 2024激活破解教程,附IDEA激活码

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

    未分类 2024 年 7 月 31 日
    3.1K00

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信