玩转ChangeSpeed类:数学动画速率自主把控

2周前发布 gsjqwyl
12 0 0

玩转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类来制作动画,能够:
1. 打破单调性 → 匀速动画易让观众走神,变速可营造视觉节奏
2. 贴合现实规律 → 真实物理世界中极少有匀速运动(如抛物线、摩擦力等)
3. 突出关键信息 → 如同电影慢镜头般强调重点区域
4. 提升专业感 → 细微的速度变化能让动画媲美科教纪录片

© 版权声明

相关文章

暂无评论

暂无评论...