我上周介绍了3b1b的manim项目用Python快乐学数学,Github万星神器Manim简介,原计划在暑假期间教一下孩子在manim上做一个入门动画。结果没想到在今天教孩子“hello world"的时候,宝宝竟然还记得周末是父亲节,直接问我“父亲节快乐”应该怎么做。我真的是太惊喜了,下面我就会使用Manim来制作祝福的教程奉送给大家。
Manim中文字属于TextMobject类,圆形(circle)、方形(square)形状属于Mobject类,”hello world“这种简单显示文字的要求,只需要新建一个TextMobject类的对象,然后显示出来即可。咱们可以继续拿example_scenes.py开刀,使用gedit example_scenes.py命令打开example_scenes.py,在其中新建一个HappyFathersDay函数即可,具体代码如下:
Class HappyFathersDay(Scene):
Def construct(self):
happyfatherdayText=TextMobject(“Happy father’s Day”)#然后再定义一个文字对
Self.play(ShowCreation(happyfatherdayText))#再把这个对象show出来即可。
当然这里如果读者把第三行的“Happy father's day"换成”hello world“,就是经典的hello world教程了。然后使用以下命令就能看到效果了。
python extract_scene.py example_scenes.py HappyFathersDay -pl
如果读者遇到报错” latex:not found"那可没关系,这是因为latex太大,安装起来可能漏过了一些包,使用以下命令就能修复
sudo apt install texlive-full --fix-missing
之后生成的结果如下,虽然简单,而且4行代码中的3行半还都是我敲的,不过孩子能有这份心我真的欣慰啊。
除了文字和形状外,manim还可以定义点。语法如下:DotN=Dot(color,point),通过点还可以定义线这个也简单lineN=Line(dotn1,dotn2),有了线就可以做一淡入淡出的工作了。具体代码如下:
Class HappyFathersDay(Scene):
Def construct(self):
happyfatherdayText=TextMobject(“Happy father’s Day”)
Dot1=Dot(color=COLOR_MAP[“RED_A”],point=UL+DL)
Dot2=Dot(color=COLOR_MAP[“RED_A”],point=UR+DR)
Line1=Line(Dot1,Dot2)
self.play(ShowCreation(happyfatherdayText))#显示文字
self.play(Transform(happyfatherdayText, Line1))#变为直线
self.play(FadeOut(Line1))#直线淡出
上述代码使用“python extract_scene.py example_scenes.py HappyFathersDay -pl”生成后的效果如下:
那么淡入的效果其实不贴代码想必读者也可以完成了吧。
Manim之父3b1b实在是一个伟大的机构,笔者随手就能做出一些非常强悍数学动画效果出来,比如像这样,我在后续的博客中有机会还会继续向大家介绍Manim的使用心得。