首页 > 其他分享 >manim边做边学--淡入淡出变换

manim边做边学--淡入淡出变换

时间:2025-01-22 12:20:42浏览次数:1  
标签:动画 淡入 淡入淡出 -- 渐变 变换 边学 color Mobject

今天介绍Manim中用于淡入淡出变换的3个动画类:

  1. FadeToColor:聚焦于对象颜色的平滑转换,通过渐变增强视觉效果
  2. FadeTransform:实现不同对象之间的渐变替换,让元素转换更加连贯
  3. FadeTransformPieces:突出将对象碎片化并对各部分单独变换,适用于复杂物体的分解重组

这三者都在增强动画的表现力和连贯性方面发挥着重要作用,但在操作对象和变换方式上各有侧重,可根据具体场景灵活选用,以创造出多样、吸引人的动画效果。

1. 动画概述

1.1. FadeToColor

当需要将一个对象的颜色平滑地过渡到另一种颜色时,FadeToColor 是一个很好的选择。

例如,在演示颜色变化对某个图形或文本的影响时,可以使用它将图形或文本从初始颜色渐变为目标颜色。

也可以用于强调某个元素,通过改变其颜色吸引观众的注意力,同时产生渐变的视觉效果,使过渡更加自然。

FadeToColor动画的特点是在一定的时间内将一个对象的颜色逐渐淡入到另一个指定的颜色。

它的参数主要有:

参数名称 类型 说明
mobject Mobject 应用颜色变化的对象
color str 指定要变化到的目标颜色

1.2. FadeTransform

FadeTransform适用于将一个对象变换为另一个对象的场景。

例如,将一个圆形平滑地变换为一个正方形,或者将一段文本变换为另一个文本。

在展示元素之间的替换或转换关系时,使用 FadeTransform 可以让观众清晰地看到一个元素如何逐渐变成另一个元素,而不是突兀地消失和出现。

FadeToColor动画的特点是可以在两个不同的 Mobject 之间进行渐变变换。

动画过程中,会产生一种类似于旧对象逐渐消失,新对象逐渐浮现的效果,两个对象的轮廓在变换过程中会有融合和过渡。

它的参数主要有:

参数名称 类型 说明
mobject Mobject 起始的 Mobject
target_mobject Mobject 目标 Mobject
stretch bool 控制目标 Mobject 在动画过程中是否拉伸
dim_to_match int 若目标 Mobject 不自动拉伸,此参数可调整目标 Mobject 移入时的初始缩放

1.3. FadeTransformPieces

当需要对一个对象进行碎片化的变换时,可以使用FadeTransformPieces

例如,将一个复杂的图形拆分成多个部分,然后将这些部分分别变换为另一个复杂图形的对应部分。

在演示物体的分解和重组时,它能很好地展示各个部分的变化过程。

与上一节中的FadeTransform 不同,FadeTransformPieces更侧重于将对象分解为多个部分,然后对每个部分进行单独的变换。

可以为每个部分生成独立的变换动画,使整个对象的变换过程更加细致和有层次感。

FadeTransformPieces继承自FadeTransform ,它的参数和FadeTransform类似 :

参数名称 类型 说明
mobject Mobject 起始的 Mobject
target_mobject Mobject 目标 Mobject
stretch bool 控制目标 Mobject 在动画过程中是否拉伸
dim_to_match int 若目标 Mobject 不自动拉伸,此参数可调整目标 Mobject 移入时的初始缩放

2. 使用示例

这三个类多用在动画转场的时候,使用也比较简单,下面通过示例演示如何使用它们。

2.1. 图形颜色淡入渐变

这个示例主要展示颜色的渐变效果。

首先在场景中创建一个蓝色的正方形,通过FadeToColor动画,让正方形以淡入的方式依次逐渐变为黄色,红色和绿色。

FadeToColor动画效果适用于需要突出显示某个图形。

# 创建一个正方形
square = Square(color=BLUE, side_length=2)
self.add(square)

# 展示将正方形淡入渐变为不同颜色
self.play(FadeToColor(square, color=YELLOW))
self.play(FadeToColor(square, color=RED))
self.play(FadeToColor(square, color=GREEN))

2.2. 图形平滑淡入变换

这个示例用于展示图形间的平滑渐变转换。

开始时,在场景中创建一个绿色的圆形,随后运用FadeTransform动画,圆形以淡入渐出的方式平滑地转变为一个黄色的三角形,这种效果常用于几何图形教学场景。

# 创建一个圆形
circle = Circle(color=GREEN, radius=0.8)
self.add(circle)

# 创建一个三角形作为目标图形
triangle = Triangle(color=YELLOW)
# 展示将圆形淡入渐变为三角形的动画
self.play(FadeTransform(circle, triangle))

2.3. 子图变换

这个示例聚焦于组合图形的子图形渐变。

首先绘制一个由 4 个小正方形排列成 2x2 网格组成的大正方形。

接着,利用FadeTransformPieces动画,每个小正方形独立地淡入渐变为另外一种图形,同样以 2x2 网格形式排列。

此效果适用于展示复杂图形由简单子图形逐步变换的过程,例如在图案设计教学中展示元素的变换。

# 创建一个由多个小正方形组成的大正方形
squares = VGroup(*[Square(side_length=0.5) for _ in range(4)])
squares.arrange_in_grid(rows=2, cols=2)
self.add(squares)

