这个项目(3b1b/videos)是知名数学科普 YouTube 频道 3Blue1Brown 的官方开源代码库。
它主要用来生成 3Blue1Brown 视频中那些标志性的、精美的数学动画和场景。
checkpoint_paste 功能),支持在编写动画代码时动态暂停、回滚状态、交互式渲染或直接录制动画。如果你对数学可视化感兴趣,或者想学习、复刻 3Blue1Brown 视频里的经典动画效果,可以通过克隆这个仓库并安装相应的 LaTeX 环境与 Manim 库来运行和修改这些代码。
我们来看一下作者的介绍:
工作流程
我制作这个视频是为了更多地展示我如何使用 manim。请注意,我使用的是 3b1b/manim,而不是社区版,两者之间的某些功能可能会有所不同。除了安装 manim 本身之外,复制此工作流程还涉及一些我使用的文本编辑器 Sublime 的自定义插件。
如果你使用其他文本编辑器,也可以模拟相同的功能。关键在于利用两个事实。
运行 manimgl (文件名)(场景名) -se (行号) 会让你像使用调试器一样,在文件的该行进入交互式模式,并带有一个可用于与场景交互的 iPython 终端。
在该交互式模式下,如果你在终端中输入“checkpoint_paste()”,它将运行复制到剪贴板的任何代码片段。此外,如果复制的代码以注释开头,它首次看到该注释时会保存场景在该点的状态,并且对于所有以相同注释开头的代码的后续调用,它将在运行代码之前首先恢复到该场景状态。
checkpoint_paste 的参数“skip”意味着它将运行代码而不进行动画处理,就好像所有运行时间都设置为 0 一样。
checkpoint_paste 的参数“record”将导致使用该复制代码运行的任何动画都渲染到文件中。
对于我自己的工作流程,我设置了一些键盘快捷键来启动这些命令中的每一个。对于那些想自己尝试的人,以下是涉及的内容。
Sublime 特定说明
安装 Terminus(通过包管理器)。这是在 Sublime 内运行的终端,它允许我们编写一些插件,这些插件获取 Sublime 中的状态,例如光标位置、突出显示的内容等,并使用这些来运行所需的命令行指令。
将此仓库“sublime_custom_commands”子目录中的文件复制到你的 Sublime 应用程序的 Packages/User/ 目录中。该目录的路径应该类似于 /你的 Sublime 所在位置/Packages/User/
添加一些键绑定来引用这些命令。这是我在我的键绑定文件中的内容,你可以在菜单 Sublime Text -> 设置 -> 键绑定 下找到你自己的键绑定文件。
{ "keys": ["shift+super+r"], "command": "manim_run_scene" },
{ "keys": ["super+r"], "command": "manim_checkpoint_paste" },
{ "keys": ["super+alt+r"], "command": "manim_recorded_checkpoint_paste" },
{ "keys": ["super+ctrl+r"], "command": "manim_skipped_checkpoint_paste" },
{ "keys": ["super+e"], "command": "manim_exit" },
{ "keys": ["super+option+/"], "command": "comment_fold"},例如,我将“command + shift + R”绑定到自定义的“manim_run_scene”命令。如果光标位于场景的某一行内,这将使你在场景的该点进入交互模式。如果光标位于定义场景的那一行上,它将把将整个场景渲染到文件所需的命令复制到剪贴板。
我将“command + R”绑定到“manim_checkpoint_paste”命令,该命令将复制突出显示的任何代码片段,并在交互式终端中运行“checkpoint_paste()”。
当然,你可以将这些设置为你喜欢的任何键盘快捷键。
安装:
1. 从源代码安装manimgl,因为发布的最新版本不是最新的。
2. 确保安装了LaTeX,例如在Ubuntu上
sudo apt install texlive
sudo apt install texlive-latex-extra
sudo apt install texlive-fonts-extra
sudo apt install texlive-science3. 克隆此存储库以运行视频示例
git clone git@github.com:3b1b/videos.git
cd videos运行视频:
1.设置包括(如果您不想修改路径)
cd _2023/optics_puzzles
vi e_field.py并在顶部添加以下内容
import sys
sys.path.append(".")
sys.path.append("..")
sys.path.append("../..")2. 运行一个示例
manimgl e_field.py或者
manimgl e_field.py WavesIn3D项目地址:https://github.com/3b1b/videos