掌握ChangeSpeed類:讓數學動畫速度隨心而動!
在制作數學動畫時,我們常常希望動畫的速度能夠根據需要進行調整,以更好地展示數學概念的演變過程。
Manim框架中的ChangeSpeed類就是這樣一個強大的工具,它能夠幫助我們輕松地控制動畫的速度變化,讓動畫更加生動和富有表現力。
1. 主要作用
ChangeSpeed類的主要作用是改變動畫的播放速度。
在數學動畫中,有些部分可能需要快速展示,比如簡單的平移或旋轉;而有些部分則需要慢速展示,以便觀眾能夠仔細觀察其中的細節,比如復雜的函數變換或幾何圖形的構造。
通過使用ChangeSpeed類,我們可以對動畫的速度進行精確的控制,讓動畫的節奏更加符合我們的需求。
一句話來說:動態控制動畫的播放速度,實現加速/減速效果。
想象一輛小車:
- 默認動畫 → 小車勻速移動(枯燥??)
- 使用
ChangeSpeed→ 小車起步慢 → 中途加速 → 終點前減速(生動!??)
它通過修改動畫的時間流速實現變速,完美適配移動、旋轉、變形等各類動畫。
2. 參數詳解
ChangeSpeed類的使用需要我們了解它的各個參數,其中最重要的參數就是speedinfo。
這個參數是ChangeSpeed的靈魂!它是一個字典,定義不同時間點的速度倍率:
- 鍵 (
Key):動畫進度比例(0=開始,1=結束) - 值 (
Value):該時刻的速度倍數(1=原速,2=2倍速,0.5=半速)
設置speedinfo參數的示例如下:
# 先加速后減速(小車啟動停止效果)
speedinfo = {
0: 0.3, # 開始時0.3倍慢速
0.7: 1.8, # 70%進度時1.8倍快速
1: 0.2 # 結束時0.2倍慢速
}
# 勻速突然變慢(強調終點)
speedinfo = {
0: 1.0,
0.8: 1.0, # 前80%保持原速
1: 0.1 # 最后20%大幅減速
}
當然,除了speedinfo參數,ChangeSpeed類還有一些其他參數,比如動畫的持續時間(duration)和動畫的起始時間(start_time)。
這些參數比較簡單,一看就明白它的含義。
3. 使用示例
下面通過兩個示例來演示ChangeSpeed類的使用。
3.1. 模擬自由落體運動
小球下落逐漸加速,模擬重力加速。
class Example(Scene):
def construct(self):
ball = Circle(
radius=0.2,
color=RED,
fill_color=YELLOW,
fill_opacity=0.8,
)
path = Line(UP * 3, DOWN * 3) # 垂直路徑
# 重力加速度效果:下落越來越快
speedinfo = {0: 0.1, 0.3: 0.5, 1: 2.0}
self.play(
ChangeSpeed(MoveAlongPath(ball, path), speedinfo=speedinfo),
run_time=3,
)
self.wait()

3.2. 重點展示軌跡關鍵點
這個示例展示一個沿著拋物線運動的點,在幾個關鍵位置放慢速度,引起注意。
class Example(Scene):
# 求函數圖像與坐標軸交點
def construct(self):
axes = Axes()
graph = axes.plot(lambda x: x**2)
dot = Dot(color=YELLOW)
# 交點處減速強調
speedinfo = {
0: 1.2,
0.4: 1.2, # 快速移動到第一個交點
0.45: 0.1, # 在(0,0)減速
0.55: 1.0,
0.9: 1.0, # 快速移動到第二個交點
0.95: 0.1, # 在(1,1)減速
}
self.play(
ChangeSpeed(MoveAlongPath(dot, graph), speedinfo=speedinfo),
run_time=5,
)
self.wait()

4. 總結
ChangeSpeed類是Manim框架中一個非常有用的工具,它為我們提供了對動畫速度的靈活控制。
結合ChangeSpeed類來完成我們的動畫,可以:
- 打破單調性 → 勻速動畫易讓觀眾走神,變速創造視覺節奏
- 符合現實規律 → 真實物理世界極少勻速運動(拋物線、摩擦力等)
- 突出關鍵信息 → 像電影慢鏡頭一樣強調重點區域
- 提升專業感 → 細微的速度變化讓動畫媲美科教紀錄片

浙公網安備 33010602011771號