manim边做边学--显函数图像
在Manim库中,FunctionGraph类是一个核心组件,专门用于在坐标系中绘制函数图像。
FunctionGraph的主要作用是将数学函数以直观的图形形式展示出来,使得复杂的数学概念更加容易理解。它广泛应用于数学教学、科学演示以及数据可视化等领域。
其典型应用场景包括:
- 数学教学:直观展示函数的基本形状和性质(奇偶性、周期性、渐近线等)
- 物理模拟:可视化运动学中的位移-时间图像、速度-时间图像
- 工程应用:绘制信号处理中的波形图、控制系统中的响应曲线
- 算法演示:展示优化算法中的目标函数、机器学习中的损失函数
本文将详细介绍FunctionGraph的功能、参数和应用场景,并通过实际示例展示其强大功能。
1. 主要参数
FunctionGraph的主要参数有:
| 参数 | 类型 | 说明 |
|---|---|---|
function |
Callable[[float], float] | 必需参数,要绘制的函数(如lambda x: x**2) |
x_range |
Sequence[float] | 定义域,如[-3, 3]或 [-3, 3, 0.1](起点、终点、步长) |
color |
Color | 曲线颜色,默认为WHITE |
discontinuities |
Sequence[float] | 函数的不连续点列表 |
use_smoothing |
bool | 是否使用平滑处理(默认True) |
dt |
float | 参数化步长(影响平滑度) |
t_range |
Optional[Sequence[float]] | 参数范围(高级用法) |
其中,function是核心参数,表示要绘制的函数。
它是一个可调用的函数对象,通常是一个lambda表达式或定义好的函数。
2. 主要方法
FunctionGraph的主要方法有:
| 名称 | 说明 |
|---|---|
get_function |
返回用于绘制图像的函数对象。这在需要获取或修改函数时非常有用 |
get_point_from_function |
根据给定的参数值,返回函数图像上的对应点。这在需要获取特定点的坐标时非常方便 |
3. 使用示例
下面通过几个示例来演示如何使用FunctionGraph来绘制函数图像。
3.1. 正弦和余弦函数图像
这个示例展示了如何绘制正弦和余弦函数的图像。通过指定不同的颜色,可以清晰地区分两个函数。
# 绘制正弦函数图像
sin_func = FunctionGraph(
lambda t: np.sin(t),
color=BLUE,
)
# 绘制余弦函数图像
cos_func = FunctionGraph(
lambda t: np.cos(t),
color=RED,
)
self.play(Create(sin_func))
self.play(Create(cos_func))

3.2. 函数的平移和缩放
这个示例展示了如何通过move_to和scale方法对函数图像进行平移和缩放操作。
通过这种方式,可以直观地展示函数图像的变换。
# 绘制原始函数图像
func = FunctionGraph(
lambda t: np.sin(t),
color=BLUE,
)
self.play(Create(func))
self.play(func.animate.move_to(UP))
self.play(func.animate.scale(0.5))

3.3. 复合函数图像
这个示例展示了如何绘制复合函数的图像。
通过将多个函数组合在一起,可以生成复杂的图像,用于展示函数的叠加效果。
# 绘制复合函数图像
composite_func = FunctionGraph(
lambda t: np.sin(t) + 0.5 * np.sin(7 * t) + (1 / 7) * np.sin(14 * t),
color=ORANGE,
)
self.play(Create(composite_func))

3.4. 动态展示函数图像的变化
这个示例展示了如何动态展示函数图像的变化。
通过在每一帧中更新函数的定义,可以实现函数图像的动态变化效果,非常适合用于展示函数随时间的变化。
# 定义一个动态变化的函数
def dynamic_func(t, time):
return np.sin(t + time)
# 创建一个动态函数图像
dynamic_graph = FunctionGraph(
lambda t: dynamic_func(t, 0),
color=TEAL,
)
self.add(dynamic_graph)
# 动态更新函数图像
for time in range(10):
new_graph = FunctionGraph(
lambda t: dynamic_func(t, time),
color=TEAL,
)
self.play(Transform(dynamic_graph, new_graph))

