查看原文
其他

Manim 动画制作不再难:ChatGPT + Graphviz/Mermaid 助你快速上手

思辨view kate人不错
2024-07-24

引言

前两篇文章介绍了Manim的基础知识,今天我们来探索如何结合GPT、Mermaid、Graphviz等工具,更高效地制作出更复杂的动画效果。

Manim + ChatGPT 实战:模仿苹果 WWDC 动画效果

Manim + ChatGPT 实践:零基础也能制作酷炫动画

分享数学动画的制作

新升级的iPadOS上的计算器APP很火,支持手写公式,即时出结果。

这让我想到是否可以利用Manim库来展示数学计算过程。

Manim库主要用于数学动画的,之前我没有展示过过程,今天演示一下。

我请GPT写出计算过程,用Manim制作了动画。

视频效果

完整代码

SolveEquation

from manim import *

class SolveEquation(Scene):
    def construct(self):
        # 引入方程和问题
        equation = MathTex("3x + y = 3")
        condition = MathTex("x = 3")
        problem = Text("计算 y 的值")

        # 布局调整
        equation.to_edge(UP)
        condition.next_to(equation, DOWN)
        problem.next_to(condition, DOWN)

        self.play(Write(equation))
        self.play(Write(condition))
        self.play(Write(problem))
        self.wait(1)

        # 代入条件和计算步骤
        calculation_steps = [
            MathTex("3x + y = 3"),
            MathTex("3(3) + y = 3"),
            MathTex("9 + y = 3"),
            MathTex("y = 3 - 9"),
            MathTex("y = -6")
        ]

        for step in calculation_steps:
            step.next_to(problem, DOWN, buff=0.5)
            self.play(Write(step))
            self.wait(1)
            problem = step  # 更新位置
        
        # 验证结果
        verification = MathTex("3(3) + (-6) = 3")
        verification2 = MathTex("9 - 6 = 3")

        verification.next_to(problem, DOWN, buff=0.5)
        verification2.next_to(verification, DOWN, buff=0.5)

        self.play(Write(verification))
        self.wait(1)
        self.play(Write(verification2))
        self.wait(1)

        # 总结
        summary = Text("当 x = 3 时,y = -6")
        summary.next_to(verification2, DOWN, buff=1)
        self.play(Write(summary))
        self.wait(2)

if __name__ == "__main__":
    SolveEquation().render()

EquationGraph

from manim import *

class EquationGraph(Scene):
    def construct(self):
        # 创建坐标系
        axes = Axes(
            x_range=[0, 5, 1],
            y_range=[-10, 5, 1],
            axis_config={"color": BLUE},
        )
        
        labels = axes.get_axis_labels(x_label="x", y_label="y")

        # 创建方程图像
        graph = axes.plot(lambda x: 3 - 3 * x, color=YELLOW)
        graph_label = axes.get_graph_label(graph, label=Tex("3x + y = 3"), x_val=0.5, direction=UP)

        # 创建点并标注 (3, -6)
        x_value = 3
        y_value = 3 - 3 * x_value
        point = Dot().move_to(axes.coords_to_point(x_value, y_value))
        point_label = MathTex("(3, -6)").next_to(point, RIGHT)

        # 动画效果
        self.play(Create(axes, run_time=3), Write(labels, run_time=3))
        self.play(Create(graph, run_time=3), Write(graph_label, run_time=3))
        self.play(Create(point, run_time=2), Write(point_label, run_time=2))
        self.wait(2)

if __name__ == "__main__":
    EquationGraph().render()

善用工具:用Mermaid和Graphviz简化Manim动画制作

在昨天的文章里,我尝试了通过Tldraw画出草图,然后让Manim制作动画。

今天想起,我们有很多现成的制图工具,是否可以通过它们,来帮我们画出更好的图表,然后再让Manim制作动画呢?

因为LLM对规范语言的识别率高于自然语言,所以我选择使用Mermaid和Graphviz生成结构化的图形代码,再由GPT转换为Manim代码。

最终,我选定2个工具:Graphviz和Mermaid。

