做出高逼格的数学动画

您所在的位置:网站首页 用flash制作数学动画 做出高逼格的数学动画

做出高逼格的数学动画

2024-07-12 10:40| 来源: 网络整理| 查看: 265

在之前的manim入门篇(一)中,我们了解了manim的安装配置,使用manim制作动画的基本流程以及包括基本图形、文字及简单动画的基本manim动画场景的制作。在这期中我们将继续学习manim入门的基础内容,主要包括上期结尾留下的小尾巴和这期要讲的文字动画、数学公式、函数图像绘制等。想要回顾上期内容可点击下面的链接(如果对manim的相关编程不太了解建议先从入门篇(一)开始看):

manim入门篇(一)传送门:

Chapter0:上一期的小练习——Love Death&Robots

运用上期所讲到的知识,完成效果如下图所示的manim小练习应该不算困难。

manim动画小练习

由于代码过多,我们按上一期中提到的一种思路,将construct函数分为## Making object,## position 及## Showing object三部分,分别负责创建物体及其各项属性、物体初始位置及物体的动画时序三部分,以下图片为三个部分的代码:

## Making object部分的代码## position部分的代码## Showing object部分的代码

基本上利用上一期的第二三四章的内容(主要是第四章基础图形部分的内容)就能完成。有的部分虽然没有直接讲到,但结合之前所讲及代码也应该能明白(如虽然没有讲self.play(ShowCreation(XXX))的作用,但类比self.play(FadeIn(XXX))所得的动画效果及ShowCreation本身的英文含义,不难发现其实这个方法的作用会在场景中显示XXX的生成过程)。若还有清楚的地方,可在评论留言或给我发消息(不敢保证秒回,但一般也不会太久)。

Chapter1:文字动画串讲

其实我们在上一期中所讲的前两个动画就涉及到了文字动画,在这里把相关的东西快速过一遍。这部分也不是很难,看看代码试着自己过一遍应该就熟悉了。

实例1.1 鲁迅名言

python代码如下:

实例1.1 python代码

这部分没什么新的东西,算是熟悉一下之前的内容。唯一之前没见过的应该是quote.to_edge()和quote2.get_corner(),其实这些方法也是改变Mobject位置的方法,和shift类似(如果要以场景边缘或中间为参考来改变位置使用to_edge或get_corner肯定更方便)

代码运行后的效果如下:

实例1.1 鲁迅名言

实例1.2 换个皮肤走下位

这里再稍微讲一下文字(其实也能运用到其他Mobject上)颜色位置等属性的调整。

实例1.2 python代码

稍微解释一下:

代码中label.bg=BackgroundRectangle()改变的是TextMobject背景的属性,这里将不透明度设为了1;

rotate(TAU/8)将物体进行了旋转,这里TAU为manimlib.constants中设置好的常量,其值为2*np.pi,也就是对应一周360度;

set_color_by_gradient(color_1, color_2, ... , color_n)能让物体颜色根据所给的值进行渐变;

运行代码后,结果如下:

实例1.2 运行结果

关于文字部分的基础操作就先讲到这里,还有很多东西对于Mobject是通用的,大家可以把对其他Mobject的一些操作用到文字上,或反过来把这章的东西用于其他Mobject,应该有更多发现。

Chapter2 数学公式基础

再讲使用manim制作数学公式动画之前,大家可以先运行一下下面这段程序:

Latex示例

其结果如下:

Latex示例运行结果

不难发现,我们所显示的数学公式动画其实和文字动画一样,都是使用TextMobject进行创建。但我们如果只用之前学习的内容,很难做出示例中的级数(其实就是巴塞尔问题)的动画,因为这里用到了Latex的相关知识。所以说如果你了解Latex的相关知识,结合之前的东西这章的内容就都明白了。如果不太熟悉也没关系,Latex是很好入门的,也能在其他地方发挥很大的作用(我最早接触Latex是在使用matplotlib需要显示数学公司时,对数学公式的排版十分方便)

LaTeX入门相关

(注:这里写得比较简略,因为这不是LaTex教程,而且我对LatTex也仅仅是能用但了解得不够深入)

