manim边学边做--渐变生长

news/2024/12/17 8:37:05/文章来源:https://www.cnblogs.com/wang_yb/p/18611481

本篇介绍Manim中的渐变生长类的动画。

这类动画的特点是可以清晰地展示图形的生成过程、物体的运动变化,帮助我们更好地理解抽象概念和复杂结构。

渐变生长类的动画的主要有:

  1. GrowArrow:让箭头从起始点按设定路径(如直线或弧线)和速度动态生长
  2. GrowFromCenter:使对象以自身中心为起点,向四周按指定比例和速度均匀扩展生长
  3. GrowFromEdge:让对象从指定边缘开始,按照设定的速度和程度向内部或外部生长
  4. GrowFromPoint:从一个点开始,按照自定义的生长函数和速度来使对象生长
  5. SpinInFromNothing:结合旋转和渐显效果,使对象从无到有并伴随着旋转而出现

1. 动画概述

1.1. GrowArrow

GrowArrow主要用于箭头(Arrow)对象的动画效果,能够让箭头从无到有地生长出来,给人一种动态的引导视觉效果。

它的动画过程比较平滑,能够很好地控制箭头生长的速度和方向,主要用于展示矢量相关内容的动画。

它的主要参数有:

参数名称 类型 说明
arrow Arrow类型 进行动画的箭头对象
point_color Color 箭头在生长到完整大小之前的初始颜色

主要方法有:

名称 说明
create_starting_mobject 用于创建动画起始时的对象状态

1.2. GrowFromCenter

GrowFromCenter以对象的中心为起点,向四周扩展生长。

这种生长方式给人一种对称、均匀的视觉感受,使得对象的出现更加自然和美观。

对于具有中心对称性的对象,能够很好地突出其对称性,它适合用于展现图形从中心构建过程的动画。

它的主要参数有:

参数名称 类型 说明
mobject Mobject 要进行动画的对象
point_color Color 对象在生长到完整大小之前的初始颜色

1.3. GrowFromEdge

GrowFromEdge以对象的边缘为起始点进行生长,能够很好地体现图形的边界扩展过程。

这种方式与GrowFromCenter形成对比,更侧重于展示图形是如何从边界开始构建的。

它可以根据需要选择不同的边缘作为生长起始边,常用于突出图形边界扩展的效果。

它的主要参数有:

参数名称 类型 说明
mobject Mobject 要进行动画的对象
edge np.ndarray 指定生长的起始边缘方向
point_color Color 对象在生长到完整大小之前的初始颜色

edge参数可以使用预定义的方向常量(如DOWNRIGHTUR等)来指定对象的边界框边缘方向,

从而确定从哪个边缘开始生长。

1.4. GrowFromPoint

GrowFromPoint从指定的一个点开始生长,这个点可以是对象内部或外部的任意一点。

这种方式提供了高度的定制性,能够聚焦于对象在某个特定位置的生长过程。

它可以用于创建一些具有创意的动画效果,比如让多个对象从不同的点同时生长,形成一个复杂的场景。

它的主要参数有:

参数名称 类型 说明
mobject Mobject 要进行动画的对象
point np.ndarray 指定对象生长的起始点
point_color Color 对象在生长到完整大小之前的初始颜色

主要方法有:

名称 说明
create_starting_mobject 创建动画起始时的对象状态
create_target 创建动画的目标对象状态

1.5. SpinInFromNothing

SpinInFromNothing结合了旋转和从无到有的出现效果。

对象在旋转的同时逐渐显现,给人一种从虚无中旋转诞生的感觉

可以控制旋转的角度、方向和速度,以及对象出现的速度,从而实现各种不同的入场效果。

它的主要参数有:

参数名称 类型 说明
mobject Mobject 要进行动画的对象
angle float 指定对象在生长到完整大小之前旋转的角度
point_color Color 对象在生长到完整大小之前的初始颜色

angle参数设置2 * PI表示对象将完整旋转一周(360 度)后完全出现。

2. 使用示例

下面通过示例来演示各个生长类动画的使用。

