manim边做边学--交替变换
今天,我们将介绍 Manim 中两个用于交替变换的动画类:CyclicReplace 和 Swap。
无论是在展示数学概念的动态变化,还是在图形设计中呈现元素的巧妙交互,这两个动画类都扮演着重要角色。
它们以各自独特的方式,为我们提供了丰富的创意表达空间。
CyclicReplace:循环替换一组对象的位置Swap:交换两个特定对象的位置
1. 动画概述
1.1. CyclicReplace
当你需要循环替换一组对象的位置时,CyclicReplace 是一个非常有用的动画类。
例如,有一组按顺序排列的元素,并且想要给人一种元素依次循环移动位置的视觉效果,类似于一个循环队列的元素循环操作,那么使用 CyclicReplace 可以很好地实现这一效果。
它可以用于展示元素之间的循环依赖关系,或者周期性的位置调整,给人一种周期性变化的直观感受。
CyclicReplace 的特点是将一组 Mobject按照某种循环顺序进行位置交换。
比如,对于一组元素 [A, B, C, D],它可能会将 A 的位置替换为 B 的位置,B 的位置替换为 C 的位置,以此类推,最后将 D 的位置替换为 A 的位置。
它的参数主要有:
| 参数名称 | 类型 | 说明 |
|---|---|---|
| mobjects | [Mobject] | 要进行变换的 mobject 列表 |
| path_arc | float | mobjects 到达目标位置所遵循的弧的角度 |
1.2. Swap
Swap 动画类适用于需要交换两个特定对象位置的场景。
当你有两个对象,你想清晰地展示它们位置的互换时,使用 Swap 动画可以实现直接交换位置的效果。
常见的应用场景包括交换等式中的两个元素,交换图表中的两个数据点或交换布局中的两个元素,以强调它们的等价性或某种关联关系。
也可以用于对比前后两个对象位置不同但功能或属性相同的情况,通过交换位置来突出它们的互换性。
与 CyclicReplace 不同,Swap 主要针对两个对象进行操作。
它将精确地交换这两个对象的位置,使它们在动画结束时位置互换。
它的参数主要有:
| 参数名称 | 类型 | 说明 |
|---|---|---|
| mobjects | [Mobject] | 参与交换的 Mobject |
| path_arc | float | 象在交换过程中所遵循的弧的角度 |
2. 使用示例
下面通过示例来演示在哪些场景下可以使用上面的两个动画类。
2.1. 元素的循环移动
这个示例展示了三个不同形状(圆形、正方形和三角形)的循环位置替换,直观地体现了 CyclicReplace 如何循环移动一组对象。
circle = Circle()
square = Square()
triangle = Triangle()
shapes = VGroup(circle, square, triangle)
shapes.arrange(RIGHT)
self.add(shapes)
self.play(CyclicReplace(*shapes))
self.play(CyclicReplace(*shapes))
self.play(CyclicReplace(*shapes))

2.2. 模拟循环队列的元素移动
这个示例模拟了一个简单的循环队列,数字 1 到 5 按顺序排列,通过 CyclicReplace 动画展示了它们像在循环队列中一样循环移动位置。
numbers = [Text(str(i)) for i in range(1, 6)]
number_group = VGroup(*numbers).arrange(RIGHT)
self.add(number_group)
self.play(CyclicReplace(*number_group))
self.play(CyclicReplace(*number_group))
self.play(CyclicReplace(*number_group))
self.play(CyclicReplace(*number_group))
self.play(CyclicReplace(*number_group))

2.3. 交换等式两边的元素
在数学等式的场景中,先展示一个简单的等式 x + 5 = 10,然后使用 Swap 交换等式中的元素。
eq = MathTex(r"x + 5 = \quad 10")
eq[0][0].set_color(GREEN)
eq[0][2].set_color(BLUE)
eq[0][4:6].set_color(RED)
self.add(eq)
self.play(Swap(eq[0][0], eq[0][2]))
self.wait()
self.play(Swap(eq[0][0:3], eq[0][4:6]))

2.4. 对称交换两个图形的位置
这个示例通过交换左右两个不同图形(圆形和正方形)的位置,展示了 Swap 在图形布局中用于突出对称关系或位置交换的效果。
left_circle = Circle().shift(LEFT)
right_square = Square().shift(RIGHT)
self.add(left_circle, right_square)
self.wait(0.5)
self.play(Swap(left_circle, right_square))

