Manim库中,FunctionGraph类是一个核心组件,专门用于在坐标系中绘制函数图像。

FunctionGraph的主要作用是将数学函数以直观的图形形式展示出来,使得复杂的数学概念更加容易理解。它广泛应用于数学教学、科学演示以及数据可视化等领域。

典型应用场景包括:

  1. 数学教学:直观展示函数的基本形状和性质(奇偶性、周期性、渐近线等)
  2. 物理模拟:可视化运动学中的位移-时间图像、速度-时间图像
  3. 工程应用:绘制信号处理中的波形图、控制系统中的响应曲线
  4. 算法演示:展示优化算法中的目标函数、机器学习中的损失函数

本文将详细介绍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_toscale方法对函数图像进行平移缩放操作。

通过这种方式,可以直观地展示函数图像的变换。

# 绘制原始函数图像
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边做边学--显函数图像的更多相关文章

  1. 边做边学入门微信小程序之仿豆瓣评分

    微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...

  2. Grails边做边学入门篇[1]--------大家一起来动手建立project和Domain

    近期工作比較忙,没空写博客了.我发现每周五的下午都是我最放松的时候,可能是迟延症的缘故吧...总是寄希望于周末,慢慢的.我的周末就被工作占领了. 希望大家不要有这种坏毛病.今日事,今日毕.当然我们程序 ...

  3. 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good

    作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...

  4. 【Leetcode 做题学算法周刊】第四期

    首发于微信公众号<前端成长记>,写于 2019.11.21 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 67 ...

  5. 做fzu oj 1045 做减法学到的sprintf()函数

    题目 做题一直输不出答案,于是就上网去百度了这题的解题,发现解答十分的简短,而且其中我看见了平时没见过的函数,sprintf(). 于是就百度sprintf()的使用. 如下: 函数功能:把格式化的数 ...

  6. 我用JAVA做了个简易图像相似度计算器

    简单说两句: 笔主利用这个七夕前后两天的寂寞时光,用JAVA磨了一个简单的图像相似度计算小程序,就在刚才终于纠结完毕,输出了1.0版本,小小的满足了一下可怜的虚荣心..→_→ 使用最简单最基础的感知哈 ...

  7. 使用CNN做文本分类——将图像2维卷积换成1维

    使用CNN做文本分类 from __future__ import division, print_function, absolute_import import tensorflow as tf ...

  8. 【Leetcode 做题学算法周刊】第一期

    首发于微信公众号<前端成长记>,写于 2019.10.28 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 1. ...

  9. 【Leetcode 做题学算法周刊】第二期

    首发于微信公众号<前端成长记>,写于 2019.11.05 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 20 ...

  10. 【Leetcode 做题学算法周刊】第三期

    首发于微信公众号<前端成长记>,写于 2019.11.13 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 35 ...

随机推荐

  1. [tldr] vscode的remote插件的config文件内容解析

    参考VS Code Remote SSH配置 解决了什么问题 vscode的remote插件可以直接通过可视化的UI新建一个连接 通过ssh指令添加服务器的连接方式 但是这种方式添加的服务器名字等于服 ...

  2. DevEco Studio 常用设置【自用】

    设置为中文 API参考设置悬浮 始终定位打开的文件,单击预览免打开 保存时自动格式化和热更新 属性单独一行

  3. DeepSeek+Claude强强联手,使用AI驱动DjangoStarter 3.1框架升级

    前言 上个月底培训了一周就没时间更新博客 上周有一些空闲时间,就继续体验最近很火的AI辅助编程 之前的文章中有说到我配置好了 VSCode + Cline 插件搭配本地部署的 DeepSeek 来实现 ...

  4. go 判断数组下标是否存在

    举例 现在需要判断命令行是否传了参数,即 os.Args[1] 是否存在 如果使用下述的判断: func main() { fmt.Println(os.Args[1]) } 会报错:index ou ...

  5. Unity开发Hololens2—环境配置

    博客地址:https://www.cnblogs.com/zylyehuo/ 配置如下: win11 专业版 Unity2018.4.26f1 / 2019.4.11f1 Hololens2 VS20 ...

  6. 一文速通Python并行计算:01 Python多线程编程-基本概念、切换流程、GIL锁机制和生产者与消费者模型

    一文速通 Python 并行计算:01 Python 多线程编程-基本概念.切换流程.GIL 锁机制和生产者与消费者模型 摘要: 多线程允许程序同时执行多个任务,提升效率和响应性.线程分为新建.就绪. ...

  7. Ubuntu截屏工具推荐

    Ubuntu截屏工具推荐 本篇博文推荐Ubuntu下的截屏工具Flameshot,可以作为Windows下Snipaste截图工具的平替. GitHub地址:https://github.com/fl ...

  8. JDK7-时间类、时间格式化类--java进阶day07

    1.Date类:表示时间的类 1.Date常用的构造方法 . 2.Date常用的成员方法 1.getTime:返回从时间原点到对象设定的时间之间的时间 2.setTime:将对象的时间设置为setTi ...

  9. 探秘Transformer系列之(22)--- LoRA

    探秘Transformer系列之(22)--- LoRA 目录 探秘Transformer系列之(22)--- LoRA 0x00 概述 0x01 背景知识 1.1 微调 1.2 PEFT 1.3 秩 ...

  10. Redis 集群实现分布式缓存的示例操作流程【Redis 系列之五】

    〇.前言 Redis 集群的核心优势在于高可用性.可扩展性和高性能,特别适合需要处理大规模数据和高并发请求的应用场景. 本文先介绍了什么是 Redis 集群,然后通过示例,以手动和自动两种方式搭建集群 ...