使用 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. PXI板卡的封装和接口形式

    PXI模块 PXI标准同时定义了3U和6U模块适用的机械尺寸与连接器形式.3U模块在模块底部安装有一个助拔手柄.在顶部和底部通过螺钉固定,底部的固定螺钉部分隐藏在助拔手柄中.占用超过一个槽位的模块可以 ...

  2. 快速量产低功耗 4G 定位方案?Air201 模组来搞定!

    今天我们来了解的是Air201模组快速量产低功耗 4G 定位方案,希望大家有所收获. 寻寻觅觅低功耗4G定位方案? 一个Air201就够了! --定位准.体积小.功耗低,助力行业客户快速量产! 01 ...

  3. delphi Image 32 动画演示1

    Image 32 自带的Demo,添加一些注解. unit uFrmAnimation; interface uses Winapi.Windows, Winapi.Messages, System. ...

  4. 2023NOIP A层联测23 T2 涂鸦

    2023NOIP A层联测23 T2 涂鸦 模拟赛一道博弈,剩下仨全期望,我: 思路 其实我也不是很会 考虑设 \(f_{mst}\),为 \(n*m\) 个格被压成一个二进制 \(mst\),转移到 ...

  5. Nuxt.js 应用中的 vite:compiled 事件钩子

    title: Nuxt.js 应用中的 vite:compiled 事件钩子 date: 2024/11/19 updated: 2024/11/19 author: cmdragon excerpt ...

  6. 玩转AI工作流:一步步搭建灵活的自动化流程

    我们之前搭建了许多不同类型的智能体,其中最受欢迎的就是在智能体中搭建各种工作流--这也是我最喜欢探索和玩的领域.那么,究竟什么是工作流?如何在后端实现一个工作流呢?今天我们就先简单了解下. 什么是工作 ...

  7. Java的多线程编程模型5--从AtomicInteger开始(自增长实现)

    AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字.而AtomicIn ...

  8. ThreadLocal源代码分析

    最早接触ThreadLocal这个东东,还是在学Hibernate的时候,当时看ThreadLocal没明白是干什么的,后来在网上查才明白ThreadLocal的用途,ThreadLocal其实蛮有用 ...

  9. Celery之监控与管理

    Celery两种监控工具: 命令行实用工具和Web实时监控工具Flower 一.命令行工具 1)进入shell环境 celery -A myCeleryProj.app shell Python 3. ...

  10. JavaWeb 入门到实战

    注:看狂神说做的笔记 1.基本概念 1.1 前言 web开发: web:网页的意思,www.baidu.com,就是一个web页面 静态web: 不与数据库进行交互,静态显示网页数据(你刚学 html ...