在制作数学动画时,我们常常希望动画的速度能够根据需要进行调整,以更好地展示数学概念的演变过程。

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. 提升专业感 → 细微的速度变化让动画媲美科教纪录片

掌握ChangeSpeed类:让数学动画速度随心而动!的更多相关文章

  1. 在Android中动画移动一个View的位置,采用Scroller类实现Android动画之 View移动

    在Android中动画移动一个View的位置,采用Scroller类实现 今天说最近自己遇到的一个问题,就是要用动画效果来移动一个VIew的位置. 这个具体的情况是,需要做一个SlidingMenu的 ...

  2. ScaleAnimation类:尺寸变化动画类

    9.4  ScaleAnimation类:尺寸变化动画类 ScaleAnimation类是Android系统中的尺寸变化动画类,用于控制View对象的尺寸变化,该类继承于Animation类.Scal ...

  3. 背水一战 Windows 10 (42) - 控件(导航类): Frame 动画

    [源码下载] 背水一战 Windows 10 (42) - 控件(导航类): Frame 动画 作者:webabcd 介绍背水一战 Windows 10 之 控件(导航类) Frame 动画 示例An ...

  4. Math类的数学计算功能

    //Math类的数学计算功能 public class MathTest { public static void main(String[] args) { /*----------下面是三角运算- ...

  5. Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...

  6. Java:日历类、日期类、数学类、运行时类、随机类、系统类

    一:Calendar类 java.util 抽象类Calendar   1.static Calendar getInstance()使用默认时区和语言环境获得一个日历. 2. int get(int ...

  7. Android ScaleAnimation类:尺寸变化动画类

    ScaleAnimation类是Android系统中的尺寸变化动画类,用于控制View对象的尺寸变化,该类继承于Animation类. ScaleAnimation类中的很多方法都与Animation ...

  8. Math Number 数值类 包装类 数学计算 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. [19/03/18-星期一] 常用类_Math(数学)类&Rondom(随机数)类

    一.Math(数学)类(单独一个Java.Math 包中) java.lang.Math提供了一系列静态方法用于科学计算;其方法的参数和返回值类型一般为double型.如果需要更加强大的数学运算能力, ...

  10. jQuery - 02. 样式表属性操作/类操作、动画、显示隐藏、滑入、淡入、停止动画、节点操作、添加对象、清空节点

    样式表属性操作.css $("div").css({'width':100,'height':100,'background':'red'}); $("div" ...

随机推荐

  1. http状态码413,并提示Request Entity Too Large的解决办法

    使用wordpress的用户经常遇到的问题,就是在后台上传多媒体文件的时候,发现文件大小是有限制的,通常是2M.如图: 如果上传的文件超过2M,服务端返回的状态码会是413,同时提示上传失败.实际上, ...

  2. gmpy2库

    在密码计算中会牵扯大素数的计算模逆等,gmpy2库就是一个这种库 求整数a.b的最大公因数 a = gmpy2.gcd(3,12) 判断一个数是否为素数 a = gmpy2.is_prime(5) 判 ...

  3. JavaScript 获取鼠标点击位置坐标(转载自https://www.cnblogs.com/dolphinX/archive/2012/10/09/2717119.html )

    在一些DOM操作中我们经常会跟元素的位置打交道,鼠标交互式一个经常用到的方面,令人失望的是不同的浏览器下会有不同的结果甚至是有的浏览器下没结果,这篇文章就上鼠标点击位置坐标获取做一些简单的总结,没特殊 ...

  4. dify MCP工具调用

    一.概述 前面几篇文章,介绍了Cherry Studio客户端调用MCP,接下来介绍dify如何调用MCP 二.dify插件 需要安装2个插件,分别是:Agent 策略(支持 MCP 工具),MCP ...

  5. 云备份技术解析:备份删除&合并原理

    本文分享自天翼云开发者社区<云备份技术解析:备份删除&合并原理>,作者:沈****军 在删除备份副本时,需要根据备份副本包含的数据块以及数据块的引用关系来进行空间的释放.当云硬盘的 ...

  6. windows里的一些常用的dos命令

    --------------------------------------------- 1. 中断命令执行 Ctrl + Z 2. 文件/目录 cd   切换目录 例:cd   // 显示当前目录 ...

  7. servlet 作用域

    作用域总结 HttpServletRequest:一次请求,请求响应之前有效 HttpSession:一次会话开始,浏览器不关闭或不超时之前有效 ServletContext:服务器启动开始,服务器停 ...

  8. 【记录】C语言|获取其他文件的绝对路径转为相对路径的两种代码

    GetModuleFileName获取当前程序的绝对路径.然后对比再strcat之类的. 只能获得同一盘符下的相对路径: #include <string.h> /*pa是绝对路径,rel ...

  9. 从写代码到写Prompt,解锁鸿蒙原生应用高效开发秘籍

    当前,大模型技术正在重新定义软件工程.一方面,大模型降低了软件开发门槛.在过去,软件开发者被划分为全民开发者.应用开发者和专业开发者,随着大模型技术的介入,软件开发变得触手可及,一些简单的应用甚至能够 ...

  10. 史上最强大的 Python 脚本

    Python 不仅仅是初学者教程和简单数据脚本的语言,它更像是现代的魔法书.有些人编写的"咒语"如此强大,仿佛打破了现实的规则. 我们谈论的是能够超越人类.渗透机器.甚至自我重写的 ...