Manim,这个全称为Mathematical Animation Engine的Python库,正将复杂的数学逻辑转化为直观的动画演示。
它源于3Blue1Brown的视频制作需求,如今已成为教育者和开发者手中的可视化利器。
今天我们不谈空泛的概念,直接通过几段核心代码,看看它到底如何运作。
🎬 基础图形与动画:创建与播放
一切动画都始于图形对象(Mobject)。
下面的代码展示了如何在场景中“创建”并“淡入”一个蓝色圆形,这是Manim最基础的叙事单元。
from manim import *classFirstScene(Scene):defconstruct(self): circle = Circle(color=BLUE)self.play(Create(circle))self.wait(1)
结果显示:
· 一个蓝色的圆形从屏幕中心被绘制出来。· 动画过程平滑且自动插值。· 画面会保持静止1秒后结束。
🔄 核心变换逻辑:Transform的魔力
Manim的强大之处在于对象间的无缝变换。
下面的代码展示了正方形如何“变形”为圆形,这种动态演示能清晰地揭示几何关系。
classTransformScene(Scene):defconstruct(self): square = Square() circle = Circle()self.play(Create(square))self.play(Transform(square, circle))self.wait(1)
结果显示:
· 一个正方形先出现在屏幕上。· 接着正方形通过连续的形变,最终变成了一个圆形。· 整个变换过程流畅,没有跳跃感。
📐 精准公式渲染:LaTeX的无缝集成
对于数学和科学内容,公式的精确呈现至关重要。
Manim原生支持LaTeX,让你能像在论文中一样优雅地排版公式。
classFormulaScene(Scene):defconstruct(self): formula = MathTex(r"E = mc^2")self.play(Write(formula))self.wait(1)
结果显示:
· 著名的质能方程被以书写的动画效果逐字呈现。· 公式渲染清晰、美观,达到了出版级质量。· 这是制作教学视频的核心功能之一。
✨ 新版本语法糖:always让跟随更优雅
在Manim社区版v0.20.0中,新增的always方法让对象间的“绑定”关系表达更直观。
下面的代码让文本标签始终位于正方形上方,省去了繁琐的更新函数定义。
classAlwaysScene(Scene):defconstruct(self): s = Square() label = Text("我在上面").always.next_to(s, UP)self.add(s, label)self.play(s.animate.shift(RIGHT * 2))self.wait(1)
结果显示:
· 创建了一个正方形和位于它上方的文本标签。· 当正方形向右移动时,文本标签如影随形,始终保持相对位置。· 代码可读性极佳,接近自然语言。
Manim vs 其他模块:精准叙事与高效演示
与其他可视化库相比,Manim的定位非常独特。
Matplotlib是数据可视化的基石,擅长生成高质量的静态图表,其动画功能更像是附加功能,需手动更新每一帧,代码较为繁琐。
而GeoGebra则在交互式几何演示上见长,入门简单,适合课堂实时操作,但在编程可控性和动画的叙事复杂度上不及Manim。
Manim将时间轴和动画作为一等公民,让你能用声明式的方式编排视觉故事,这是其核心优势。
不过,它的学习曲线也相对陡峭,安装配置略复杂,且不适合处理大规模、交互式的数据探索任务。
建议在需要精确控制动画流程、展示复杂概念演变的场景下优先考虑它。
Manim为代码赋予了讲述故事的能力,它将冰冷的逻辑转化为富有生命力的视觉语言。
如果你也想尝试这种创作方式,不妨从今天分享的几段基础代码开始,亲手感受一下数学动画的魅力。
你对哪段代码最感兴趣?或者有什么想用它实现的创意?欢迎在评论区聊聊你的想法。