示例代码:可直接运行的完整场景
以下场景均在 Manim 社区版验证通过。保存为 xxx.py 后执行 manim -pql xxx.py 类名 即可预览。
示例 1:Hello World
from manim import *
class HelloWorld(Scene):
def construct(self):
text = Text("Hello, Manim!", font_size=56, gradient=(BLUE, PURPLE))
self.play(Write(text), run_time=2)
self.play(Circumscribe(text, color=YELLOW))
self.wait()
示例 2:圆的面积推导直觉(切成扇形重排)
from manim import *
class CircleToRect(Scene):
def construct(self):
circle = Circle(radius=1.5, color=BLUE).set_fill(BLUE, 0.5)
self.play(Create(circle))
# 将圆切成 8 个扇形,上下交错重排,逼近矩形
sectors = VGroup()
n = 8
for i in range(n):
sec = Sector(
start_angle=i * TAU / n,
angle=TAU / n,
radius=1.5,
).set_stroke(width=1)
sectors.add(sec)
self.play(ReplacementTransform(circle, sectors))
top = sectors[:n // 2].copy().arrange(RIGHT, buff=0)
bottom = sectors[n // 2:].copy().arrange(RIGHT, buff=0)
bottom.flip().next_to(top, DOWN, buff=0)
self.play(ReplacementTransform(sectors, VGroup(top, bottom)))
note = Text("周长的一半 × 半径 = πr × r", font="Microsoft YaHei", font_size=30)
note.to_edge(UP)
self.play(Write(note))
self.wait()
示例 3:函数图像与切线动画
from manim import *
class TangentLine(Scene):
def construct(self):
axes = Axes(x_range=[-1, 4, 1], y_range=[-1, 5, 1])
f = lambda x: x ** 2 - 2 * x + 2
curve = axes.plot(f, color=BLUE)
self.play(Create(axes), Create(curve))
tracker = ValueTracker(0.4)
tangent = always_redraw(lambda: axes.get_tangent_line(
tracker.get_value(), curve, length=3, color=YELLOW
))
dot = always_redraw(lambda: Dot(
axes.c2p(tracker.get_value(), f(tracker.get_value())),
color=RED,
))
self.add(tangent, dot)
self.play(tracker.animate.set_value(3.4), run_time=4)
self.wait()
示例 4:公式逐步推导(等比数列求和)
from manim import *
class GeoSum(Scene):
def construct(self):
steps = [
MathTex(r"S = a + ar + ar^2 + \cdots + ar^{n-1}"),
MathTex(r"rS = ar + ar^2 + \cdots + ar^{n}"),
MathTex(r"S - rS = a - ar^{n}"),
MathTex(r"S = \frac{a(1 - r^{n})}{1 - r}"),
]
steps[0].to_edge(UP, buff=1)
for cur, nxt in zip(steps, steps[1:]):
nxt.next_to(cur, DOWN, buff=0.9)
for step in steps:
self.play(Write(step), run_time=1.4)
box = SurroundingRectangle(steps[-1], color=YELLOW)
self.play(Create(box))
self.wait()
示例 5:向量加法(箭头组合)
from manim import *
class VectorAdd(Scene):
def construct(self):
plane = NumberPlane(x_range=[-5, 5, 1], y_range=[-4, 4, 1])
v = Arrow(ORIGIN, [3, 1, 0], buff=0, color=YELLOW)
w = Arrow([3, 1, 0], [5, 3, 0], buff=0, color=PURPLE)
s = Arrow(ORIGIN, [5, 3, 0], buff=0, color=GREEN)
labels = VGroup(
MathTex("v").next_to(v.get_center(), UP, buff=0.2),
MathTex("w").next_to(w.get_center(), UP, buff=0.2),
MathTex("v+w").next_to(s.get_center(), RIGHT, buff=0.2),
)
self.play(Create(plane))
self.play(GrowArrow(v), Write(labels[0]))
self.play(GrowArrow(w), Write(labels[1]))
self.play(GrowArrow(s), Write(labels[2]))
self.wait()
如何贡献示例
本站示例持续征集中:欢迎把你在教学视频中使用的场景(去敏后)整理成可运行代码,附一句适用课题说明。被收录的示例将标注作者署名。