LaTeX是一种基于ΤΕΧ的排版系统,我们在这里使用它对要在场景中展示的数学公式进行排版。LaTeX使用起来很容易,就是在你输入文本字符串的地方,将一些特殊的东西使用其规定的符号标注出来就行:

如:\\frac{1}{n^2} = \\frac{\\pi^2}{6}表示的就是示例中的级数,\\frac{分子}{分母}表示分数(fraction),^表示上标(下标用下划线“_”表示),\\pi表示数学符号π;

其实在使用LaTex时单反斜线\就可以了,但是为了避免出现转义字符的一些问题(比如\theta表示θ时,\t就会让程序误解),可以都用双斜线或使用r" ... ... "的形式,如:eq=TexMobject("\\vec{F}_{net} = \\sum_i \\vec{F}_i")和eq=TexMobject(r"\vec{F}_{net} = \sum_i \vec{F}_i")是等价的。

通常我们用$…$控制符来生成数学行内公式, 生成的数学公式将与文字并列而非示例中的公式块。

下面给出常见的一些符号的表示方式:

LaTex中的希腊字母 LaTex中的常用符号(一)LaTex中的常用符号(二)

以上包含了一些常用的字母和符号,如果有什么还不清楚的,可以百度或登录https://artofproblemsolving.com/wiki/index.php/LaTeX:Symbols进行查询。

有了上面的基础,我们就可以对在manim里玩数学公式了。

实例2.1 自然数立方和公式

我们做一个简单的立方和公式的展示动画来运用一下上面所学到的知识,python代码如下所示:

实例2.2 python代码

运行结果如下:

实例2.2 立方和公式展示动画

其实学到这里,我们用所学到的东西已经能做很多很有意思的视频了。比如现在,你所学到的知识完全可以完成我前不久(当时这个也算初学manim不久做的一个小练习)做的一个视频:

而且你如果把细节做得更好,或者有个很好的idea,最终效果应该比我这个更好。

Chapter3:函数图像绘制入门

实例3.1 绘制简单的三角函数

先贴代码再讲解:

实例3.1 python代码

程序讲解:

与之前的场景不同,我们这次创建的class PlotFunctions(GraphScene)所继承的父类是GraphScene(而不是Scene)。事实上GraphScene也是继承自Scene,是manim中专门用来实现函数图像绘制的模块;

一开始定义的CONFIG字典实际上确定了构造函数中成员变量的值,这是由于GraphScene和Scene都继承自父类Container,而Container的构造函数会使用CONFIG中的键和值进行构造(详细内容可查看其源代码的manim-master\manimlib\container中的container.py及manim-master\utils\config_ops.py中的digest_config方法)。你可以不用深究其含义,简单理解为这个字典对一些场景的属性和我们希望用到的一些参数进行了初始化配置,之后可以使用self.XXX来调用就ok了;

绘图所用的方法根据代码及其英文含义很容易理解,如self.get_graph(self.func_to_graph, self.function_color)就表示使用get_graph方法在GraphScene中绘制func_to_graph定义的函数,其颜色为self.function_color(根据CONFIG我们知道为红色RED),其余同理;

运行代码,其结果如下:

实例3.1 绘制简单的三角函数结束语及下期预告

这次的内容就这么多,如果不熟悉LaTex的朋友可以在其他地方补充学习一下相关的知识。如果你本身对LaTex比较熟悉,那这一期的内容应该对你来说很简单。

这一期相比上一期来说内容可能略微少一点(五一节嘛,浪一下),我之后还会继续更新关于manim学习的总结,也会试着再用manim或其他做一些有意思的东西。关于manim这块目前的想法是manim入门篇还会再写一期,然后我会用manim做一些有意思的东西,如果值得一写,就写成manim实例篇。学习编程在入门之后做一些有意思的实例应该是极好的。

就酱紫了,谢谢观看,我们下期见o(* ̄▽ ̄*)o

如果你想继续关注manim系列的更新或对up主的其他作品也感兴趣的话,不妨点一波关注

(明示一下2333)

使用manim制作的骗赞动画



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3