首页 > 其他分享 >manim边做边学--动画更新

manim边做边学--动画更新

时间:2025-01-10 11:46:35浏览次数:1  
标签:动画 Mobject -- 更新 边学 color mobject UpdateFromAlphaFunc 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函数来旋转图形。

# 创建一个正方形
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 固定两个元素的相对位置

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

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

这样,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)

标签:动画,Mobject,--,更新,边学,color,mobject,UpdateFromAlphaFunc,manim
From: https://www.cnblogs.com/wang_yb/p/18663675

相关文章

  • CDS标准视图:一次性账户的客户行项目 I_ONETIMEACCOUNTCUSTOMER
    视图名称:一次性账户的客户行项目视图类型:基础视图代码:点击查看代码@EndUserText.label:'One-TimeAccountDataforCustomerItems'@Analytics:{dataCategory:#DIMENSION}@Analytics.internalName:#LOCAL@VDM.viewType:#BASIC@AbapCatalog.sqlViewName:'IONETIMECU......
  • 学习笔记(五十一):onAreaChange 组件区域变化监听
    onAreaChange(event:(oldValue:Area,newValue:Area)=>void):T 组件区域变化时触发该回调。仅会响应由布局变化所导致的组件大小、位置发生变化时的回调。由绘制变化所导致的渲染属性变化不会响应回调,如translate、offset。若组件自身位置由绘制变化决定也不会响应回......
  • 排列组合
    一、递推法求组合数——模板题AcWing885.求组合数I//c[a][b]表示从a个苹果中选b个的方案数for(inti=0;i<N;i++)for(intj=0;j<=i;j++)if(!j)c[i][j]=1;elsec[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;二、通过预处理逆元的方式求组......
  • 如何构建适合MCN团队的文档管理系统
    一、MCN团队运营中的文档管理痛点每到年末,MCN团队都会面临一场“信息战”。团队成员需要汇总全年合作数据、内容产出情况、以及运营数据报表。这些繁重的任务中,文档管理是最基础但也最容易被忽视的一环。痛点包括:文件分布零散:不同项目成员习惯使用不同的存储方式,难以统一管理......
  • 常见域名及其区别
    常见域名及其区别常见域名.com含义:商业机构(commercial)或公司(company)的简称。使用范围:广泛用于各类商业网站,是全球最流行的通用域名格式。注册规则:注册后立即生效,无需额外审核。管理机构:国际域名管理机构ICANN。.cn含义:代表中国(China)。使用范围:主要用于中国境内的网站......
  • Linux iptables与Docker
    关于Iptables和NetfilterIptables是什么Iptables是主机防火墙,常见于CentOS,Redhat,Kylin及Openeuler等Linux操作系统上,其作用与硬件防火墙类似,可对网络层或传输层的流量进行包的过滤及转发;Iptables工作于网络七层模型中的网络层与传输层(如图):网络层:基于IP地址的过滤与转发传输......
  • 详解GaussDB事务和并发控制机制,提升事务并发处理效率
    摘要:本文着重介绍了GaussDB的事务管理和并发控制机制,GaussDB采用多版本并发控制和两阶段锁相结合的机制。本文分享自华为云社区《华为云开发者云主机体验【玩转华为云】》,作者:GaussDB数据库。 事务是数据库的核心功能之一,其主要目的是保障数据库系统在并发处......
  • php NFA灾难回溯
    正则分为NFA和DFA两种,而php中使用的是NFA.php通过pcre.backtrack_limit来限制回溯次数,如果超过了这个限制,就会返回false.pcre.backtrack_limit默认值是100万.因此我们可以通过传入大量的垃圾字符或是触发灾难性回溯来超过限制,从而绕过preg_match.除此以外,在进行文件上传类......
  • 什么是域名,网址,DNS,IP
    什么是域名,网址,DNS,IP域名、网址、DNS和IP是互联网中常用的几个关键概念,它们在互联网资源的定位、访问和管理中起着重要作用。以下是这四个概念的详细解释:一、域名(DomainName)定义:域名是互联网上的一个标识符,用于唯一地标识和定位一个网站或网络服务。它由一串字符和数字组成,中......
  • ABB IRB 920 SCARA机械手维修小窍门
    ABBIRB920SCARA机器人维修步骤一、观察与记录:准确详尽地记录故障现象、出现的时间以及具体位置。密切关注机器人在操作过程中是否伴随着异常的声音、震动或其他任何不寻常的现象。 二、安全检查:确保IRB920SCARA机器人的电源已被完全关闭,并已与电源彻底断开连接,以保障人身安......