Manimで数学の美しさを表現する – Python数学アニメーション入門

数学の概念を視覚的に説明したいと思ったことはありませんか?複雑な数学的概念を美しいアニメーションで表現できれば、理解も深まりますよね。今回は、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は数学を視覚化する強力なツールです。このブログで紹介したのはほんの入門に過ぎません。公式ドキュメントやチュートリアルを参考に、さらに複雑で美しいアニメーションを作成してみてくださいね!

参考リンク

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

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

コメントする

目次