本文將帶大家走進(jìn)Manim的世界!這是一個由大名鼎鼎的3Blue1Brown 的作者Grant Sanderson創(chuàng)建,它能通過精美的動畫讓數(shù)學(xué)栩栩如生,特別適合用于制作各類數(shù)學(xué)教學(xué)視頻。 在本文中,我們將探索 Manim 在數(shù)學(xué)可視化方面的強(qiáng)大功能,看看它是如何將抽象的概念變得引人入勝、令人驚嘆的。準(zhǔn)備好大開眼界吧!在正式開始之前,我們需要進(jìn)行安裝,一般使用pip即可安裝,命令如下: 安裝完成后,我們就可以開始一起探索這個超棒的動畫庫了。準(zhǔn)備好用 Manim 制作精美動畫了嗎?讓我們接下來一起深入了解五個示例!我們將從簡單的動畫開始,逐步過渡到更復(fù)雜的動畫,展示Manim 的強(qiáng)大功能和直觀性。首先,讓我們創(chuàng)建一個動畫,在屏幕上顯示文字 'Hello,Manim!'。下面是實(shí)現(xiàn)這一目的的代碼片段:# scene.py from manim import *
class HelloWorld(Scene): def construct(self): text = Text('Hello, Manim!') self.play(Write(text)) self.wait()
之后在當(dāng)前文件所在目錄下的命令行窗口,執(zhí)行以下命令: manim -pql scene.py HelloWorld
即可得到如下結(jié)果: 在上述中,首先我們導(dǎo)入了 Manim 的基本組件,定義了一個繼承自 Scene 的自定義類 HelloWorld,并創(chuàng)建了一個包含輸出信息的Text對象,使用 Write函數(shù)制作文本動畫,self.play()顯示動畫,self.wait()暫停動畫片刻。 此外,我們對上述運(yùn)行命令行進(jìn)行分析:manim -pql scene.py HelloWorld
首先,上述命令在包含描述繪畫代碼的文件scene.py上執(zhí)行manim。此外,此命令告訴 manim 要渲染的確切場景,在本例中,它是HelloWorld。這是必需的,因?yàn)閱蝹€場景文件scene.py 可能包含多個場景類的定義。 接下來,標(biāo)志位 -p 告訴 manim在渲染場景后播放場景,而 -ql 標(biāo)志位告訴 manim 以低質(zhì)量渲染場景。當(dāng)然,指定渲染場景動畫質(zhì)量的其他選項(xiàng)還包括 -qm、-qh 和 -qk,分別表示中、高和4k高清質(zhì)量。現(xiàn)在,讓我們用一個圓形和一個正方形制作一個簡單的動畫。# scene.py from manim import *
class Shapes(Scene): def construct(self): circle = Circle() square = Square() self.play(Create(circle)) self.play(circle.animate.shift(LEFT)) self.play(Create(square)) self.play(square.animate.shift(RIGHT)) self.wait() 上述代碼中,我們定義了一個形狀類Shapes,并創(chuàng)建了圓形和正方形對象。然后,我們使用 Create 繪制相應(yīng)對象的形狀,并使用animate.shift() 方法將它們分別向左和向右移動。 manim -pql scene.py Shapes
得到結(jié)果如下: 接著讓我們用動畫演示從正方形到圓形的轉(zhuǎn)換。# scene.py from manim import *
class Transformation(Scene): def construct(self): square = Square() circle = Circle() self.play(Create(square)) self.play(Transform(square, circle)) self.wait()
在本例中,我們同時創(chuàng)建了正方形和圓形對象,使用創(chuàng)建動畫函數(shù)Create繪制正方形,然后使用變換動畫函數(shù)Transform將正方形變?yōu)閳A形。 同樣在命令行中,運(yùn)行如下命令: manim -pql scene.py Transformation
得到結(jié)果如下: 接著讓我們來繪制一條簡單的拋物線: # scene.py
class FunctionPlot(Scene): def construct(self): ax = Axes( x_range=[-5, 5, 1], y_range=[-3, 3, 1], x_length=10, y_length=6, axis_config={'include_numbers': True}, ) func = lambda x: 0.1 * (x**2) curve = ax.plot(func, color=YELLOW) self.play(Create(ax)) self.play(Write(curve)) self.wait()
在上述代碼中,我們首先要設(shè)置一個Axes對象,配置其 x 方向和 y方向的范圍及長度,并啟用沿軸顯示數(shù)字。接下來,我們?yōu)閽佄锞€曲線 (y=0.1x^2)定義一個 lambda函數(shù)。最后我們使用 plot() 方法生成函數(shù)的圖形,并將其存儲在變量curve中。 同樣在命令行中,運(yùn)行如下命令: manim -pql scene.py FunctionPlot
得到結(jié)果如下:
事實(shí)上,我們經(jīng)常會遇到一些數(shù)學(xué)上復(fù)雜的計算公式,此時我們可以使用 LaTeX 代碼來表示對應(yīng)的方程,舉例如下:class LaTeXFormula(Scene): def construct(self): formula = MathTex(r'\int_{-\infty}^{\infty} \frac{1}{\sqrt{2\pi\sigma^2}}dx') self.play(Write(formula)) self.wait()
我們創(chuàng)建一個名為formula 的MathTex 對象,其中包含描述方程的LaTeX 代碼。運(yùn)行上述代碼后,可以得到結(jié)果動畫如下: 只需簡單幾行代碼,大家就可以使用 Manim 來制作出令人驚嘆的數(shù)學(xué)動畫。對數(shù)學(xué)和編程感興趣的同學(xué),推薦大家快來嘗試,享受其中的樂趣吧! 點(diǎn)擊上方小卡片關(guān)注我
新年寄語:
所求皆如愿, 所行皆坦途。
多喜樂,長安寧。
|