跟三叔一起学manim——初识Manim

目录

  • 前言
  • 什么是Manim
  • 一个例子
  • 参考资料

前言

很多人把数学当成一门人类纯思维活动的学科,这是不对的,数学和物理,化学等学科一样,也是一门实验性学科,像计算圆周率的蒲丰投针法蒙特卡罗法就是非常具有代表性的数学试验。

随着科学技术的进步,越来越多的数学理论在现实生活中得以证实和具象化,这反过来也促进了数学的进步和发展,并将逐渐形成一门新的学科——数学工程学。数学工程学简而言之就是借用工程化的理论和手段进行数学研究,发展过程中必然会经历三个阶段,第一个阶段是对数学对象和规律的再演绎再认识;第二个阶段是辅助和研究新的数学对象和规律,比如辅助证明等,第三个阶段是引领新的数学规律的发现,如利用人工智能发现新的数学公式等。

什么是Manim

Manim是一个python第三方库,全称是mathematical animation engine,一款非常著名的数学动画引擎,最初出于斯坦福大学的数学系学生Grant Sanderson 在YouTube 创建的个人频道3Blue1Brown,用以解说线性代数、微积分、神经网络、黎曼猜想、傅里叶变换以及四元数等,由于动画制作精良,解释的角度独特,越来越多读者开始关注并加入其中一起贡献,manim到目前为止大致经历了2个版本的迭代,第一代是 ManimCairo,这是比较老的一个版本,Grant Sanderson早期的项目都是用这个版本来编译的,该版本采用cairo库作为渲染引擎的;第二代是ManimGL, 也是由 Grant Sanderson 等开发的最新版本,该版本最大改进是采用更强大的OpenGL库来渲染 ,此外还有Manim,或者 ManimCE,即manim社区版,可以用下面表格来区分。

name backend PyPI package
ManimCairo Cairo manimlib
ManimGL OpenGL manimgl
ManimCE OpenGL manim

Manim可以让你用编程的方式创建精确的数学图形和动画以及场景,与数学上还有一款编辑软件LaTeX类似,这与我们以往用几何画板等画图,GeoGebra软件不同,它提供了一个全新的思路 “所思即可得”,而且能够做到非常精准的控制,在Manim世界里你可以感受到一切皆可设置,颜色,粗细,长短,角度,时长,播放方式等都可以通过设置来完成,这使得你可以做出很具有个性化的数学动画。下面我们就用一个例子来感受一下Manim的神奇

一个例子

预览效果

视频1 马鞍面

执行下面python代码就会画一个马鞍面

from manim import *

class QuadraticSurface(ThreeDScene):
    def construct(self):
        resolution_fa = 24#曲面样本数
        axes = ThreeDAxes() #3维度笛卡尔直角坐标系
        self.set_camera_orientation(phi = 75*DEGREES, theta = 45*DEGREES) #phi是竖直方向岔开的角度,theta是水平面岔开的角度
    
        def paramsFunc(u, v): #参数方程
            x = np.sqrt(2)*(u+v)
            y = np.sqrt(3)*(u-v)
            z = 4*u*v
            return np.array([x, y, z])

        quadratic_surface = Surface(
            paramsFunc,
            resolution = (resolution_fa, resolution_fa), #分辨率
            u_range=[-1.0, +1.0], #参数u的范围
            v_range=[-1.0, +1.0], #参数v的范围
            fill_opacity = 0.5 #透明度

        ) #二次曲面

        self.add(axes) #添加坐标轴
        self.wait() #停留一秒
        self.play(Write(quadratic_surface), run_time = 10) #绘制二次曲面
        self.begin_3dillusion_camera_rotation(rate = 2) #摇晃rotation illusion
        self.wait(PI) #摇晃时长
        self.stop_3dillusion_camera_rotation() #停止摇晃

with tempconfig({'quality':'medium_quality', 'preview':True}):
    scene = QuadraticSurface()
    scene.render()

自此,你还不知Manim具体运作程式,也不知道Manim有哪些功能,但是你一定会感叹Manim的神奇所在,从下一期,我们将带着大伙一起来安装Manim,认识Manim的一些基本概念和进行各种各样的数学实验。

参考资料

1,Manim Community Edition
https://docs.manim.community/en/stable/index.html
2,三行数学微信公众号——初识manim

你可能感兴趣的:(跟三叔一起学manim,python,manim)