manim边做边学--缩放变换
使用 Manim 进行动画创作时,缩放变换是一项强大且实用的功能。
当我们处理复杂的科学模型可视化、数学原理演示时,缩放变换可以帮助我们在不改变元素位置关系的基础上,突出关键信息,引导观众聚焦于特定的细节。
比如在数学教学动画中,通过对几何图形的缩放,可以清晰地展示图形的比例变化与性质特征。
本篇将介绍Manim中的两个用于缩放变换的类:
ScaleInPlace:用于原地的缩放强调,侧重于对象大小的改变而位置不变ShrinkToCenter:侧重于将对象向屏幕中心收缩直至消失,适用于场景转换、元素移除等
1. 动画概述
1.1. ScaleInPlace
当你想要强调某个对象的放大或缩小效果,同时保持该对象在原位置进行缩放操作时,可以使用 ScaleInPlace。
例如,在讲解数学公式的推导过程中,需要突出显示某个公式的一部分,你可以将这部分进行原地缩放,以吸引观众的注意力。
它也适用于一些元素的局部放大展示,使观众能更清楚地看到细节。
该类实现的是原地缩放效果,对象的中心点不会发生位移,仅在大小上进行缩放。
可以通过调整缩放比例来控制缩放的程度,能够灵活地将对象放大或缩小到所需的尺寸。
它的参数主要有:
| 参数名称 | 类型 | 说明 |
|---|---|---|
| mobject | Mobject | 要进行缩放操作的对象 |
| scale_factor | float | 缩放比例因子 |
1.2. ShrinkToCenter
ShrinkToCenter适合用于物体消失时的动画效果,它能让对象从当前大小逐渐缩小直至消失在屏幕的中心位置。
例如,在展示一个元素被移除或销毁的过程中,ShrinkToCenter 可以生动地表现出该元素被 “收纳” 或 “吸收” 到屏幕中心的效果。
对于一些具有层级关系的元素,如果想要表示下层元素被上层元素吸收或覆盖时,也可以使用 ShrinkToCenter 让下层元素平滑地收缩到中心,模拟这种层级覆盖的视觉感受。
该类的特点是对象在收缩过程中向屏幕中心收缩,给人一种被 “吸进” 屏幕中心的视觉效果。
它的动画过程是渐进的,会逐渐缩小对象,直到对象完全消失或达到最小尺寸(可根据配置),这个过程的视觉效果可以根据持续时间和缩放速度的设置而有所不同。
它的参数主要有:
| 参数名称 | 类型 | 说明 |
|---|---|---|
| mobject | Mobject | 要进行向中心收缩操作的对象 |
2. 使用示例
ScaleInPlace和ShrinkToCenter使用起来比较简单直观,也没有什么复杂的参数。
下面的示例主要演示在哪些实际的场景中可以使用这两个类。
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边做边学--缩放变换的更多相关文章
- 边做边学入门微信小程序之仿豆瓣评分
微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...
- Batch Normalization原理及其TensorFlow实现——为了减少深度神经网络中的internal covariate shift,论文中提出了Batch Normalization算法,首先是对”每一层“的输入做一个Batch Normalization 变换
批标准化(Bactch Normalization,BN)是为了克服神经网络加深导致难以训练而诞生的,随着神经网络深度加深,训练起来就会越来越困难,收敛速度回很慢,常常会导致梯度弥散问题(Vanish ...
- Grails边做边学入门篇[1]--------大家一起来动手建立project和Domain
近期工作比較忙,没空写博客了.我发现每周五的下午都是我最放松的时候,可能是迟延症的缘故吧...总是寄希望于周末,慢慢的.我的周末就被工作占领了. 希望大家不要有这种坏毛病.今日事,今日毕.当然我们程序 ...
- [学习笔记] Blender 常用工具 移动与旋转,缩放, 变换
点击上面的移动图标之后,可在X,Y,Z轴移动物体. shift+S 之后,可有更多的移动选项. 旋转:可沿X,Y, Z 进行旋转 缩放 还可输入缩放的具体数值,更精确. 变换 可同时做移动.旋转.缩放 ...
- 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good
作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...
- 【Leetcode 做题学算法周刊】第四期
首发于微信公众号<前端成长记>,写于 2019.11.21 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 67 ...
- Cocos Creator绕远做圆周运动,且变换运动物体的角度
需求:绕远做圆周运动 并且精灵的角度要随着位置的改变而改变 网上有很多做圆周运动的代码,但是要不然就是角度不变 要不然就是cocos版本老旧 摘了一段3.x的圆周运动,自己加了角度变换 圆周运动,已知 ...
- 做fzu oj 1045 做减法学到的sprintf()函数
题目 做题一直输不出答案,于是就上网去百度了这题的解题,发现解答十分的简短,而且其中我看见了平时没见过的函数,sprintf(). 于是就百度sprintf()的使用. 如下: 函数功能:把格式化的数 ...
- html5 canvas缩放变换
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【Leetcode 做题学算法周刊】第一期
首发于微信公众号<前端成长记>,写于 2019.10.28 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 1. ...
随机推荐
- 狗的名字 ATCOER-ABC-171-C One Quadrillion and One Dalmatians
狗的名字 ATCOER-ABC-171-C One Quadrillion and One Dalmatians 题目链接 我们可以将名字看成26进制的数,就可以转化为将一个10进制转26进制的数的问 ...
- 深入解析 WezTerm 的自定义功能:键绑定和鼠标绑定
WezTerm 是一个高性能的跨平台终端模拟器,它提供了广泛的自定义选项,包括键绑定和鼠标绑定,使得用户可以根据自己的需求优化操作界面.本文将详细介绍几个关键的自定义功能,解释它们的用途,并展示如何配 ...
- Web实时消息推送的解决方案
什么是消息推送(push) 推送的场景比较多,比如有人关注我的公众号,这时我就会收到一条推送消息,以此来吸引我点击打开应用. 消息推送(push)通常是指网站的运营工作等人员,通过某种工具对用户当前网 ...
- linux下的rpm与yum
一.源代码形式 1. 绝大多数开源软件都是直接以原码形式发布的 2. 源代码一般会被打成.tar.gz的归档压缩文件 3. 源代码需要编译成为二进制形式之后才能够运行使用 ...
- 十、Spring Boot集成Spring Security之HTTP请求授权
目录 前言 一.HTTP请求授权工作原理 二.HTTP请求授权配置 1.添加用户权限 2.配置ExceptionTranslationFilter自定义异常处理器 3.HTTP请求授权配置 三.测试接 ...
- DevEco Studio 实战第一节:字符串拼接与组件构建
DevEco Studio 实战第一节:字符串拼接与组件构建 引言 在现代软件开发中,TypeScript 提供了强类型的优势,而 DevEco Studio 作为华为推出的开发集成环境,提供了便捷的 ...
- vue3 封装api接口
新建axiosj.ts import axios from 'axios'; import { showMessage } from "./status"; // 引入状态码文件 ...
- 编译器-FIRST集合(补充:左递归)
上一篇中实现的First函数没有考虑左递归,在这对此说明和实现 1.立即左递归 A -> Ab|a 1.两步或两步以上产生的左递归 A -> Bc|a B -> Ab|d 前面的实现 ...
- cas3.5配置LDAP域控
一. 安装cas3.5 点击下载 CAS 3.5.2 :CAS 解压缩下载的 cas-server-3.5.2-release.zip,在 %CAS%\modules文件夹中找到cas-server- ...
- eShopOnContainer 中 unauthorized_client error 登录错误处理
在准备好 eShopOnContainer 环境,运行起来之后,不幸的是,我遇到了不能登录的错误. 从错误信息中,可以看到 unauthorized_client 的内容.这是为什么呢? 从 eSho ...