特性MermaidGraphviz
语法Markdown风格的图形描述语言使用DOT语言进行描述
易用性适合初学者,易于集成到Markdown文档中相对复杂,需要一定的学习曲线
集成常用于Markdown、GitHub、Jupyter Notebook等可与多种编程语言和工具集成
图形种类支持流程图、序列图、甘特图、状态图等支持流程图、层次图、状态图、网络图等
定制化提供基础的样式定制选项高度可定制,支持复杂的图形和布局

除了以上2种,你也可以考虑PlantUML。

GPT+Mermaid+Manim:快速制作流程图动画

我将Mermaid代码发给GPT,让它写Manim的代码。


视频动画效果

完整代码

from manim import *

class Flowchart(Scene):
    def construct(self):
        # Nodes
        start = Text("开始").to_edge(UP)
        condition = Text("判断条件").next_to(start, DOWN, buff=1.5)
        process1 = Text("处理1").next_to(condition, LEFT, buff=2)
        process2 = Text("处理2").next_to(condition, RIGHT, buff=2)
        end = Text("结束").next_to(condition, DOWN, buff=1.5)

        # Boxes
        start_box = SurroundingRectangle(start, color=BLUE, buff=0.2)
        condition_box = SurroundingRectangle(condition, color=BLUE, buff=0.2)
        process1_box = SurroundingRectangle(process1, color=BLUE, buff=0.2)
        process2_box = SurroundingRectangle(process2, color=BLUE, buff=0.2)
        end_box = SurroundingRectangle(end, color=BLUE, buff=0.2)

        # Lines and arrows
        start_to_condition = Arrow(start_box.get_bottom(), condition_box.get_top(), buff=0.1)
        condition_to_process1 = Arrow(condition_box.get_left(), process1_box.get_right(), buff=0.1)
        condition_to_process2 = Arrow(condition_box.get_right(), process2_box.get_left(), buff=0.1)
        process1_to_end = Arrow(process1_box.get_bottom(), end_box.get_top(), buff=0.1)
        process2_to_end = Arrow(process2_box.get_bottom(), end_box.get_top(), buff=0.1)

        # Labels on arrows
        condition1_label = Text("条件1").scale(0.5).next_to(condition_to_process1, UP, buff=0.1)
        condition2_label = Text("条件2").scale(0.5).next_to(condition_to_process2, UP, buff=0.1)

        # Adding to the scene
        self.play(Write(start), Create(start_box))
        self.play(Write(condition), Create(condition_box))
        self.play(Write(process1), Create(process1_box))
        self.play(Write(process2), Create(process2_box))
        self.play(Write(end), Create(end_box))

        self.play(Create(start_to_condition))
        self.play(Create(condition_to_process1), Write(condition1_label))
        self.play(Create(condition_to_process2), Write(condition2_label))
        self.play(Create(process1_to_end))
        self.play(Create(process2_to_end))

        self.wait(2)

if __name__ == "__main__":
    from manim import config
    config.background_color = WHITE
    scene = Flowchart()
    scene.render()

GPT+Graphviz+Manim:苹果产品发展史

我先请GPT用Graphviz介绍下苹果的历史优秀产品。

根据dot文件,制作Manim动画。

逐步修改

最终视频效果

GPT+Graphviz+Manim:人工智能领域分支

我请GPT介绍人工智能领域和分支领域。

转成Graphviz样式。

根据dot文件,制作Manim动画。

偶尔需要鞭策下偷懒的GPT。

部分画面内容需要调整

最终视频效果

结语

后续我会与大家分享更多关于使用Manim的心得体会。

欢迎在评论区留言,让我们一起交流进步。


精选历史文章,请看这里:

轻松构建你的第一个 AI 项目:使用 Replit 和热门 API 搭建你的应用

Google 新推出 AI 辅助工具,Data Science Agent 和 Code Transformation 值得一试

用 Marp 让 Markdown+AI 快速制作 PPT,让你的演示更出彩

你还在手动排版公众号文章?看看 ChatGPT 怎么轻松搞定 | PPT、MD、CSV 批量转公众号排版

推荐一个自动生成复杂提示词的模版:思考链(CoT)如何通过分步推理提升AI任务准确性 | 示例详解

继续滑动看下一个
kate人不错
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存