math-visualizer について
方程、グラフ、証明、図形を使った数学解説用のManimアニメーション制作スキルです。数学のビジュアル解説を作る人向けに、展開のペースや記法、色使いを案内します。
主な機能
- 017つの数学分野に対応
- 02方程式の展開ペースを案内
- 03数学要素の配色基準
- 04グラフと証明アニメーションの指針
- 05方程式や図形のManimテンプレート
活用シーン
- 01方程式の導出をアニメーション化
- 02グラフアニメーションで関数を解説
- 03幾何学の証明を図示
- 043D数学曲面を可視化
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ rohitg00/ manim-video-generator --skill math-visualizerインストール後、Claude Code で/math-visualizerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
examples/derivative-visualization.pypythagorean-theorem.pyrules/best-practices.mdcolor-coding-math.mdcommunity-edition-patterns.mdconcept-decomposition.mdequation-presentation.mdgraphing-best-practices.mdopengl-renderer-patterns.mdproof-visualization.mdtemplates/concept-flow-scene.pyequation-transform.pygraph-function.py詳細
数学ビジュアライザーのスキル
数学ビジュアライザーは、数学の構造や関係性を明らかにする、精密で美しいアニメーションを通じて、数学的概念に命を吹き込みます。
数学の分野
対応分野
- 代数:方程式、不等式、多項式
- 微積分:導関数、積分、極限、級数
- 幾何学:図形、変換、証明
- 三角法:関数、恒等式、単位円
- 線形代数:ベクトル、行列、変換
- 複素解析:複素数、変換
- 数論:素数、数列、パターン
ルール
rules/equation-presentation.md
適切なペース配分と強調を用いた方程式の提示方法です。
rules/color-coding-math.md
数学的要素に一貫した配色を適用します。
rules/graphing-best-practices.md
明確で有益な関数グラフを作成します。
rules/proof-visualization.md
理解を深める、段階的な証明アニメーションです。
色分けの標準
| 要素 | 色 | Hex |
|---|---|---|
| 変数(x, y) | 青 | #58C4DD |
| 定数 | 黄色 | #FFFF00 |
| 演算子 | 白 | #FFFFFF |
| キーワード | 緑 | #83C167 |
| 等号/結果 | 金色 | #FFD700 |
| 負数/減算 | 赤 | #FC6255 |
テンプレート
方程式の導出
from manim import *
class EquationDerivation(Scene):
def construct(self):
# Initial equation
eq1 = MathTex(r"x^2 + 2x + 1 = 0")
self.play(Write(eq1))
self.wait()
# Transform step by step
eq2 = MathTex(r"(x + 1)^2 = 0")
eq3 = MathTex(r"x + 1 = 0")
eq4 = MathTex(r"x = -1")
# Show each transformation
for new_eq in [eq2, eq3, eq4]:
self.play(TransformMatchingTex(eq1, new_eq))
self.wait()
eq1 = new_eq
# Highlight final answer
box = SurroundingRectangle(eq4, color=GREEN, buff=0.2)
self.play(Create(box))
色分けされた方程式
from manim import *
class ColorCodedEquation(Scene):
def construct(self):
# Equation with color-coded parts
equation = MathTex(
r"f(", r"x", r") = ", r"a", r"x^2", r" + ", r"b", r"x", r" + ", r"c"
)
# Color code
equation[1].set_color(BLUE) # x
equation[3].set_color(YELLOW) # a
equation[4].set_color(BLUE) # x^2
equation[6].set_color(YELLOW) # b
equation[7].set_color(BLUE) # x
equation[9].set_color(YELLOW) # c
self.play(Write(equation))
# Explain each part
labels = [
(equation[3], "coefficient"),
(equation[1], "variable"),
(equation[9], "constant")
]
for part, label_text in labels:
self.play(Indicate(part))
label = Text(label_text, font_size=24).next_to(part, DOWN)
self.play(Write(label))
self.wait()
self.play(FadeOut(label))
アニメーション付き関数グラフ
from manim import *
class FunctionGraph(Scene):
def construct(self):
# Create axes
axes = Axes(
x_range=[-4, 4, 1],
y_range=[-2, 8, 1],
x_length=8,
y_length=5,
axis_config={"include_tip": True}
)
labels = axes.get_axis_labels(x_label="x", y_label="y")
self.play(Create(axes), Write(labels))
# Function
func = axes.plot(lambda x: x**2, color=BLUE)
func_label = MathTex(r"f(x) = x^2", color=BLUE).to_corner(UR)
self.play(Create(func), Write(func_label))
# Show derivative
deriv = axes.plot(lambda x: 2*x, color=GREEN)
deriv_label = MathTex(r"f'(x) = 2x", color=GREEN).next_to(func_label, DOWN)
self.play(Create(deriv), Write(deriv_label))
# Tangent line demonstration
x_tracker = ValueTracker(-2)
tangent = always_redraw(lambda: axes.get_secant_slope_group(
x=x_tracker.get_value(),
graph=func,
dx=0.01,
secant_line_color=YELLOW,
secant_line_length=4
))
dot = always_redraw(lambda: Dot(
axes.c2p(x_tracker.get_value(), x_tracker.get_value()**2),
color=RED
))
self.play(Create(tangent), Create(dot))
self.play(x_tracker.animate.set_value(2), run_time=4)
3D 数学曲面
from manim import *
class Surface3D(ThreeDScene):
def construct(self):
# Set up camera
self.set_camera_orientation(phi=75 * DEGREES, theta=-45 * DEGREES)
# Create axes
axes = ThreeDAxes(
x_range=[-3, 3, 1],
y_range=[-3, 3, 1],
z_range=[-2, 2, 1]
)
# Create surface
surface = Surface(
lambda u, v: axes.c2p(u, v, np.sin(u) * np.cos(v)),
u_range=[-PI, PI],
v_range=[-PI, PI],
resolution=(30, 30),
fill_opacity=0.7
)
surface.set_fill_by_value(
axes=axes,
colorscale=[(RED, -1), (YELLOW, 0), (GREEN, 1)]
)
# Animate
self.play(Create(axes))
self.play(Create(surface), run_time=3)
self.begin_ambient_camera_rotation(rate=0.2)
self.wait(5)
幾何学的証明
from manim import *
class PythagoreanProof(Scene):
def construct(self):
# Create right triangle
triangle = Polygon(
ORIGIN, RIGHT * 3, RIGHT * 3 + UP * 4,
color=WHITE, fill_opacity=0.3
)
# Labels
a_label = MathTex("a").next_to(triangle, DOWN)
b_label = MathTex("b").next_to(triangle, RIGHT)
c_label = MathTex("c").move_to(
(ORIGIN + RIGHT * 3 + UP * 4) / 2 + LEFT * 0.5 + UP * 0.3
)
self.play(Create(triangle))
self.play(Write(a_label), Write(b_label), Write(c_label))
# Show squares on each side
sq_a = Square(side_length=3, color=BLUE, fill_opacity=0.5)
sq_a.next_to(triangle, DOWN, buff=0)
sq_b = Square(side_length=4, color=GREEN, fill_opacity=0.5)
sq_b.next_to(triangle, RIGHT, buff=0)
self.play(Create(sq_a), Create(sq_b))
# Area labels
area_a = MathTex(r"a^2", color=BLUE).move_to(sq_a)
area_b = MathTex(r"b^2", color=GREEN).move_to(sq_b)
self.play(Write(area_a), Write(area_b))
# Conclusion
theorem = MathTex(r"a^2 + b^2 = c^2").to_edge(UP)
box = SurroundingRectangle(theorem, color=GOLD)
self.play(Write(theorem), Create(box))
LaTeX クイックリファレンス
一般的な式
% Fractions
\frac{a}{b}
% Square root
\sqrt{x} \sqrt[n]{x}
% Summation
\sum_{i=1}^{n} x_i
% Integral
\int_{a}^{b} f(x) \, dx
% Limit
\lim_{x \to \infty} f(x)
% Matrix
\begin{pmatrix} a & b \\ c & d \end{pmatrix}
% Partial derivative
\frac{\partial f}{\partial x}
ギリシャ文字
\alpha \beta \gamma \delta \epsilon
\theta \lambda \mu \pi \sigma \omega
\Gamma \Delta \Theta \Lambda \Sigma \Omega
ベストプラクティス
- 方程式を段階的に表示する - 複雑な方程式を少しずつ組み立てます
- 記法に一貫性を持たせる - 同じ記号には、全体を通して同じ意味を持たせます
- 意味のある注釈を付ける - ラベルは情報を明確にし、画面を煩雑にしないようにします
- 説明するだけでなく、見せる - 数学的な関係性をアニメーションで表現します
- 直感と結び付ける - 抽象的な数学を視覚的な理解につなげます
コメント
Markdown 対応