使用 Manim 实现高尔顿板模型
高尔顿板(Galton Board)是一种经典的概率和统计学装置,用来展示二项分布和正态分布的概念。我们可以使用 Manim,一个用于数学动画的 Python 库,来创建高尔顿板的模拟动画。
以下是如何在 Manim 中实现基本的高尔顿板模型的示例代码:
首先,确保你已经安装了 Manim。你可以在终端中运行:
pip install manim
接下来,创建一个 Python 文件(例如 galton_board.py
)并添加以下代码:
from manim import *
import numpy as np
class GaltonBoard(Scene):
def construct(self):
# Parameters for the Galton Board
rows = 6
ball_radius = 0.1
spacing = 0.5
# Create pegs
for i in range(rows):
for j in range(i+1):
peg = Dot(point=np.array([j - i / 2, -i * spacing, 0]), radius=0.05, color=GRAY)
self.add(peg)
# Create balls
balls = VGroup()
for _ in range(20): # Number of balls
ball = Dot(radius=ball_radius, color=BLUE).move_to([0, 1, 0])
balls.add(ball)
self.play(Create(balls))
# Animate balls falling
for ball in balls:
path_points = [ball.get_center()]
current_x = path_points[0][0]
current_y = path_points[0][1]
for row in range(rows):
current_y -= spacing
# Decide whether to go left or right at each peg
current_x += np.random.choice([-0.5, 0.5])
path_points.append(np.array([current_x, current_y, 0]))
ball_path = VMobject()
ball_path.set_points_as_corners([*path_points])
self.play(MoveAlongPath(ball, ball_path), run_time=2, rate_func=linear)
self.wait()
if __name__ == "__main__":
import os
os.system("manim -pql galton_board.py GaltonBoard")
代码说明:
参数设置:我们设置了
rows
表示高尔顿板的行数(也对应于高度)。ball_radius
定义了球的半径,spacing
定义了 peg 之间的间距。创建 Pegs:我们使用
Dot
类在不同的位置上创建 peg。peg 的位置沿着 x 轴以等间距排列,呈现出一个三角形的分布。创建 Balls:生成一定数量的球并堆放在顶部。
模拟下落:对每个球定义一个路径,随机选择每行是向左还是向右移动。这个过程利用 numpy 的
random.choice
函数生成。演示动画:使用
MoveAlongPath
动画函数,通过指定的路径将球移动。
运行代码:
确保你在命令行中执行以下命令来运行这个 Manim 文件:
manim -pql galton_board.py GaltonBoard
这将生成并播放动画。-pql
选项表示使用 "quality" 和 "low" 的设置,适合快速预览。如果你想生成高质量的视频,你可以使用 -pqh
。