今天,我们将介绍 Manim 中两个用于交替变换的动画类:CyclicReplaceSwap

无论是在展示数学概念的动态变化,还是在图形设计中呈现元素的巧妙交互,这两个动画类都扮演着重要角色。

它们以各自独特的方式,为我们提供了丰富的创意表达空间。

  1. CyclicReplace:循环替换一组对象的位置
  2. 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. 模拟循环队列的元素移动

这个示例模拟了一个简单的循环队列,数字 15 按顺序排列,通过 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边做边学--交替变换的更多相关文章

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

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

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

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

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

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

  4. WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画

    原文:WPF ListView控件设置奇偶行背景色交替变换以及ListViewItem鼠标悬停动画 利用WPF的ListView控件实现类似于Winform中DataGrid行背景色交替变换的效果,同 ...

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. mobile频段要查找、设置并获取相关参数,该怎么破?

    ​ 今天我们一起来学习查找和设置mobile频段,并获取相关参数. 一.mobile概述 1.1 简介 "4G mobile"指的是第四代移动通信技术,常用于描述通过4G网络进行的 ...

  2. i-MES生产制造管理系统-可视化看板

    可视化看板最主要的目的是为了将生产状况透明化,让大家能够快速了解当前的生产状况以及进度,通过大数据汇总分析,为管理层做决策提供数据支撑,看板数据必须达到以下基本要求: 数据准确--真实反映生产情况 数 ...

  3. RAG 系统高效检索提升秘籍:如何精准选择 BGE 智源、GTE 阿里与 Jina 等的嵌入与精排模型的完美搭配

    RAG 系统高效检索提升秘籍:如何精准选择 BGE 智源.GTE 阿里与 Jina 等的嵌入与精排模型的完美搭配 Text Embedding 榜单:MTEB.C-MTEB <MTEB: Mas ...

  4. AT cf17 final J Tree MST

    AT cf17 final J Tree MST 考场上想出的黑题,然而写挂了-- 思路 考场推出 boruvka 算法,会的直接跳过就好. 结论:一个点向另外一个点连出的最小边,一定在最小生成树上. ...

  5. Python脚本消费多个Kafka topic

    在Python中消费多个Kafka topic,可以使用kafka-python库,这是一个流行的Kafka客户端库.以下是一个详细的代码示例,展示如何创建一个Kafka消费者,并同时消费多个Kafk ...

  6. vue标签页tabs和codemirror一起使用

    vue标签页tabs和codemirror一起使用时, codemirror 会变形 要注意tab切换时,codemirror必须刷新配置 <el-tabs v-model="conf ...

  7. Redis之内存占用分析工具RDR

    GitHub:https://github.com/xueqiu/rdr 场景:最近Redis爆满, 但是不清楚具体哪些键占用的空间较多, 是否有设置过期时间等情况 1.下载软件 windows:ht ...

  8. BeautifulSoup(bs4)细致讲解

    BeautifulSoup(bs4) BeautifulSoup是python的一个库,最主要的功能是从网页爬取数据,官方是这样解释的:BeautifulSoup提供一些简单,python式函数来处理 ...

  9. 搭建一个文件存储服务器minio,实现文件存储

    搭建一个文件存储服务器minio,实现文件存储 Minio是一个开源的.自托管的对象存储服务器,它提供了类似于云存储服务的功能.你可以使用Minio搭建自己的私有云存储解决方案,或者作为公共存储服务的 ...

  10. 使用 Autofac, MediatR 和 FluentValidator 构建松耦合 ASP.NET Core API 应用

    使用 MediatR 和 FluentValidator 1. 创建示例文件夹 Sample 首先,创建示例文件夹 Sample. 2. 创建表示层项目 Web 在示例文件夹 Sample 中,使用标 ...