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 面试八股文(真实,高频,有详细答案)

    这套互联网 Java 工程师面试题包括了:MyBatis、ZK、Dubbo、EL、Redis、MySQL、并发编程、Java面试、Spring、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题 一、Java 基础1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,jav…

    2025 年 1 月 5 日
    11600
  • Python Cookbook(第3版)中文版-PDF免费下载

    Python Cookbook(第3版)中文版-PDF免费下载 适读人群 :Python程序开发人员、编程爱好者、在校大学生 电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍:https://item.jd.com/13897579.html Python图书升级版本,Python编程从入门到实践,涵盖Python3.3,包含大量实用…

    2024 年 12 月 30 日
    10200
  • intellij idea使用:激活码与插件问题

    下载 官网下载,不需要下载最新版的,我下载的是2024.2.3,能正常使用激活码 安装教程去网上搜,有一大把 激活码 这里整合了两个靠谱的激活码更新网站,里面会更新免费的激活码,拿来用即可,比在网上搜省很多时间,网上很多都是打广告的,没有有效信息。 https://www.yuque.com/hudies/coding/dm2x3ivmeg9pf3ve ht…

    2024 年 12 月 26 日
    19300
  • 【数据结构】Java的HashMap 和 HashSet 大全笔记,写算法用到的时候翻一下,百度都省了!(实践篇)

    本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!! HashSet HashMap 前言 在探索Java集合框架的丰富世界时,我们不可避免地会遇到两个至关重…

    2025 年 1 月 19 日
    11500
  • IDEA 2024.1.2 激活破解指南,附IDEA激活码+工具,亲测有效

    IntelliJ IDEA 是一个广受认可的 Java 集成开发环境,被认为是最好的 Java 开发工具之一。本文将分享如何通过脚本免费激活 IDEA 及其他 Jetbrains 全家桶工具,支持 2021 及以上版本,包括最新版本。 一、下载并安装 IDEA 首先,前往 JetBrains 官网下载最新版本的 IDEA。安装过程十分简单,按照提示一步步进行…

    未分类 2024 年 7 月 15 日
    74300

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信