前言
在平常的学习、刷视频时,一些科普或算法视频中经常会看到一些非常炫酷的动画效果,例如:
一些复杂数学公式和数学图像:
又或者一些简单的数学推理或物理动画:
还有B站大佬编写的 dijkstra 算法和本文即将带大家实现的冒泡排序的演示动画
甚至还可以实现 3D 效果
更多的案例可以参考Manim 社区
那么类似的动画都是如何实现的那?借助开源库 Manim。
Manim 是一个用于创建精确程序化动画的引擎,特别适用于制作解释性数学视频,借助它,可以实现打造动起来的数学世界和物理世界,小时候枯燥的课本冷冰冰的公式可以变得活能活现,理解不通的算法题让它动起来,形象的告诉背后的原理。
Manim 构建演示视频的功能特别强大,生成的质量也特别高,唯一的缺点 Manim 程序需要借助 python 来进行实现,如果大家从未学过或很少使用 python,会存在一定的门槛。但是也不必慌,当下有 MarsCode、Cursor、Windsurf等诸多 AI 编程助手,只要会合理的运用AI编程助手,任何编程都阻挡不了我们,Manim 也一样。
在本文中:
- 带领大家使用 MarsCode 编写 Manim 案例,边生成代码,边学习收获
- 实现一个冒泡排序的演示动画
- 一起体验一下如何与 MarsCode 进行交互,以及遇到问题又该如何处理
Manim 快速入门
- Manim 的具体下载文章中就不赘述了,网上有各种各样的教程,推荐参考官网的文档。如果大家使用 VSCode 进行开发,推荐安装 Manim Slideview 插件。
- MarsCode 大家应该也都不陌生了,是一款依托于豆包大模型的智能编程助手,可以实现代码的生成、补全、错误检测等,目前有插件和 IDE 两种使用方式,本文是通过 VScode 中 MarsCode 插件实现的。
首先带大家使用 MarsCode 编写一下 Manim 官方提供快速入门中的案例,初步的熟悉一下 Manim,同样也建立起对 MarsCode 使用的基本思路。使用编程助手切记要注意的事项:不要太粗暴的描述需求,要尽可能的细致,在最开始的时候,不知道如何写提示词,可以借助豆包啊、gpt来辅助生成。
快速入门中,案例演示了一个圆的绘制过程,在强调一下,使用 MarsCode 时,不要一次性输入太多信息,尽可能的描述清晰。在这个准则的基础上,输入:帮我绘制一个pink颜色,透明度为0.5的圆,展示绘制过程,使用manim程序进行实现。
可以使用 MarsCode 提供的命令行代码执行,也可以使用 Manim Slideview 插件提供的 run 图标,注意如果使用后者,需要在刚才的代码里面补充 scene 的绘制
from manim import *
class DrawCircle(Scene):
def construct(self):
# 创建一个圆
circle = Circle(color=PINK, fill_opacity=0.5)
# 将圆添加到场景中
self.add(circle)
self.wait(1)
# 需要补充
scene = DrawCircle()
scene.render()
上述生成的视频是没有达到要求的,没有体现出绘制过程,继续交互:没有体现出圆的绘制过程。
from manim import *
class DrawCircle(Scene):
def construct(self):
# 创建一个圆
circle = Circle(color=PINK, fill_opacity=0.5)
# 使用Create动画来展示圆的绘制过程
self.play(Create(circle))
self.wait(1)
scene = DrawCircle()
scene.render()
实现效果如下:
本着不学白不学的想法,继续想 MarsCode 输入指令:帮我解释一下所写代码。
增加动画的难度,继续交互:增加一些需求,最开始先绘制一个square,然后变换成pink圆,最后圆淡出。
from manim import *
class DrawCircle(Scene):
def construct(self):
# 创建一个正方形
square = Square(color=BLUE, fill_opacity=0.5)
self.add(square)
self.wait(1)
# 将正方形变换成圆
circle = Circle(color=PINK, fill_opacity=0.5)
self.play(Transform(square, circle))
self.wait(1)
# 圆淡出
self.play