当前位置:首页 > 后端开发 > 正文内容

manim边做边学--文字的创立与毁掉

邻居的猫1个月前 (12-09)后端开发466

本篇开端介绍Manim中的动画模块,动画模块是整个结构的中心魅力地点。

Manim不只供给了能够直接完成各式各样动画作用的目标,

还供给了设置动画的时长、延迟时刻以及运动速率等参数,能够据此发挥自己的构思,自定义出异乎寻常的动画作用。

本篇首要介绍与文字相关的几个内置的动画作用。

  1. AddTextLetterByLetter:以逐一字母添加文本的方法来展现文字内容
  2. RemoveTextLetterByLetter:相似橡皮擦式的文本删去作用
  3. Write:模仿手写的作用
  4. Unwrite:与 Write 动画相反,用于模仿擦除手写内容或许吊销制造的进程

1. 动画概述

1.1. AddTextLetterByLetter

AddTextLetterByLetter动画的特色是以逐一字母添加文本的方法来展现文字内容,呈现出一种文字逐步生成的作用。

呈现的进程中能够操控字母呈现的速度,让动画的节奏更契合内容需求。

它首要适用于教育视频、解说类动画等场景。

例如在制造数学定了解说视频时,逐步展现定理内容,让观众能够逐字跟上节奏,增强了解。

它的首要参数有:

参数称号 类型 阐明
text Text 要逐一显现字母的文本内容
time_per_char float 字母呈现的频率,用于操控每个字母呈现的时刻距离
rate_func func 用于操控字母呈现的速率函数
run_time float 动画的运转时刻

1.2. RemoveTextLetterByLetter

RemoveTextLetterByLetter完成文本从后往前逐一字母消失的作用,

AddTextLetterByLetter 相反,有一种反向的动态感。

它能够和其他动画作用合作,例如在文字逐一删去后,紧接着呈现新的文本,构成连接的内容更新动画。

RemoveTextLetterByLetter一般用于橡皮擦式的文本删去作用,在需求吊销输入或许擦除内容的场景下运用。

比如在展现代码修改进程中,对错误代码进行逐一字母删去的动画。

它的首要参数有:

参数称号 类型 阐明
text Text 要逐一删去字母的文本内容
time_per_char float 操控每个字母删去的时刻距离,即字母逐一消失的频率
rate_func func 用于操控字母删去的速率函数
run_time float 动画的运转时刻

1.3. Write

Write动画从目标的开端点开端,以一种相似手写或许制造的方法来展现目标的呈现,给人一种天然生成的感觉。

不仅仅文字,关于凌乱的图形,也能够依据图形的结构和途径进行书写式的动画展现,而不是简略的全体呈现。

由于其模仿手写的作用,Write十分合适在数学推导、绘图进程或许艺术创造进程的展现中运用。

例如,在展现几何图形的制造进程时,也能够用 Write 动画来模仿手动画图的进程。

它的首要参数有:

参数称号 类型 阐明
vmobject VMobject 要进行手写动画的目标
rate_func func 用于操控书写的速率函数
reverse bool 用于操控书写方向是否反向

1.4. Unwrite

Unwrite动画与 Write 动画相反,用于模仿擦除手写内容或许吊销制造的进程。

它以一种相似于逆向书写的方法来使目标消失,和 Write 动画构成互补的作用。

在教育视频中,假如需求从头解说某个进程,能够用 Unwrite 动画来铲除之前的内容。

它的首要参数有:

参数称号 类型 阐明
vmobject VMobject 要进行擦除的目标
rate_func func 用于操控擦除的速率函数
reverse bool 用于操控擦除的次序(早年往后擦,仍是从后往前擦)

2. 运用示例

下面仍是结合一些依据实践场景简化的示例来演示文字创建和毁掉相关动画的运用。

2.1. 模仿常识解说的视频

在这个模仿常识解说视频的示例中,先经过AddTextLetterByLetter引进问题,引起观众的考虑。

然后用Write动画展现答案推导进程,协助观众了解。

之后运用RemoveTextLetterByLetter删去问题,防止画面过于凌乱,

最终用Unwrite擦除答案,为下一个常识点的解说做准备。

# 首要运用 AddTextLetterByLetter 逐一字母显现问题
question = Text("什么是勾股定理?")
question.shift(UP * 2)
self.play(AddTextLetterByLetter(question))
self.wait()

# 接着运用 Write 动画来展现答案的逐步推导进程
answer = MathTex(r"a^2 + b^2 = c^2", font_size=40)
answer.next_to(question, DOWN)
self.play(Write(answer), run_time=run_time)
self.wait()

# 然后运用 RemoveTextLetterByLetter 逐一字母删去问题
self.play(RemoveTextLetterByLetter(question))
self.wait()

# 最终运用 Unwrite 动画擦除答案
self.play(Unwrite(answer))

2.2. 模仿故事创造动画

此示例应用于故事创造动画中,AddTextLetterByLetter让故事标题逐一字母呈现,添加神秘感。

Write动画呈现故事最初,使观众沉浸在故事气氛中。

随后RemoveTextLetterByLetterUnwrite别离删去故事最初和标题,标志着故事一个阶段的完毕,为后续情节开展腾出画面空间。

