Manim 是解释性数学视频的动画引擎。 您可以使用它来制作数学视频(或其他字段)。也许你们会在有有些平台上会看过特别好看的数学动画,例如 3Blue1Brown等。这些动画特别好看,还特别丝滑,基本找不到太大的毛病。
我当初用python直接运行manim代码,方法就是先把代码运行完成,没有出错后用命令行进行运行,最后得到结果。这样能得到结果但是运行很慢(因为主要靠cpu运行)。然后最近突然想可不可以用jupyter notebook来运行呢?想了很久,最后实现了在jupyter notebook上运行,并得到结果。
当时我看manim的官网进项安装,步步出错,还很复杂 。
今天就跟大家分享一下,塔尖环境的过程把。
看到官网为我们发现需要那些,首先安装python,需要3.7或者以上的版本。这样会避免后期出现的版本排斥的问题。这个需要去官网去直接下载就好(Welcome to Python.org)。然后安装的时候默认同意安装到系统环境上,也就是系统的环境上的path上。
第二部是安装FFmpeg,按照官网上的链接直接下载(FFmpeg)。
因为下载缓慢,错译需要耐心等待。然后下载完成后需要添加到环境变量中。
步骤是:Windows+X,然后选择系统。然后选择高级系统设置,然后选择环境变量,然后选择系统变量上的Path然后点击‘编辑’,然后新建,然后新建里“粘贴” ffmeg 的bin文件夹(ffmeg\ffmpeg-master-latest-win64-gpl\bin)
下一步是安装LaTex。我这里安装的basic-miktex-24.1-x64.(Getting MiKTeX),
看着自己的计算机性能选择相对应的版本,然后进行安装。安装完成以后,按照上一步一样把latex的bin文件夹添加到系统变量上。
下一步是安装jupyter notebook。jupyter notebook 是简单来说anaconda的一个变相编译器。我们只安装anaconda就好(Download Anaconda Distribution | Anaconda)。在这里看着需求下载。
下载完成后需要安装,安装完成以后还需要一步,就是把他安装到系统变量里的path上。这些完成以后打开电脑的命令行。可以直接点win+R然后输入cmd直接打开命令行。命令行上输入jupyter notebook 点回撤就能打开jupyter notebook 啦。
选择python3。进入运行框里。
输入pip install manim,安装manim 库。安装需要时间要耐心等待。安装成功以后搭建环境基本完成了。我们可以运行想要的代码并得到结果啦。
运行第一个manim 代码。
from manim import *class ManimCELogo02(Scene):def construct(self):self.camera.background_color = "#ece6e2"logo_green = "#87c2a5"logo_blue = "#525893"logo_red = "#e07a5f"logo_black = "#343434"ds_m = MathTex(r"\mathbb{MANIM}", fill_color=logo_black).scale(7)ds_m.shift(2 * LEFT + 3.5 * UP)circle = Circle(color=logo_green, fill_opacity=1).shift(5*LEFT)square = Square(color=logo_blue, fill_opacity=1).shift(UP+2*LEFT)triangle = Triangle(color=logo_red, fill_opacity=1).shift(RIGHT)logo = VGroup(triangle, square, circle, ds_m) # order matterslogo.move_to(ORIGIN)self.add(logo)
代码完成以后我们点运行,没有报错,但是同样没有结果,这什么情况呢?对,就是没有出结果的哪一行没有写进去。
这时候重量级人物出场。魔术师:%%manim -qm -v WARNING
这行代码是一个特殊的Jupyter Notebook魔术命令,用于在Jupyter Notebook中运行Manim动画。下面是关于这行代码的解释:
%%manim
: 这是Jupyter Notebook中的一个自定义魔术命令,用于告诉Jupyter Notebook执行下面的代码块作为Manim动画。-qm
: 这个参数告诉Manim在“快速模式”下运行,这意味着Manim将使用较低的质量和渲染设置来加快渲染速度。-v WARNING
: 这个参数设置了Manim的日志级别为“WARNING”,这意味着只会显示警告级别的日志信息,而不会显示更低级别的信息。ManimCELogo02
: 这是要执行的Manim场景类的名称,指示Manim应该运行哪个场景以生成动画。
通过执行这行代码,您可以在Jupyter Notebook中使用Manim来生成动画,并使用指定的参数进行配置和控制。
%%manim -qm -v WARNING ManimCELogo02
from manim import *class ManimCELogo02(Scene):def construct(self):self.camera.background_color = "#ece6e2"logo_green = "#87c2a5"logo_blue = "#525893"logo_red = "#e07a5f"logo_black = "#343434"ds_m = MathTex(r"\mathbb{MANIM}", fill_color=logo_black).scale(7)ds_m.shift(2 * LEFT + 3.5 * UP)circle = Circle(color=logo_green, fill_opacity=1).shift(5*LEFT)square = Square(color=logo_blue, fill_opacity=1).shift(UP+2*LEFT)triangle = Triangle(color=logo_red, fill_opacity=1).shift(RIGHT)logo = VGroup(triangle, square, circle, ds_m) # order matterslogo.move_to(ORIGIN)self.add(logo)
点运行后我们得到结果。结果如下:
我们得到第一个图像。我们还想得到一个动画视频。我们想试一下效果,然后我们编写了代码,开始了测试:
from manim import *class OpeningManim(Scene):def construct(self):title = Tex(r"This is my first \LaTeX")basel = MathTex(r"f(x)=f(0)+\frac{f^{\prime}(0)}{1!} x+\frac{f^{\prime \prime}(0)}{2!} x^{2}+\frac{f^{\prime \prime \prime}(0)}{3!} x^{3}+ \\\ldots+\frac{f^{(n)}(0)}{n!} x^{n}+R_{n}(x)")VGroup(title, basel).arrange(DOWN)self.play(Write(title),FadeIn(basel, shift=DOWN),)self.wait()transform_title = Tex("That was a transform")transform_title.to_corner(UP + LEFT)self.play(Transform(title, transform_title),LaggedStart(*[FadeOut(obj, shift=DOWN) for obj in basel]),)self.wait()grid = NumberPlane()grid_title = Tex("This is a grid", font_size=72)grid_title.move_to(transform_title)self.add(grid, grid_title) # Make sure title is on top of gridself.play(FadeOut(title),FadeIn(grid_title, shift=UP),Create(grid, run_time=3, lag_ratio=0.1),)self.wait()grid_transform_title = Tex(r"That was a non-linear function \\ applied to the grid")grid_transform_title.move_to(grid_title, UL)grid.prepare_for_nonlinear_transform()self.play(grid.animate.apply_function(lambda p: p+ np.array([np.sin(p[1]),np.sin(p[0]),0,])),run_time=3,)self.wait()self.play(Transform(grid_title, grid_transform_title))self.wait()
我们还是得到想要的结果啦:(OpeningManim-CSDN直播)结果可以在我个人页面查看。