# 创建一个由多个图形组成的目标图形
c = Circle(radius=0.5, color=BLUE)
t = Triangle(color=GREEN)
s = Star(color=RED)
p = RegularPolygon(n=6, color=YELLOW)
vg = VGroup(c, t, s, p)
vg.arrange_in_grid(rows=2, cols=2)
# 展示将每个小正方形淡入渐变为小圆形的动画
self.play(FadeTransformPieces(squares, vg))

2.4. 逐个字符变换

这个示例应用于文本动画场景。

首先显示紫色的 “Hello” 文本,之后借助FadeTransformPieces动画,“Hello” 的每个字符逐个淡入渐变为大小不同,颜色不同的“Manim” 字符,实现文本内容的平滑过渡,常用于文字特效展示或故事叙述中文字的动态变化。

# 创建一个文本对象
text = Text("Hello", color=PURPLE)
self.add(text)

# 创建一个由单个字符组成的文本对象作为目标
colors = [RED, ORANGE, BLUE, GREEN, YELLOW]
font_sizes = [60, 40, 20, 40, 50]
new_text = VGroup(
    *[
        Text(
            char,
            font_size=font_sizes[idx],
            color=colors[idx],
        )
        for idx, char in enumerate("Manim")
    ]
)
new_text.arrange(RIGHT)
# 展示将每个字符淡入渐变为新字符的动画
self.play(FadeTransformPieces(text, new_text))

3. 附件

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

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

标签:动画,淡入,淡入淡出,--,渐变,变换,边学,color,Mobject
From: https://www.cnblogs.com/wang_yb/p/18685569

相关文章

  • vue常用指令
    vue常用指令v-bindv-bind指令可以用来绑定元素的属性,v-bind将imageSrc变量的值绑定到img标签的src属性上。例如:<divid="app"><imgv-bind:src="imageSrc"alt="Vue.js"></div><script>newVue({el:�......
  • 抽取网易云音乐热门评论(附代码):html+css+python+js 音乐与灵魂的碰撞
    抽取网易云音乐热门评论:html+css+python+js音乐与灵魂的碰撞代码链接不说废话,上代码!!!get.py#get.pyimporturllib.requestimporturllib.errorimporturllib.parseimportjson#抓取网易云音乐指定url的热评defget_hotComments(id):url='https://musi......
  • 一站式云原生支持,Alibaba Cloud Linux性能有多强?
    随着云计算技术的高速发展,企业对操作系统的需求不再局限于传统的服务器环境,而是更加关注与云原生架构的兼容性、性能优化以及系统的可扩展性。在这样的背景下,AlibabaCloudLinux应运而生,作为一款由阿里云自主研发的Linux操作系统,它专为云计算环境进行了深度优化,为企业和开发者......
  • C语言——前缀和,差分
    前缀和一维前缀和(One-dimensionalprefixsum)所谓一维,实际上就是一维数组,数组元素连续排列就可以看做一维的线,一维前缀和解决的主要问题是一维数组的区间和问题,即给定双指针l,r,求原数[l,r]内的和,利用数学上的数列来解决,即。()构建一维前缀和:由易知至少存在两个数值,所有我......
  • CDN添加CNAME操作
    CDN的CNAME配置是CDN接入的关键步骤,用于将用户的访问流量引导到CDN节点,以实现加速和防护功能。以下是详细的配置步骤和注意事项:1.什么是CNAME记录?CNAME(CanonicalName)记录是一种DNS记录类型,用于将一个域名指向另一个域名。在CDN中的作用:将你的域名解析到CDN......
  • 关于逻辑回归(LR)模型的简单介绍
            逻辑回归是一种经典的分类算法,尽管名字中含有“回归”,但实际上它是一种用于解决二分类问题的线性分类器。其核心思想是使用逻辑函数(通常是Sigmoid函数)将线性回归的结果映射到0到1的范围内,将线性回归的输出转换为概率,以此来表示样本属于某一类别的概率。......
  • HTML表单相关知识
    表单的基本结构标签名标签语义常用属性单/双标签form表单action:用于指定表单的提交地址(需与后端人员沟通确定)method:用于控制表单的提交方式target:用于控制表单如何打开页面,常用值如下:_self:在本页签打开页面       _blank:在新页签打开页面双input输入框ty......
  • 物联网边缘(Beta)离全面落地还有多远?
    随着物联网(IoT)技术的快速发展,“边缘计算”逐渐成为物联网领域的核心趋势之一。作为云计算的延伸和补充,物联网边缘技术(Beta)通过在靠近设备的边缘节点处理数据,实现更低的延迟、更高的效率以及更强的数据隐私保护。然而,尽管这一概念引发了行业的广泛关注,其全面落地和普及仍面临着......
  • node.js滑雪场管理系统程序+论文 可用于毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容选题背景关于滑雪场管理系统的研究,现有研究主要以传统的人工管理模式分析以及部分简单信息化管理系统构建为主。国外在滑雪场管理信息化方面起步较早,一些先进的滑雪......
  • 围术期脑卒中风险因子及应对策略研究报告
    一、引言1.1研究背景与意义围术期脑卒中是手术患者面临的严重并发症之一,可导致患者残疾甚至死亡,显著增加患者的医疗负担和社会成本。随着手术技术的不断进步,手术适应证逐渐拓宽,接受手术的患者数量日益增多,围术期脑卒中的问题愈发凸显。据相关研究统计,围术期脑卒中的发生率虽......