使用 Manim 进行动画创作时,缩放变换是一项强大且实用的功能。

当我们处理复杂的科学模型可视化、数学原理演示时,缩放变换可以帮助我们在不改变元素位置关系的基础上,突出关键信息,引导观众聚焦于特定的细节。

比如在数学教学动画中,通过对几何图形的缩放,可以清晰地展示图形的比例变化与性质特征。

本篇将介绍Manim中的两个用于缩放变换的类:

  1. ScaleInPlace:用于原地的缩放强调,侧重于对象大小的改变而位置不变
  2. ShrinkToCenter:侧重于将对象向屏幕中心收缩直至消失,适用于场景转换、元素移除等

1. 动画概述

1.1. ScaleInPlace

当你想要强调某个对象的放大或缩小效果,同时保持该对象在原位置进行缩放操作时,可以使用 ScaleInPlace

例如,在讲解数学公式的推导过程中,需要突出显示某个公式的一部分,你可以将这部分进行原地缩放,以吸引观众的注意力。

它也适用于一些元素的局部放大展示,使观众能更清楚地看到细节。

该类实现的是原地缩放效果,对象的中心点不会发生位移,仅在大小上进行缩放。

可以通过调整缩放比例来控制缩放的程度,能够灵活地将对象放大或缩小到所需的尺寸。

它的参数主要有:

参数名称 类型 说明
mobject Mobject 要进行缩放操作的对象
scale_factor float 缩放比例因子

1.2. ShrinkToCenter

ShrinkToCenter适合用于物体消失时的动画效果,它能让对象从当前大小逐渐缩小直至消失在屏幕的中心位置。

例如,在展示一个元素被移除或销毁的过程中,ShrinkToCenter 可以生动地表现出该元素被 “收纳” 或 “吸收” 到屏幕中心的效果。

对于一些具有层级关系的元素,如果想要表示下层元素被上层元素吸收或覆盖时,也可以使用 ShrinkToCenter 让下层元素平滑地收缩到中心,模拟这种层级覆盖的视觉感受。

该类的特点是对象在收缩过程中向屏幕中心收缩,给人一种被 “吸进” 屏幕中心的视觉效果。

它的动画过程是渐进的,会逐渐缩小对象,直到对象完全消失或达到最小尺寸(可根据配置),这个过程的视觉效果可以根据持续时间和缩放速度的设置而有所不同。

它的参数主要有:

参数名称 类型 说明
mobject Mobject 要进行向中心收缩操作的对象

2. 使用示例

ScaleInPlaceShrinkToCenter使用起来比较简单直观,也没有什么复杂的参数。

下面的示例主要演示在哪些实际的场景中可以使用这两个类。

2.1. 原子核的展示

这个示例创建了一个代表原子核的蓝色圆形。

先将其显示,随后使用 ScaleInPlace 动画将其放大 3 倍,以此突出原子核,帮助观众更清晰地关注重点内容。

nucleus = Circle(
radius=0.5,
fill_opacity=1,
color=BLUE,
)
self.play(Create(nucleus))
self.wait()
# 放大原子核,使其更加突出
self.play(ScaleInPlace(nucleus, 3))

2.2. Logo的展示

这个示例针对公司 logo 展示场景,通过 ImageMobject 加载 logo 并设为 0.5 倍初始大小后淡入。

等待 1 秒,利用 ScaleInPlace 动画将 logo 放大 3 倍,从而在开场时吸引观众目光。

logo = ImageMobject("./common/亚原logo.jpg")
logo.scale(0.5) # 初始缩放比例
self.play(FadeIn(logo))
self.wait()
# 放大 logo 以吸引观众的注意力
self.play(ScaleInPlace(logo, 3))

2.3. 游戏中的生命值

这个示例演示在游戏结束的情境下,创建红色正方形代表生命值方块。

先显示出来,1 秒后使用 ShrinkToCenter 动画使其收缩至中心消失,模拟了生命值损失的效果。

life_block = Square(
side_length=2,
fill_opacity=0.6,
color=RED,
)
self.play(Create(life_block))
self.wait()
# 让生命值方块收缩到中心消失,模拟失去生命值的效果
self.play(ShrinkToCenter(life_block))

2.4. 提示消息的消失

这个示例演示了信息提示场景,先创建白色文本作为提示信息并写出。

等待 2 秒后,运用 ShrinkToCenter 动画让文本收缩至中心消失,实现了提示信息自然消失的动画效果。

s = "这个一个提示信息"
info_text = Text(
f"{s} !",
t2g={s: [BLUE, GREEN, YELLOW]},
)
self.play(Write(info_text))
self.wait()
# 使提示文本收缩至中心消失
self.play(ShrinkToCenter(info_text))

3. 附件

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

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

