【万字长文】MarsCode结合 Manim 打造炫酷的算法演示动画

前言

在平常的学习、刷视频时,一些科普或算法视频中经常会看到一些非常炫酷的动画效果,例如:

一些复杂数学公式和数学图像:
在这里插入图片描述

又或者一些简单的数学推理或物理动画:

在这里插入图片描述

在这里插入图片描述

还有B站大佬编写的 dijkstra 算法和本文即将带大家实现的冒泡排序的演示动画

在这里插入图片描述

在这里插入图片描述

甚至还可以实现 3D 效果

在这里插入图片描述

更多的案例可以参考Manim 社区

那么类似的动画都是如何实现的那?借助开源库 Manim

Manim 是一个用于创建精确程序化动画的引擎,特别适用于制作解释性数学视频,借助它,可以实现打造动起来的数学世界和物理世界,小时候枯燥的课本冷冰冰的公式可以变得活能活现,理解不通的算法题让它动起来,形象的告诉背后的原理。

Manim 构建演示视频的功能特别强大,生成的质量也特别高,唯一的缺点 Manim 程序需要借助 python 来进行实现,如果大家从未学过或很少使用 python,会存在一定的门槛。但是也不必慌,当下有 MarsCode、Cursor、Windsurf等诸多 AI 编程助手,只要会合理的运用AI编程助手,任何编程都阻挡不了我们,Manim 也一样。

在本文中:

  1. 带领大家使用 MarsCode 编写 Manim 案例,边生成代码,边学习收获
  2. 实现一个冒泡排序的演示动画
  3. 一起体验一下如何与 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值