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/6188.html

(0)
LomuLomu
上一篇 2025 年 1 月 13 日
下一篇 2025 年 1 月 13 日

相关推荐

  • Java程序员必读的10本豆瓣高分经典书籍PDF

    要想成为一名优秀的Java程序员,不仅需要精通Java语言本身,还需要扎实的计算机基础、良好的编码习惯以及对软件开发全局的理解。掌握了这些基础知识,就像拥有了九阳神功和乾坤大挪移一样,再学习其它各门各派功夫直接手到擒来! 以下是从计算机基础、编程思想、Java语言、架构设计等方面精选的10本豆瓣高分经典书籍,它们能够帮助Java程序员全面提升编程能力和职业素…

    2025 年 1 月 14 日
    40800
  • 基于源码分析 SHOW GLOBAL STATUS 的实现原理

    问题 在 MySQL 中,查询全局状态变量的方式一般有两种:SHOW GLOBAL STATUS和performance_schema.global_status。 但不知道大家注意到没有,performance_schema.global_status 返回的状态变量数要远远少于 SHOW GLOBAL STATUS 。 具体来说, 在 MySQL 8.4…

    未分类 2025 年 1 月 12 日
    41400
  • PostgreSQL 的系统要求

    title: PostgreSQL 的系统要求date: 2024/12/25updated: 2024/12/25author: cmdragon excerpt:PostgreSQL 是一款功能强大的开源关系型数据库,广泛应用于企业应用、数据分析和互联网服务中。为了在不同的硬件和软件环境中顺利运行,PostgreSQL 对系统的要求也各有不同。了解 Po…

    2024 年 12 月 30 日
    34100
  • 【永久激活】IDEA 2024激活破解保姆级教程,附激活码+工具,亲测可用

    IntelliJ IDEA 是 Java 编程语言的集成开发环境,被公认为最好的 Java 开发工具之一。本文分享通过脚本免费激活 IDEA 等 Jetbrains 全家桶工具,支持 2021 以上的版本包括最新版本。 一、下载并安装 IDEA 大家可以直接在 JetBrains 官网下载最新版本的 IDEA。安装步骤非常简单,按照提示一步一步进行即可。 二…

    未分类 2024 年 6 月 23 日
    1.7K00
  • 交易系统:订单模型设计详解

    大家好,我是汤师爷~ 订单模型作为整个交易系统的核心,支撑着所有交易环节。 订单域核心概念模型 如图所示,为订单核心概念模型。 1、订单 在实际交易业务处理中,订单会根据不同的业务规则(如店铺、收货地址、配送方式等)拆分成多个子订单,形成一个父订单对应多个子订单的结构。这种拆分机制便于后续的订单履约和商家结算。订单包含以下核心字段: 租户ID:标识订单所属的…

    2024 年 12 月 31 日
    48400

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信