数学の概念を視覚的に説明したいと思ったことはありませんか?複雑な数学的概念を美しいアニメーションで表現できれば、理解も深まりますよね。今回は、Grant Sandersonさんが3Blue1Brownチャンネル用に開発したPythonライブラリ「Manim」を紹介します!
Manimとは?
Manim(Mathematical Animation)は、数学的アニメーションを作成するためのPythonライブラリです。プログラムでアニメーションを定義し、高品質な動画として出力できます。複雑な数学的概念も、視覚的かつ動的に表現することができるのです。
インストール方法
ターミナルを開き,以下のコマンドを入力するだけで使えるようになります!
pip install manim
また,動画をレンダリングするには以下のような依存パッケージが必要になります.
・FFmpeg
・LaTex
・Cairo
OSによってインストール方法が異なるので、何かトラブルが起きたら公式ドキュメントかコメントをください!
Manimを使って簡単な作品を作ろう!
Miniamは本当に簡単に綺麗な数学アニメーションが作成できます.
皆さんもお手持ちのパソコンで一緒に作ってみましょう!
円の拡大縮小
Miniamでのアニメーション作成の第一歩として,円を書いてそれを拡大する例を見ていきましょう!
まずはexample.pyでPythonファイルを作成し,以下のコードをコピーします.
from manim import *
class CircleExample(Scene):
def construct(self):
# 円を作成
circle = Circle()
# 円の色を青に設定
circle.set_fill(BLUE, opacity=0.5)
# 円の枠線を白に設定
circle.set_stroke(WHITE, width=4)
# 円を画面に表示
self.play(Create(circle))
# 円を拡大
self.play(circle.animate.scale(2))
# しばらく表示
self.wait(2)
このコードを実行するには,ターミナルで以下のコマンドを実行します.
manim -pql example.py CircleExample
オプションの意味:
うまく実行できるとこのような円を作成し,拡大するアニメーションが作れると思います!
コマンドの意味
-p実行後に動画を自動生成-ql低品質(高速でレンダリングできます)-qm中品質-qh高品質(レンダリングに時間がかります)
数式のレンダリング
また,Manimの強みの一つにLaTex記法を使うことによる美しい数式のレンダリングがあります.
from manim import *
class MathExample(Scene):
def construct(self):
# 通常のテキスト
text = Text("これは通常のテキストです")
# LaTeX数式
formula = MathTex(r"\int_{0}^{1} x^2 dx = \frac{1}{3}")
# 順番に表示
self.play(Write(text))
self.wait(1)
self.play(text.animate.shift(UP*2))
self.play(Write(formula))
self.wait(2)
発展:三角関数の可視化
最後に発展的な内容として三角関数の動きをアニメーションでわかりやすく可視化してみましょう
from manim import *
class TrigonometryExample(Scene):
def construct(self):
# 軸の作成
axes = Axes(
x_range=[-3.1, 3.1, 1],
y_range=[-1.5, 1.5, 1],
axis_config={"color": BLUE},
)
# 軸のラベル
labels = axes.get_axis_labels(x_label="x", y_label="y")
# sinカーブの作成
sin_graph = axes.plot(lambda x: np.sin(x), color=RED)
sin_label = MathTex(r"\sin(x)").next_to(sin_graph.get_end(), UP)
# cosカーブの作成
cos_graph = axes.plot(lambda x: np.cos(x), color=GREEN)
cos_label = MathTex(r"\cos(x)").next_to(cos_graph.get_end(), DOWN)
# 表示のアニメーション
self.play(Create(axes), Write(labels))
self.play(Create(sin_graph), Write(sin_label))
self.wait(1)
self.play(Create(cos_graph), Write(cos_label))
self.wait(2)
まとめ
Manimは数学を視覚化する強力なツールです。このブログで紹介したのはほんの入門に過ぎません。公式ドキュメントやチュートリアルを参考に、さらに複雑で美しいアニメーションを作成してみてくださいね!


コメントやリクエストがあったら教えてね!