相信很多同学就算没听过3Blue1Brown,也一定曾看过他们出品的视频,其从独特的视觉角度解说各种数学概念,内容包括线性代数、微积分、神经网络、傅里叶变换以及四元数等晦涩难懂的知识点。例如最火的《线性代数本质》系列视频。
那么这些视频是如何制作的呢?
这里需要引入的是Python的Manim视频支持引擎——专门用于支持数学可视化的媒体引擎,通过Manim并结合Python编程就可以实现3Blue1Brown的视频效果。
什么是Python
在当今备受推崇的大数据技术和人工智能技术领域,Python一直是一门备受瞩目的编程语言。它长期占据着TIOBE公布的编程语言排行榜的榜首位置。业界也一直流传着一句话:“人生苦短,我用Python”。Python作为一门计算机编程语言具有独特的优势,可以总结为以下三个特点:简洁性、易读性和可扩展性。
简洁性:
Python是一门非常简洁的脚本语言。很多时候,只需一行代码就能实现复杂的功能。比如,下面这行代码就能打印出一个九九乘法表。这种简洁性使得你能够将注意力集中在解决问题上,而不必花费过多时间去理解语言本身。
易读性: Python的语法风格清晰简约,易于阅读。有时候,它就像人类说话一样自然简单,没有过多的修饰。
可扩展性: Python最初的设计就注重可扩展性,它并没有将所有的特性和功能集成到核心语言中。Python提供了丰富的API和工具,以及众多第三方库,让你可以灵活扩展其功能。你可以根据需要选择合适的库来解决问题,这使得Python非常适合各种不同的应用场景。
什么是manim
[video(video-XSltZoq2-1701507173896)(type-csdn)(url-https://live.csdn.net/v/embed/348268)(image-https://video-community.csdnimg.cn/vod-84deb4/b5c3974090ec71eebffe4531959d0102/snapshots/c27edbef01424df2879bb7fdd67d0a3f-00001.jpg?auth_key=4855105689-0-0-0e92351ff29d33ff95daa30be6ad1ac3)(title-manim视频)]
manim是一个Python第三方库,全称是mathematical animation engine(数学动画引擎)。它是由斯坦福大学数学系学生Grant Sanderson在其YouTube频道3Blue1Brown上创建的。manim用于解说线性代数、微积分、神经网络、黎曼猜想、傅里叶变换以及四元数等数学概念。
manim因其精美的动画制作和独特的解释角度而广受关注,并吸引了越来越多的读者参与其中,共同贡献内容。manim经历了两个版本的迭代。第一代是ManimCairo,这是较早的版本,Grant Sanderson早期的项目都是在此版本中编译的。它使用cairo库作为渲染引擎。第二代是ManimGL,由Grant Sanderson等人开发的最新版本。该版本的最大改进是采用更强大的OpenGL库进行渲染。
此外,还有ManimCE(manim社区版),也使用OpenGL进行渲染。
manim使你能够以编程的方式创建精确的数学图形、动画和场景。与传统的几何画板等绘图软件不同,manim提供了一种全新的思路:“所思即可得”。它能够实现非常精准的绘制。在manim的世界中,你可以体验到一切皆可设置的感觉。颜色、粗细、长度、角度、时长、播放方式等均可通过设置来完成,这使你能够制作出具有个性化的数学动画。
版本 | 渲染引擎 | 库 |
ManimCairo | Cairo | manimlib |
ManimGL | OpenGL | manimgl |
ManimCE | OpenGL | manim |
如何来运行Manim
- 安装 Manim: 首先,您需要安装 Python 和一些依赖项。然后,您可以通过以下命令使用 pip 安装 Manim:
pip install manim
- 创建动画: 创建一个 Python 脚本,并使用 Manim 中的类来定义您的动画场景和对象。
- 运行 Manim: 在命令行中,转到包含您的 Python 脚本的目录,并使用以下命令来运行 Manim:
manim your_script.py YourSceneName -p -ql
其中,your_script.py
是您的 Python 脚本的文件名,YourSceneName
是您定义的场景名称。
这样,Manim 就会开始渲染动画。请注意,Manim 的运行可能需要一定的时间,具体取决于动画内容和计算机性能。
用 Manim 绘制图形
首先需要引入 Manim 库,然后将需要绘制的内容封装到一个类(class)里面。
from manim import *
对于编辑好的程序文件(例如christmas-intro.py文件),需要在同一个文件夹下运行命令来运行程序,命令格式如下:
manim -pql christmas-intro.py DemoSquare
上面的命令行中:
manim
是运行程序的主要标志用语;p
表示程序运行后会进行预览(图片或视频);ql
表示低质量(quality low), 其他的选项有-ql
,-qm
,-qh
,-qk
, 分别表示 低质量、正常质量、高质量、4K质量;christmas-intro.py
是py代码文件;DemoSquare
是 py代码文件中的一个类;
命令行中,还有其他许多参数可以设置,可以通过社区版的支持文档来进一步了解。
几个常见方程的示例
from manim import *
class QuadraticSurface(ThreeDScene):
def construct(self):
resolution_fa = 24 #曲面样本数
axes = ThreeDAxes() #3维度笛卡尔直角坐标系
self.set_camera_orientation(phi = 75*DEGREES, theta = 45*DEGREES) #phi是竖直方向岔开的角度,theta是水平面岔开的角度
def paramsFunc(u, v): #参数方程
x = u
y = 1/2*u**2
z = v
return np.array([x, y, z])
quadratic_surface = Surface(
paramsFunc,
resolution = (resolution_fa, resolution_fa), #分辨率
u_range=[-2.5, +2.5], #参数u的范围
v_range=[-1, +1], #参数v的范围
fill_opacity = 0.5 #透明度
) #二次曲面
self.add(axes) #添加坐标轴
self.wait() #停留一秒
self.play(Write(quadratic_surface), run_time = 10) #绘制二次曲面
self.begin_3dillusion_camera_rotation(rate = 2) #摇晃rotation illusion
self.wait(PI) #摇晃时长
self.stop_3dillusion_camera_rotation() #停止摇晃
with tempconfig({'quality':'medium_quality', 'preview':True}):
scene = QuadraticSurface()
scene.render()
from manim import *
class QuadraticSurface(ThreeDScene):
def construct(self):
resolution_fa = 24 #曲面样本数
axes = ThreeDAxes() #3维度笛卡尔直角坐标系
self.set_camera_orientation(phi = 75*DEGREES, theta = 45*DEGREES) #phi是竖直方向岔开的角度,theta是水平面岔开的角度
def paramsFunc(u, v): #参数方程
x = np.sqrt(2)* np.cos(TAU*u)*v
y = np.sqrt(2)* np.sin(TAU*u)*v
z = v
return np.array([x, y, z])
quadratic_surface = Surface(
paramsFunc,
resolution = (resolution_fa, resolution_fa), #分辨率
u_range=[-2, +2], #参数u的范围
v_range=[-2, +2], #参数v的范围
fill_opacity = 0.5 #透明度
) #二次曲面
self.add(axes) #添加坐标轴
self.wait() #停留一秒
self.play(Write(quadratic_surface), run_time = 10) #绘制二次曲面
self.begin_3dillusion_camera_rotation(rate = 2) #摇晃rotation illusion
self.wait(PI) #摇晃时长
self.stop_3dillusion_camera_rotation() #停止摇晃
with tempconfig({'quality':'medium_quality', 'preview':True}):
scene = QuadraticSurface()
scene.render()
manin安装教程
https://docs.manim.community/en/stable/installation.html(社区版)
Manim教程合集
https://www.bilibili.com/video/BV1W4411Z7Zt/?vd_source=3ef6540f8473c7367625a53b7b77fd66Manim官方文档
https://docs.manim.org.cn/cairo-backend/getting_started/index.html
from manim import *
class QuadraticSurface(ThreeDScene):
def construct(self):
resolution_fa = 24 #曲面样本数
axes = ThreeDAxes() #3维度笛卡尔直角坐标系
self.set_camera_orientation(phi = 75*DEGREES, theta = 45*DEGREES) #phi是竖直方向岔开的角度,theta是水平面岔开的角度
def paramsFunc(u, v): #参数方程
x = np.sinh(u)*np.cos(v)
y = np.sinh(u)*np.sin(v)
z = np.cosh(u)
return np.array([x, y, z])
quadratic_surface = Surface(
paramsFunc,
resolution = (resolution_fa, resolution_fa), #分辨率
u_range=[-1.5, +1.5], #参数u的范围
v_range=[-PI, +PI], #参数v的范围
fill_opacity = 0.5 #透明度
) #二次曲面
def paramsFunc1(u, v): #参数方程
x = np.sinh(u)*np.cos(v)
y = np.sinh(u)*np.sin(v)
z = np.cosh(u)
return np.array([x, y, -z])
quadratic_surface1 = Surface(
paramsFunc1,
resolution = (resolution_fa, resolution_fa), #分辨率
u_range=[-1.5, +1.5], #参数u的范围
v_range=[-PI, +PI], #参数v的范围
fill_opacity = 0.5 #透明度
) #二次曲面
self.add(axes) #添加坐标轴
self.wait() #停留一秒
self.play(Write(quadratic_surface), run_time = 10) #绘制二次曲面
self.play(Write(quadratic_surface1), run_time = 10) #绘制二次曲面
self.begin_3dillusion_camera_rotation(rate = 2) #摇晃rotation illusion
self.wait(PI) #摇晃时长
self.stop_3dillusion_camera_rotation() #停止摇晃
with tempconfig({'quality':'medium_quality', 'preview':True}):
scene = QuadraticSurface()
scene.render()
版本说明
对于 Manim 的初学者,使用 Manim 时,对于其版本的选择还是有些需要注意的地方。
不同版本的代码、教程等,还是有稍许差异的。
目前 Manim 主要有三个版本:
3b1b 旧版:3blue1brown 自己维护的版本,使用 Cairo 作为后端;
3b1b 新版:3blue1brown 自己维护的版本,使用 OpenGL 和 moderngl 来进行 GPU 渲染,优点是速度快;
Manim 社区版:社区版是2020年下半年才出来的版本,目前主要是 Manim 旧版的衍生,更新更活跃,有很好的文档和社区支持。当然,随着社区版的迭代更新,目前 3b1b 新版 的某些特性也在逐步容纳进来。
关于这几个版本如何选择的建议:
如果你是新接触这个工具的,建议可以从社区版开始,主要是社区版的文档教程比较齐全,其迭代的频率更快。 如果你是 Python 或者其他编程领域的资深人士,想体自己动手深入理解并优化这个工具,可以使用 3b1b 新版
Manim 的安装
在 Manim 3b1b 版本 和 社区版均提供了如何安装的文档:
3b1b 新版的安装文档:https://github.com/3b1b/manim 社区版的安装文档:https://docs.manim.community/en/stable/installation.html
安装ffmpeg
FFmpeg是一个开源的跨平台音视频处理工具,可以用来录制、转换和流式传输音视频内容。它包括一组库和程序,可以处理多种不同格式的音频、视频和图片文件。FFmpeg支持几乎所有主流的音视频格式,因此被广泛应用于多媒体处理领域。
FFmpeg提供了丰富的功能,包括但不限于:
- 音视频编解码:可以对音频和视频进行编码(压缩)和解码(解压),支持众多编解码器。
- 格式转换:可以将音视频文件从一个格式转换为另一个格式,例如从MP4转换为AVI。
- 剪辑和编辑:可以对音视频文件进行剪辑、合并、分离等操作。
- 流媒体处理:支持流式传输音视频内容,适用于网络直播、视频会议等场景。
- 屏幕录制:可以用来录制屏幕内容并保存为视频文件。
由于其强大的功能和灵活性,FFmpeg被广泛用于视频处理、视频转码、音频处理等各种多媒体应用中。同时,FFmpeg也是许多视频播放器、编辑软件以及流媒体平台的重要组件之一。
安装FFmpeg可以通过命令行或者图形界面进行操作,以下是在Windows和MacOS上安装FFmpeg的基本步骤:
在Windows上安装FFmpeg
- 下载FFmpeg:
- 访问FFmpeg官方网站或Windows Builds by BtbN下载最新版本的静态链接的可执行文件。
- 解压文件:
- 将下载的压缩包解压到你想要安装的位置。
- 设置环境变量(可选):
- 将FFmpeg的bin目录添加到系统的PATH环境变量中,这样就可以在命令行中直接访问FFmpeg。
- 测试安装:
- 打开命令提示符(Win + R,输入cmd,回车),输入以下命令来检查FFmpeg是否成功安装:
ffmpeg -version
在MacOS上安装FFmpeg
- 使用Homebrew安装(推荐):
- 打开终端,运行以下命令安装Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 然后运行以下命令来安装FFmpeg:
brew install ffmpeg
- 测试安装:
- 在终端中输入以下命令来检查FFmpeg是否成功安装:
ffmpeg -version
在Linux上安装FFmpeg
- 使用包管理器安装:
- 对于大多数Linux发行版,可以使用其包管理器来安装FFmpeg。例如,在Ubuntu上可以使用以下命令:
sudo apt-get update
sudo apt-get install ffmpeg
- 测试安装:
- 在终端中输入以下命令来检查FFmpeg是否成功安装:
ffmpeg -version
验证安装
无论在哪个操作系统上安装,验证安装步骤都是一样的。只需要在命令行或终端中输入以下命令:
ffmpeg -version
如果安装成功,会显示FFmpeg的版本信息。这样就可以确认FFmpeg已经成功安装并且可以在系统中正常运行了。
安装Latex
LaTeX是一种专业的排版系统,常用于撰写学术论文、书籍、报告和演示文稿。与常见的文字处理软件(如Microsoft Word)不同,LaTeX使用的是一种“标记语言”,用户需要通过输入特定的命令和标记来控制文档的格式、结构和样式。
LaTeX最初是由著名计算机科学家Leslie Lamport开发的,它建立在TeX排版系统之上,并提供了一系列功能强大的工具和环境,使用户能够轻松地创建高质量的文档。
使用LaTeX编写文档的优势包括:
- 专业的排版效果:LaTeX能够生成高质量、专业水准的文档排版,特别适合于学术论文、书籍等内容丰富的文档。
- 具有强大的数学公式排版能力:LaTeX在排版数学公式和符号方面非常出色,被广泛应用于数学、物理等领域的文档撰写。
- 跨平台性:LaTeX在不同操作系统上都可以运行,并且生成的文档格式稳定、可靠。
虽然学习曲线较陡,但一旦熟悉了LaTeX的基本语法和命令,就能够享受到其带来的排版便利和效果。
安装LaTeX可以通过以下步骤进行操作:
在Windows上安装LaTeX
- 下载安装包:
- 访问TeX Users Group或MiKTeX网站,下载LaTeX发行版的安装程序。
- 运行安装程序:
- 双击下载的安装程序,按照提示进行安装。
- 配置编辑器(可选):
- 如果你希望使用图形化的编辑器来编写LaTeX文档,可以安装一些流行的LaTeX编辑器,如TeXstudio、TeXworks等,这些编辑器通常会自动检测已安装的LaTeX发行版。
- 测试安装:
- 打开命令提示符或者你喜欢的LaTeX编辑器,新建一个简单的.tex文件,输入以下内容并保存:
\documentclass{article}
\begin{document}
Hello, LaTeX!
\end{document}
- 编译这个文件,如果能够生成对应的.pdf文件并且内容显示正常,那么LaTeX安装成功了。
在MacOS上安装LaTeX
- 使用MacTeX安装:
- 下载并安装MacTeX,这是专为MacOS准备的LaTeX发行版。你可以在MacTeX官方网站下载最新版本的安装程序。
- 配置编辑器(可选):
- 安装一些流行的LaTeX编辑器,如TeXShop、TeXstudio等,这些编辑器通常会自动检测已安装的LaTeX发行版。
- 测试安装:
- 使用编辑器创建一个简单的.tex文件,输入上述示例中的内容,并进行编译。
在Linux上安装LaTeX
- 使用包管理器安装:
- 对于大多数Linux发行版,可以使用其包管理器来安装LaTeX。例如,在Ubuntu上可以使用以下命令:
sudo apt-get update
sudo apt-get install texlive-full
- 测试安装:
- 使用编辑器创建一个简单的.tex文件,输入上述示例中的内容,并进行编译。
安装dvisvgm
安装 dvisvgm 可以通过以下步骤进行:
Windows 用户
- 使用 Chocolatey 进行安装: 打开命令提示符(CMD)或 PowerShell,并执行以下命令:
choco install dvisvgm
macOS 用户
- 使用 Homebrew 进行安装: 打开终端,并执行以下命令:
brew install dvisvgm
Linux 用户
- 对于基于 Debian 的系统(如 Ubuntu): 打开终端,并执行以下命令:
sudo apt-get install dvisvgm
- 对于基于 Red Hat 的系统(如 Fedora): 打开终端,并执行以下命令:
sudo dnf install dvisvgm
一旦安装完成,您可以在命令行中运行 dvisvgm --version
来验证 dvisvgm 是否成功安装。
参考文献
1.https://www.tiobe.com/tiobe-index 2.https://baike.baidu.com/item/Python/407313?fr=aladdin 3.https://docs.manim.community/en/stable/installation.html 4.https://docs.manim.org.cn/