Manim:超赞的Python数学动画库
Python制作数学动画
1. 引言
本文将带大家走进Manim
的世界!这是一个由大名鼎鼎的3Blue1Brown
的作者Grant Sanderson
创建,它能通过精美的动画让数学栩栩如生,特别适合用于制作各类数学教学视频。
在本文中,我们将探索Manim
在数学可视化方面的强大功能,看看它是如何将抽象的概念变得引人入胜、令人惊叹的。准备好大开眼界吧!
2. 安装
在正式开始之前,我们需要进行安装,一般使用pip
即可安装,命令如下:
pip install manim
安装完成后,我们就可以开始一起探索这个超棒的动画库了。准备好用 Manim
制作精美动画了吗?让我们接下来一起深入了解五个示例!我们将从简单的动画开始,逐步过渡到更复杂的动画,展示Manim
的强大功能和直观性。
3. 显示简单文本
首先,让我们创建一个动画,在屏幕上显示文字 "Hello,Manim!"
。下面是实现这一目的的代码片段:
# scene.py
from manim import *
class HelloWorld(Scene):
def construct(self):
text = Text("Hello, Manim!")
self.play(Write(text))
self.wait()
之后在当前文件所在目录下的命令行窗口,执行以下命令:
manim -pql scene.py HelloWorld
即可得到如下结果:
4. 分析解释
在上述中,首先我们导入了 Manim
的基本组件,定义了一个继承自Scene
的自定义类 HelloWorld
,并创建了一个包含输出信息的Text
对象,使用 Write
函数制作文本动画,self.play()
显示动画,self.wait()
暂停动画片刻。
此外,我们对上述运行命令行进行分析:
manim -pql scene.py HelloWorld
首先,上述命令在包含描述绘画代码的文件scene.py
上执行manim
。此外,此命令告诉 manim
要渲染的确切场景,在本例中,它是HelloWorld
。这是必需的,因为单个场景文件scene.py
可能包含多个场景类的定义。
接下来,标志位-p
告诉 manim
在渲染场景后播放场景,而 -ql
标志位告诉 manim
以低质量渲染场景。当然,指定渲染场景动画质量的其他选项还包括 -qm
、-qh
和 -qk
,分别表示中、高和4k
高清质量。
5. 绘制几何图形
现在,让我们用一个圆形和一个正方形制作一个简单的动画。
# scene.py
from manim import *
class Shapes(Scene):
def construct(self):
circle = Circle()
square = Square()
self.play(Create(circle))
self.play(circle.animate.shift(LEFT))
self.play(Create(square))
self.play(square.animate.shift(RIGHT))
self.wait()
上述代码中,我们定义了一个形状类Shapes
,并创建了圆形和正方形对象。然后,我们使用 Create
绘制相应对象的形状,并使用animate.shift()
方法将它们分别向左和向右移动。
同样在命令行中,运行如下命令:
manim -pql scene.py Shapes
得到结果如下:
6. 动画组合
接着让我们用动画演示从正方形到圆形的转换。
# scene.py
from manim import *
class Transformation(Scene):
def construct(self):
square = Square()
circle = Circle()
self.play(Create(square))
self.play(Transform(square, circle))
self.wait()
在本例中,我们同时创建了正方形和圆形对象,使用创建动画函数Create
绘制正方形,然后使用变换动画函数Transform
将正方形变为圆形。
同样在命令行中,运行如下命令:
manim -pql scene.py Transformation
得到结果如下:
7. 演示数学函数
接着让我们来绘制一条简单的抛物线:
# scene.py
class FunctionPlot(Scene):
def construct(self):
ax = Axes(
x_range=[-5, 5, 1],
y_range=[-3, 3, 1],
x_length=10,
y_length=6,
axis_config={"include_numbers": True},
)
func = lambda x: 0.1 * (x**2)
curve = ax.plot(func, color=YELLOW)
self.play(Create(ax))
self.play(Write(curve))
self.wait()
在上述代码中,我们首先要设置一个Axes
对象,配置其 x
方向和 y
方向的范围及长度,并启用沿轴显示数字。接下来,我们为抛物线曲线(y=0.1x^2)
定义一个 lambda
函数。最后我们使用 plot()
方法生成函数的图形,并将其存储在变量curve
中。
同样在命令行中,运行如下命令:
manim -pql scene.py FunctionPlot
得到结果如下:
8. 演示复杂公式
事实上,我们经常会遇到一些数学上复杂的计算公式,此时我们可以使用 LaTeX
代码来表示对应的方程,举例如下:
class LaTeXFormula(Scene):
def construct(self):
formula = MathTex(r"\int_{-\infty}^{\infty} \frac{1}{\sqrt{2\pi\sigma^2}}dx")
self.play(Write(formula))
self.wait()
我们创建一个名为formula
的MathTex
对象,其中包含描述方程的LaTeX
代码。运行上述代码后,可以得到结果动画如下:
9. 总结
只需简单几行代码,大家就可以使用 Manim
来制作出令人惊叹的数学动画。对数学和编程感兴趣的同学,推荐大家快来尝试,享受其中的乐趣吧!
更多推荐
所有评论(0)