3. 附件
文中的代码只是关键部分的截取,完整的代码共享在网盘中(swap.py),
下载地址: 完整代码 (访问密码: 6872)
manim边做边学--交替变换的更多相关文章
- 边做边学入门微信小程序之仿豆瓣评分
微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...
- Batch Normalization原理及其TensorFlow实现——为了减少深度神经网络中的internal covariate shift,论文中提出了Batch Normalization算法,首先是对”每一层“的输入做一个Batch Normalization 变换
批标准化(Bactch Normalization,BN)是为了克服神经网络加深导致难以训练而诞生的,随着神经网络深度加深,训练起来就会越来越困难,收敛速度回很慢,常常会导致梯度弥散问题(Vanish ...
- Grails边做边学入门篇[1]--------大家一起来动手建立project和Domain
近期工作比較忙,没空写博客了.我发现每周五的下午都是我最放松的时候,可能是迟延症的缘故吧...总是寄希望于周末,慢慢的.我的周末就被工作占领了. 希望大家不要有这种坏毛病.今日事,今日毕.当然我们程序 ...
- WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画
原文:WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画 利用WPF的ListView控件实现类似于Winform中DataGrid行背景色交替变换的效果,同 ...
- 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good
作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...
- 【Leetcode 做题学算法周刊】第四期
首发于微信公众号<前端成长记>,写于 2019.11.21 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 67 ...
- Cocos Creator绕远做圆周运动,且变换运动物体的角度
需求:绕远做圆周运动 并且精灵的角度要随着位置的改变而改变 网上有很多做圆周运动的代码,但是要不然就是角度不变 要不然就是cocos版本老旧 摘了一段3.x的圆周运动,自己加了角度变换 圆周运动,已知 ...
- 做fzu oj 1045 做减法学到的sprintf()函数
题目 做题一直输不出答案,于是就上网去百度了这题的解题,发现解答十分的简短,而且其中我看见了平时没见过的函数,sprintf(). 于是就百度sprintf()的使用. 如下: 函数功能:把格式化的数 ...
- 【Leetcode 做题学算法周刊】第一期
首发于微信公众号<前端成长记>,写于 2019.10.28 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 1. ...
- 【Leetcode 做题学算法周刊】第二期
首发于微信公众号<前端成长记>,写于 2019.11.05 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 20 ...
随机推荐
- C++之OpenCV入门到提高005:005 图像操作
一.介绍 今天是这个系列<C++之 Opencv 入门到提高>得第五篇文章.这篇文章也不难,介绍如何图像的基本操作,比如:读取一张图片的像素值,如何修改一张图片中的像素值,如何读取一张图片 ...
- 4G模组软件指南 | 必读篇之模块信息(hmeta)
今天我讲解的这篇关于4G模组软件的模块信息属于必读篇,望珍惜! 1.模块信息概述 模块信息是每一个模块携带的信息,就像人的身份证一样,这些信息确定了模块的唯一性; 包含设备唯一id,硬件型号,模组的硬 ...
- 异构数据源DDL自动转换
当我们在不同数据库迁移.同步数据时,首先要做的就是把库和表的结构在目标端创建出来. 当我们把数据库的结构 dump 出来之后,这个 DDL 在目标端大概率是无法直接运行的,至少数据类型在不同数据库之间 ...
- redis之性能优化
1 redis-cli命令的 --stat选项 关于stat选项,官网也是介绍的比较简单.使用redis-cli命令加上stat选项可以实时监视redis实例,比如当前节点内存中缓存的 key总数以及 ...
- 3D饼图
1.实现思路 Echarts本身没有这类图形,可以使用其扩展echarts-gl进行绘制,echarts-gl曲面图可以完成这类需求 <script src="https://cdn. ...
- 记录一次C#爬虫记录,获取必应图片
记录一次C#爬虫记录,获取必应图片 起因 事情是这样的,我创建了一个仓库,里面有2018年到目前为止每日的必应壁纸,在八月份的时候我看到微软有接口文档,于是写了一个服务,每天早上八点钟会获取必应壁纸( ...
- 微软中文输入法带来的一点小坑,导致arcgispro输入中文异常
有同事反映,在Pro中新建要素类时,没办法设定名称为"新建",会自己变成不完整的拼音. 查看了一下,确有此事. 在相同的界面里还有其他输入框,却没有这种情况. 研究了一下,发现是输 ...
- shp文件及附属
主文件 .shp - 用于存储要素几何的主文件,之前分享过该文件的结构详解:必需文件. .shx - 用于存储要素几何索引的索引文件:必需文件. .dbf - 用于存储要素属性信息的 dBASE 表, ...
- DA14531芯片固件逆向系列(2)- 操作系统底层机制分析
首发于先知论坛 https://xz.aliyun.com/t/9186 概述 DA145x软件平台利用了由Riviera Waves许可的小型高效实时内核,内核提供以下功能: 任务创建和状态转换. ...
- mysql restart
bin/mysqld --defaults-file=/etc/mysql.cnf --user=mysql bin/mysqld --user=app --basedir=/opt/mysql-5. ...