4. 附件
文中的代码只是关键部分的截取,完整的代码共享在网盘中(function_graph.py),
下载地址: 完整代码 (访问密码: 6872)
manim边做边学--显函数图像的更多相关文章
- 边做边学入门微信小程序之仿豆瓣评分
微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...
- Grails边做边学入门篇[1]--------大家一起来动手建立project和Domain
近期工作比較忙,没空写博客了.我发现每周五的下午都是我最放松的时候,可能是迟延症的缘故吧...总是寄希望于周末,慢慢的.我的周末就被工作占领了. 希望大家不要有这种坏毛病.今日事,今日毕.当然我们程序 ...
- 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good
作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...
- 【Leetcode 做题学算法周刊】第四期
首发于微信公众号<前端成长记>,写于 2019.11.21 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 67 ...
- 做fzu oj 1045 做减法学到的sprintf()函数
题目 做题一直输不出答案,于是就上网去百度了这题的解题,发现解答十分的简短,而且其中我看见了平时没见过的函数,sprintf(). 于是就百度sprintf()的使用. 如下: 函数功能:把格式化的数 ...
- 我用JAVA做了个简易图像相似度计算器
简单说两句: 笔主利用这个七夕前后两天的寂寞时光,用JAVA磨了一个简单的图像相似度计算小程序,就在刚才终于纠结完毕,输出了1.0版本,小小的满足了一下可怜的虚荣心..→_→ 使用最简单最基础的感知哈 ...
- 使用CNN做文本分类——将图像2维卷积换成1维
使用CNN做文本分类 from __future__ import division, print_function, absolute_import import tensorflow as tf ...
- 【Leetcode 做题学算法周刊】第一期
首发于微信公众号<前端成长记>,写于 2019.10.28 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 1. ...
- 【Leetcode 做题学算法周刊】第二期
首发于微信公众号<前端成长记>,写于 2019.11.05 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 20 ...
- 【Leetcode 做题学算法周刊】第三期
首发于微信公众号<前端成长记>,写于 2019.11.13 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 35 ...
随机推荐
- [第三章]ABAQUS CM插件中文手册
ABAQUS Composite Modeler User Manual(zh-CN) Dassault Systèmes, 2018 注: 源文档的交叉引用链接,本文无效 有些语句英文表达更易理解, ...
- pandas 操作excel
一 Series 什么是series 相当于表格中的行和列,不同的设置可以按行或列排序 2.series 创建 空的series import pandas as pd s2=pd.Series() ...
- uniapp vue3 setup + 云开发开发个人小程序
最近使用uniapp vue3 setup + 云开发开发了个人小程序,设计使用figma软件,看下成品截图吧(可以直接微信搜索[识光]小程序体验,或者最底部有码可以直接扫)
- 依赖倒置 DIP、依赖注入 DI、控制反转 IoC 和工厂模式
1. 依赖倒置 依赖倒置原则(Dependency Inversion Principle, DIP)是 SOLID 原则中的一项,其核心思想是通过抽象解耦高层模块和低层模块,使二者都依赖于抽象而非具 ...
- npm ERR! request to https://registry.npm.taobao.org/axios failed, reason: certificate has expired
前言 一直使用 npm build没问题的,突然出现报错: npm WARN install Usage of the `--dev` option is deprecated. Use `--onl ...
- Golang 入门 : 浮点数
浮点数介绍 Go语言提供了两种精度的浮点数:float32 和 float64.它们的算术规范由IEEE754浮点数国际标准定义,该浮点数规范被所有现代的CPU支持. 这些浮点数类型的范围可以从很微小 ...
- Nginx 之fastcgi常用配置项说明
在LNMP环境中,我们都知道nginx如果要解析php脚本语言,就必须通过配置fastcgi模块来提供对php支持,那么在配置fastcgi的时候,关于fastcgi配置项的值应该怎么设置才能让其发挥 ...
- Django实战项目-学习任务系统-兑换物品管理
接着上期代码框架,开发第5个功能,兑换物品管理,再增加一个学习兑换物品表,主要用来维护兑换物品,所需积分,物品状态等信息,还有一个积分流水表,完成任务奖励积分,兑换物品消耗积分. 要想激励一个人的学习 ...
- 搭建自己的OCR服务,第一步:选择合适的开源OCR项目
一.OCR是什么? 光学字符识别(Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程. 亦即将图像中的文字进行识别 ...
- C#元数据的概念,以及一个使用了lambda表达式的简单例子
先看一个例子 假设你写了一个 C# 类库 MathUtils.dll: public class Calculator { public int Add(int a, int b) => a + ...