manim边做边学--缩放变换的更多相关文章

  1. 边做边学入门微信小程序之仿豆瓣评分

    微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...

  2. Batch Normalization原理及其TensorFlow实现——为了减少深度神经网络中的internal covariate shift,论文中提出了Batch Normalization算法,首先是对”每一层“的输入做一个Batch Normalization 变换

    批标准化(Bactch Normalization,BN)是为了克服神经网络加深导致难以训练而诞生的,随着神经网络深度加深,训练起来就会越来越困难,收敛速度回很慢,常常会导致梯度弥散问题(Vanish ...

  3. Grails边做边学入门篇[1]--------大家一起来动手建立project和Domain

    近期工作比較忙,没空写博客了.我发现每周五的下午都是我最放松的时候,可能是迟延症的缘故吧...总是寄希望于周末,慢慢的.我的周末就被工作占领了. 希望大家不要有这种坏毛病.今日事,今日毕.当然我们程序 ...

  4. [学习笔记] Blender 常用工具 移动与旋转,缩放, 变换

    点击上面的移动图标之后,可在X,Y,Z轴移动物体. shift+S 之后,可有更多的移动选项. 旋转:可沿X,Y, Z 进行旋转 缩放 还可输入缩放的具体数值,更精确. 变换 可同时做移动.旋转.缩放 ...

  5. 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good

    作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...

  6. 【Leetcode 做题学算法周刊】第四期

    首发于微信公众号<前端成长记>,写于 2019.11.21 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 67 ...

  7. Cocos Creator绕远做圆周运动,且变换运动物体的角度

    需求:绕远做圆周运动 并且精灵的角度要随着位置的改变而改变 网上有很多做圆周运动的代码,但是要不然就是角度不变 要不然就是cocos版本老旧 摘了一段3.x的圆周运动,自己加了角度变换 圆周运动,已知 ...

  8. 做fzu oj 1045 做减法学到的sprintf()函数

    题目 做题一直输不出答案,于是就上网去百度了这题的解题,发现解答十分的简短,而且其中我看见了平时没见过的函数,sprintf(). 于是就百度sprintf()的使用. 如下: 函数功能:把格式化的数 ...

  9. html5 canvas缩放变换

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 【Leetcode 做题学算法周刊】第一期

    首发于微信公众号<前端成长记>,写于 2019.10.28 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 1. ...

随机推荐

  1. SynthID Text 现已发布|在 AI 生成文本中应用不可见水印的新技术

    你是否难以分辨一段文本是由人类撰写的,还是 AI 生成的?识别 AI 生成内容对于提升信息可信度.解决归因错误以及抑制错误信息至关重要. 今天,Google DeepMind 和 Hugging Fa ...

  2. 符合ASTM标准的雨流计数法及其不同的改进方法

    随着研究的深入,人们发现采用时间序列计算载荷谱太麻烦了,处理的工作量太大,我们不需要将每个时刻点的载荷都做运算,疲劳计算只需要提供幅值.均值和循环次数,鉴于此发展出了很多不同的计数方法,雨流法是最常见 ...

  3. (Redis基础教程之七)如何使用Redis中的Hashes

    如何在ubuntu18.04上安装和保护redis 如何连接到Redis数据库 如何管理Redis数据库和Keys 如何在Redis中管理副本和客户端 如何在Redis中管理字符串 如何在Redis中 ...

  4. btrace一些你不知道的事(源码入手)

    背景 周五下班回家,在公司班车上觉得无聊,看了下btrace的源码(自己反编译). 一些关于btrace的基本内容,可以看下我早起的一篇记录:btrace记忆 上一篇主要介绍的是btrace的一些基本 ...

  5. Xpath解析及其语法

    XPath解析 XPath(XML Path Language)是一种用于在XML和HTML文档中查找信息的语言,其通过路径表达式来定位节点,属性和文本内容,并支持复杂查询条件,XPath 是许多 W ...

  6. Echrtas 实时渲染

    1.实时曲线图 业务场景:每个时间节点产生一个数据,且时间节点间隔不固定 坐标轴配置:X轴类型设定为time,Y轴类型设定为value 数据格式:每个节点的数据都是一个数组,第一个数组为时间,第二个元 ...

  7. InheritableThreadLocal 父子线程值传递

    最近项目中使用 @Async 异步远程调用的时候,发现主线程能拿到 token 值,子线程调用的时候 token 为 null.研究了一番,发现可以直接使用 InheritableThreadLoca ...

  8. 正也科技案例 | 药企使用S2P深入营销管理数据化建设

    为了获取更*的市场空间,医药健康行业正迎来一波前所未有的产业升级.尽管不少企业取得了许多成绩,但仍面临诸多挑战. 浙江某知名医药公司,在泌尿系统.心脑血管系统及眼科用药领域均拥有强势品牌.其产品更是荣 ...

  9. GZY.EFCore.BulkExtensions 支持达梦数据库的EF Core批量操作库详解

    前言 EFCore.BulkExtensions是一个常用的EF core 批量处理数据的库. 但是支持的数据库相对较少.特别是.NET5.0版本 连MySQL都无法支持 这个库就是改造的最新EFCo ...

  10. Skyvern – AI浏览器自动化测试工具

    Skyvern – AI浏览器自动化测试工具 ​​ ‍ Skyvern是什么 Skyvern是开源的浏览器自动化工具,结合大型语言模型(LLMs)和计算机视觉技术实现复杂的网页交互和数据提取.与传统的 ...