其间RemoveTextLetterByLetter设置了reverse参数为False,这样删去字母的次序变成了自始至终。

# 用 AddTextLetterByLetter 显现故事标题
title = Text("The Mysterious Forest", color=YELLOW)
title.shift(UP * 2)
self.play(AddTextLetterByLetter(title))
self.wait()

# 运用 Write 动画展现故事的最初描绘
story = Text(
    "Once upon a time, \nthere was a young adventurer \nwho entered the forest.",
    font_size=30,
)
story.next_to(title, DOWN)
self.play(Write(story))
self.wait()

# 用 RemoveTextLetterByLetter 逐一字母删去故事最初
self.play(RemoveTextLetterByLetter(story))
self.wait()

# 运用 Unwrite 动画擦除标题
self.play(Unwrite(title, reverse=False))

2.3. 不必速率显现文本

在这个示例中,首要演示rate_func参数的运用。

别离运用3种不同的速率来显现文本,榜首行文本的显现速率是时刻的平方根,所以会逐步变慢;

第二行文本的显现速率是线性的,所以文本逐一匀速显现出来;

第二行文本的显现速率是时刻的平方,所以显现速度越来越快。

这样就展现了在manim中怎么运用rate_func参数来完成不同速率的文本显现动画作用。

# 准备要显现的文本
txt1 = Text("Slow speed for display text", font_size=30, color=BLUE)
txt2 = Text("Normal speed for display text", font_size=30, color=RED)
txt3 = Text("Fast speed for display text", font_size=30, color=GREEN)

txt1.shift(UP * 2)
# 设置不同的 rate_func 来操控文本呈现速率
# 越来越慢的速率,t 的平方根函数
self.play(AddTextLetterByLetter(txt1, rate_func=lambda t: t**0.5))
self.wait()

txt2.next_to(txt1, DOWN)
# 运用线性速率函数快速显现文本
self.play(AddTextLetterByLetter(txt2, rate_func=linear))
self.wait()

txt3.next_to(txt2, DOWN)
# 越来越快的速率,t 的平方函数
self.play(AddTextLetterByLetter(txt3, rate_func=lambda t: t**2))
self.wait()

# 铲除场景中的文本
self.play(Unwrite(txt1), Unwrite(txt2), Unwrite(txt3))

3. 附件

文中的代码仅仅要害部分的截取,完好的代码同享在网盘中(text.py),

下载地址: 完好代码 (拜访暗码: 6872)

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=128

标签: databookmanim
分享给朋友:

“manim边做边学--文字的创立与毁掉” 的相关文章

根据R言语进行MTM多窗谱分析

根据R言语进行MTM多窗谱分析

多窗谱剖析(Multi-Taper Method,MTM)是一种低方差、高分辨率的谱剖析办法,该办法可用于对气温、降水量等时刻序列数据的周期性改变剖析,且已在气候研讨领域中得到了广泛使用。本文将介绍MTM办法在R言语环境中的完成办法。 1 R言语代码 (1) 所需R包:multitaper (2)...

python能做什么,Python的广泛应用与无限可能

Python 是一种高级编程语言,因其简单易学、功能强大而广受欢迎。以下是 Python 能做的一些主要事情:1. Web 开发:Python 有许多流行的 Web 框架,如 Django 和 Flask,可以用来创建网站和 Web 应用程序。2. 数据分析:Python 有许多强大的库,如 Pan...

计算机二级c语言答案,计算机二级C语言考试答案解析

计算机二级c语言答案,计算机二级C语言考试答案解析

你可以通过以下资源获取计算机二级C语言的真题及答案:1. 历年计算机二级C语言真题及答案: 这里提供了历年计算机二级C语言的真题及答案,可以在线评测。2. C语言二级题库带答案 解析: 该文档包含程序设计题的题目、程序(含空)以及答案,适合进行练习。3. 2023年全国计...

java锁,Java锁概述

java锁,Java锁概述

Java 中的锁是一种用于控制多个线程对共享资源的访问的工具。在 Java 中,有多种类型的锁,包括:1. 内置锁(Intrinsic Locks): 内置锁是基于对象的锁,也称为监视器锁。每个 Java 对象都有一个内置锁,当一个线程访问对象的同步方法或同步代码块时,它会自动获取该对象的内置...

r语言中,从基础到实践

r语言中,从基础到实践

R语言是一种用于统计计算和图形显示的编程语言和软件环境。它广泛应用于数据分析、统计建模、机器学习等领域。R语言具有丰富的统计分析和图形绘制功能,支持多种数据格式,并且拥有庞大的用户社区和包生态系统。在R语言中,你可以进行以下操作:1. 数据操作:读取、写入、整理和转换数据。2. 统计分析:执行描述性...

c语言volatile的作用,深入解析C语言中的volatile关键字

在C语言中,`volatile`关键字用于告诉编译器,程序中存在某些变量,它们的值可能会在程序的控制之外被改变。这通常用于描述硬件寄存器、中断服务例程、多线程共享变量等情况。当编译器遇到一个被声明为`volatile`的变量时,它不会对该变量进行优化。这意味着每次访问该变量时,编译器都会直接从内存中...