2.1. GrowArrow 示例

在这个示例中,创建了三个不同方向的箭头。

对于每个箭头,使用GrowArrow动画并设置不同的初始颜色(point_color),为了能看出初始颜色,设置了箭头的最终颜色和初始颜色不一样。

# 创建不同方向的箭头
a1 = Arrow(LEFT * 2, RIGHT * 2, color=RED)
a2 = Arrow(UP * 2, DOWN * 2, color=BLUE)
a3 = Arrow(UR * 2, DL * 2, color=GREEN)# 以不同颜色和路径弧度展示GrowArrow动画
self.play(GrowArrow(a1, point_color=BLUE),
)
self.play(GrowArrow(a2, point_color=GREEN),
)
self.play(GrowArrow(a3, point_color=RED),
)

2.2. GrowFromCenter 示例

此示例创建了圆形、正方形和三角形。在GrowFromCenter动画中,为每个图形设置不同的初始颜色(point_color)。

# 创建不同形状的对象
circle = Circle()
square = Square(color=BLUE)
triangle = Triangle(color=YELLOW)# 以不同缩放比例和中心点展示GrowFromCenter动画
self.play(GrowFromCenter(circle, point_color=BLUE),
)
self.play(GrowFromCenter(square, point_color=YELLOW),
)
self.play(GrowFromCenter(triangle, point_color=RED),
)

2.3. GrowFromEdge 示例

在这个例子中,创建三个矩形。针对每个矩形的GrowFromEdge动画,指定了不同的起始边缘(edge)和不同的初始颜色(point_color)。

通过不同的边缘生长,可以看到矩形从边缘开始生长的多样化效果。

# 创建多个矩形
r1 = Rectangle(color=BLUE).shift(UP)
r2 = Rectangle(color=RED)
r3 = Rectangle(color=YELLOW).shift(DOWN)# 从不同边缘和以不同速度展示GrowFromEdge动画
self.play(GrowFromEdge(r1, DOWN, point_color=BLUE),
)
self.play(GrowFromEdge(r2, RIGHT, point_color=RED),
)
self.play(GrowFromEdge(r3, UP, point_color=YELLOW),
)

2.4. GrowFromPoint 示例

该示例先创建了三个点,然后在通过不同的起始点和自定义生长函数,展示了GrowFromPoint动画在灵活指定生长起始点和控制生长方式方面的强大功能。

# 创建一个点和多个正方形
p1 = Dot(point=LEFT * 2, color=BLUE)
p2 = Dot(point=UP * 2, color=RED)
p3 = Dot(point=RIGHT * 2 + DOWN * 2, color=YELLOW)
s1 = Square(color=BLUE).shift(LEFT * 2)
s2 = Square(color=RED)
s3 = Square(color=YELLOW).shift(RIGHT * 2)self.add(p1, p2, p3)
self.play(GrowFromPoint(s1, p1.get_center()),
)
self.play(GrowFromPoint(s2, p2.get_center(), grow_function=lambda t: t**2,),
)
self.play(GrowFromPoint(s3, p3.get_center()),
)

2.5. SpinInFromNothing 示例

这里创建了三个不同边数的多边形。

SpinInFromNothing动画中,为每个多边形设置了不同的旋转角度(angle)和初始颜色(point_color)。

通过不同的旋转角度和颜色设置,可以看到多边形从无到有并伴随着旋转和颜色变化的生长效果。

# 创建多个多边形
p1 = RegularPolygon(5).shift(LEFT * 2)
p2 = RegularPolygon(6, color=RED)
p3 = RegularPolygon(8, color=YELLOW).shift(RIGHT * 2)# 以不同旋转角度和颜色展示SpinInFromNothing动画
self.play(SpinInFromNothing(p1),
)
self.play(SpinInFromNothing(p2, angle=np.pi),
)
self.play(SpinInFromNothing(p3, angle=3 * np.pi / 2, point_color=PINK),
)

3. 附件

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/854161.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FM与AM的区别

