Manim 开发环境搭建
本文将详细说明如何搭建 Manim 的开发环境以及如何编写一个简洁、生动、形象的数学动画,演示公式
[ (a+b)^2 = a^2 + 2ab + b^2 ] 的证明过程。
第一部分 开发环境搭建
为了顺利运行 Manim 并生成动画,需要配置以下几项环境组件:安装 LaTeX 发行版与 FFmpeg。下面根据不同操作系统介绍具体步骤。
Windows 环境
1. 安装 LaTeX 发行版
- 推荐使用 MiKTeX
2. 安装 FFmpeg
下载 ffmpeg-git-full.7z 版本
解压后,将 bin 文件夹添加至系统 PATH
或者使用 Chocolatey 安装:
choco install ffmpeg
Linux 环境 (Ubuntu/Debian)
1. 安装 LaTeX 发行版
通过包管理器安装 TeX Live 全部组件:
sudo apt-get install texlive-full
2. 安装 FFmpeg
使用包管理器安装:
sudo apt-get install ffmpeg
macOS 环境
1. 安装 LaTeX 发行版
- 推荐使用 MacTeX
2. 安装 FFmpeg
使用 Homebrew 安装:
brew install ffmpeg
3. 创建 Python 环境
建议使用 Conda 创建一个独立的 Python 环境以避免依赖冲突。以 Python 3.11 为例:
conda create --name manim python=3.11 -y
conda activate manim
4. 安装 Manim 社区版及其依赖
安装 Manim 以及一些必要的依赖库。你可以通过 pip 自动安装所需依赖(如 numpy、Pillow、opencv-python 等)。例如:
pip install manim
# Text and LaTeX rendering
pip install manimpango
pip install latex
# 音频相关
pip install moviepy
pip install requests
此外,还需要确保系统上安装了 LaTeX 发行版和 FFmpeg,以便正确渲染文本和生成视频文件。
第二部分 入门示例:证明 ((a+b)^2 = a^2 + 2ab + b^2)
示例说明
本示例旨在用 Manim 展示一个几何证明思路:
- 绘制一个边长为 (a+b) 的大正方形。
- 在正方形内部画出分割线,将正方形划分为四个部分:
- 左上角为边长为 (a) 的小正方形(面积 (a^2));
- 右下角为边长为 (b) 的小正方形(面积 (b^2));
- 剩余的两个矩形面积分别为 (ab),共计 (2ab);
- 最后,在动画中添加数学公式 ((a+b)^2 = a^2 + 2ab + b^2) 以验证证明过程。
示例代码
下面是一个名为 binomial_square.py
的示例代码,该代码使用 Manim 来演示上述证明过程。你可以根据需要保存该文件并使用 Manim 运行它。
from manim import *
class BinomialSquare(Scene):
def construct(self):
# Define constants
a = 2
b = 1
square_side = a + b
# Create the main square
main_square = Square(side_length=square_side).set_color(BLUE)
# Add labels (a+b) on sides
label_a_top = Text("a", font_size=24).next_to(main_square, UP).shift(LEFT * b / 2)
label_b_top = Text("b", font_size=24).next_to(main_square, UP).shift(RIGHT * a / 2)
label_a_left = Text("a", font_size=24).next_to(main_square, LEFT).shift(UP * b / 2)
label_b_left = Text("b", font_size=24).next_to(main_square, LEFT).shift(DOWN * a / 2)
# Create dividing lines
v_line = Line(main_square.get_corner(UP) + DOWN * a,
main_square.get_corner(DOWN) + UP * b)
h_line = Line(main_square.get_corner(LEFT) + RIGHT * a,
main_square.get_corner(RIGHT) + LEFT * b)
# Create smaller squares and rectangles
a_square = Square(side_length=a).set_color(RED).move_to(main_square.get_corner(UP + LEFT))
b_square = Square(side_length=b).set_color(YELLOW).move_to(main_square.get_corner(DOWN + RIGHT))
ab_rect1 = Rectangle(width=a, height=b).set_color(GREEN).next_to(a_square, RIGHT)
ab_rect2 = Rectangle(width=b, height=a).set_color(GREEN).next_to(a_square, DOWN)
# Animation sequence
self.play(Create(main_square))
self.play(Write(label_a_top), Write(label_b_top),
Write(label_a_left), Write(label_b_left))
self.play(Create(v_line), Create(h_line))
self.play(FadeIn(a_square), FadeIn(b_square),
FadeIn(ab_rect1), FadeIn(ab_rect2))
# Formula text
formula = MathTex(r"(a+b)^2 = a^2 + 2ab + b^2").to_edge(DOWN)
self.play(Write(formula))
self.wait(2)
if __name__ == "__main__":
# Basic configuration
config.pixel_height = 1080 # Set resolution height
config.pixel_width = 1920 # Set resolution width
config.frame_rate = 30 # Set frame rate
config.output_file = "CombinedScene" # Specify output filename
config.disable_caching = True # Disable caching
# Set output directory using placeholder for Java replacement
config.media_dir = "#(output_path)" # IMPORTANT: Use the placeholder
# Create and render the scene
sence = BinomialSquare()
sence.render()
print(f"Scene rendering finished. Output in: {config.media_dir}")
代码说明
大正方形的绘制:
使用Square
类创建一个边长为 (a+b) 的正方形,并将其上移以便下方留出位置显示公式。分割线:
通过Line
类分别绘制一条垂直分割线和一条水平分割线,将正方形划分为四个部分。各区域的构造与标注:
- 左上角的正方形代表面积 (a^2);
- 右下角的正方形代表面积 (b^2);
- 剩下两个矩形分别代表面积 (ab),共计 (2ab);
使用MathTex
对象在各个区域中添加文本标注。
公式展示:
最后在动画底部显示公式 ((a+b)^2 = a^2 + 2ab + b^2),帮助观众直观理解各部分面积之和即为整个正方形的面积。
在 windows 平台,生成的文件 路径是 media\videos\1080p60\BinomialSquare.mp4
总结
本文详细介绍了如何搭建 Manim 开发环境,包括安装 LaTeX、FFmpeg、创建 Python 环境以及安装 Manim 及其依赖。随后,通过一个入门示例展示了如何用 Manim 编写动画来证明公式 ((a+b)^2 = a^2 + 2ab + b^2) 的几何证明过程。希望这篇文档能帮助你快速上手 Manim,创作出更多生动有趣的数学动画。