AM和FM都是无线电里面的概念,其中AM是Amplitude Modulation的缩写,而FM是Frequency Modulation的缩写。 其中AM是调幅,是通过振幅的变化来传递信息,其频率是固定的。而FM是调频,是通过频率的变化来传递信息,振幅保持不变。 下面来看1张动图就理解了。可以看到AM随着信号振幅的变…

html元素标题显示2行信息

在块div或行内span的标题显示2行信息。如下当mouse移至紫色箭头所指的bytes时,它会title显示2行message,如红色箭头所指。.代码示例,

Java8--方法--String--join

String greeting = "Hello"; String greetingjoin = greeting.join(";",greeting,greeting,greeting); String Stringjoin = String.join(";",greeting,greeting,greeting); System.out.println(greetingjoin.equals(Stringjoin)); 效果图:

知识付费的直播系统

图源 凸知@www.tuzhi.ltd随着数字技术和互联网基础设施的不断升级,在线教育逐渐成为现代终身学习的重要载体。尤其是在知识经济的大背景下,越来越多的行业人士开始通过互联网平台传授专业知识和实践经验。作为新兴的商业模式之一,知识付费在线教育以其高度自由和灵活性吸引着…

用于视频稳定的3D多帧融合

用于视频稳定的3D多帧融合介绍了一种新的视频稳定框架RStab,它通过体绘制集成了3D多帧融合。与传统方法不同,引入了一种3D多帧视角来生成稳定的图像,解决了在保持结构的同时生成全帧的挑战。改进的RStab框架的核心在于稳定渲染(SR),这是一个体绘制模块,融合了3D空间中的…

CDFormer:当退化预测包含盲图像超分辨率的扩散模型时

CDFormer:当退化预测包含盲图像超分辨率的扩散模型时现有的盲图像超分辨率(BSR)方法侧重于估计核或退化信息,但长期以来忽视了基本的内容细节。提出了一种新的BSR方法,即内容感知退化驱动变换器(CDFormer),用于捕获退化和内容表示。然而,低分辨率图像无法提供足够的内…

《AI芯片开发核心技术详解》新书推荐

由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。概述强力解析AI芯片的核心技术开发,内容翔实、知识点新颖、实践性很强、图文并茂。 由清华大学出版社资深编辑赵佳霓老师…

第8次作业

第8次作业 SSL协议抓包实验 一、实验目的 本实验旨在通过配置Web服务器端的SSL证书,并对比分析HTTP与HTTPS两种协议下的数据报内容,深入理解SSL协议的工作原理及其在信息安全中的重要性。 三、实验步骤 1、配置Web服务器SSL证书 2、抓包分析HTTP与HTTPS数据报四、实验结果与分…

python 安装talib ta-lib

ta-lib的whl轮子文件下载地址在这里 https://github.com/cgohlke/talib-build/releases根据自己电脑版本下载 pip install ./ta_lib-0.5.1-cp312-cp312-win_amd64.whl

第7次作业

第7次作业 一、实验名称:安装PKI平台熟悉PKI 证书申请、证书签发等操作过程 二、实验目的 通过这个实验加深对非对称加密、数字签名、数字证书等一些基本概念的了解 三、实验原理与理论基础 数字证书:采用公钥密码体制,即利用一对互相匹配的密钥进行加密、解密。每个用户拥有…

java 选择排序,涵盖工作原理、算法分析、实现细节、优缺点以及一些实际应用场景

选择排序的详细解析更深入地探讨选择排序的各个方面,包括其工作原理、算法分析、实现细节、优缺点以及一些实际应用场景。 动画演示 1. 基本概念选择排序是一种简单的比较排序算法。它的核心思想是将数组分为两个部分:已排序部分和未排序部分。每一轮从未排序部分找到最小(…

云浮知识付费系统课程数据

本文将深入探讨在线教育与知识付费行业的现状与发展趋势,并以实际数据和案例加以说明,特别关注教育和软件行业所面对的机遇和挑战。文章将以专业知识背景和技术应用为导向,展示在线学习平台如何在提高效率和实现个性化教育方面扮演关键角色。图源 www.tuzhi.ltd随着互联网和…