manim边做边学--直角平面
直角平面NumberPlane
是Manim
库中用于创建二维坐标平面的对象,它可以帮助用户在场景中可视化坐标轴以及网格线。
通过坐标轴、网格线以及刻度,它能够动态地展示函数曲线、几何图形以及它们的变换过程,使得复杂的数学概念变得直观易懂。
NumberPlane
提供了x轴和y轴,通常是中心对称的,
默认情况下,NumberPlane
会显示背景网格,这对于展示数学函数、几何形状等非常有帮助。
我们可以定义坐标平面的范围,为坐标轴添加标签,并将其他形状、函数或动画放置在NumberPlane
上,从而在动画中展示数学概念。
下面将介绍Manim
中的NumberPlane
对象以及一些常用的使用示例。
1. 主要参数
NumberPlane
的主要参数有:
参数名称 | 类型 | 说明 |
---|---|---|
x_range | Sequence[float] | 直角平面的横坐标轴范围,间隔 |
y_range | Sequence[float] | 直角平面的纵坐标轴范围,间隔 |
x_length | float | 直角平面宽度 |
y_length | float | 直角平面高度 |
background_line_style | dict | 直角平面背景网格线的样式 |
faded_line_style | dict | 淡化网格线的样式,用于辅助背景网格线 |
faded_line_ratio | int | 定义淡化网格线与背景网格线的比例 |
make_smooth_after_applying_functions | bool | 应用函数后是否进行平滑处理 |
直角平面中,常见的是坐标轴和背景网格线,其样式通过background_line_style
参数来设置。
此外,NumberPlane
中还有个faded_line_style
参数,它用于定义淡化网格线的样式,
这些淡化网格线通常用于辅助背景网格线,以提供更细致的视觉效果或帮助区分不同的坐标区域。
一般情况下,不需要使用faded_line_style
和faded_line_ratio
。
2. 主要方法
Manim
中的坐标系统CoordinateSystem
类提供了很多方法,包括:
- 获取和设置坐标系统属性的方法
- 坐标系中坐标和屏幕上坐标转换的方法
- 坐标系中绘制图形(点,线,面等等)的方法
后续介绍各种坐标系统时会用在示例中用到其中的方法,这里不再一一介绍。
而NumberPlane
继承自CoordinateSystem
类,所以可以直接使用它的各种方法。
3. 使用示例
下面通过几个示例展示NumberPlane
的功能。
3.1. 基础二维坐标平面
默认情况下,NumberPlane
显示坐标轴和背景网格线,帮助用户清晰地看到坐标系的划分。
坐标轴默认是白色的,背景网格线默认是蓝色的。
下面的示例展示一个标准的二维坐标平面,包含x轴和y轴,
x轴和y轴的范围分别设置为-7~7
和-4~4
,网格线间隔为1
。
plane = NumberPlane(
x_range=[-7, 7],
y_range=[-4, 4],
x_length=6,
y_length=4,
)
3.2. 自定义网格线样式
NumberPlane
的背景网格线和淡化网格线的样式都可以自定义,
下面的示例对背景网格线和淡化网格线的颜色、宽度和透明度进行了设置。
背景网格线是青色,淡化网格线是灰色。
plane = NumberPlane(
x_range=[-7, 7],
y_range=[-4, 4],
x_length=6,
y_length=4,
background_line_style={
"stroke_color": TEAL,
"stroke_width": 4,
"stroke_opacity": 0.6,
},
faded_line_style={
"stroke_color": GREY,
"stroke_opacity": 0.3,
},
faded_line_ratio=2,
)
注意,这里还设置了faded_line_ratio=2
,意思是每1格背景网格线相当于2格的淡化网格线。
3.3. 不同比例的坐标轴
默认情况下,NumberPlane
的X轴和Y轴的间隔是相等的,
实际上,通过设置不同的坐标范围和显示范围,可以创建不同比例的坐标轴。
也就是Y轴的间隔可以大于X轴的间隔,也可以小于X轴的间隔。
# Y轴的间隔大于X轴的间隔
plane1 = NumberPlane(
x_range=[-7, 7],
y_range=[-3, 3],
x_length=3,
y_length=3,
)
# Y轴的间隔小于X轴的间隔
plane2 = NumberPlane(
x_range=[-3, 3],
y_range=[-7, 7],
x_length=3,
y_length=3,
)
3.4. 绘制函数图像
使用NumberPlane
最大的用途就在于可以在其中绘制函数图像,在坐标系中绘制图像或几何图形,
可以更方便的定位它们的位置,调整它们之间的变换关系。
下面的示例在坐标系中绘制了2个函数,使用了坐标系基类提供的绘图方法:plot_parametric_curve
。
plane = NumberPlane(
x_range=[-4, 4],
y_range=[-16, 16],
x_length=6,
y_length=4,
)
g1 = plane.plot_parametric_curve(
lambda x: [x, x**2],
t_range=[-3.5, 3.5, 0.01],
)
g2 = plane.plot_parametric_curve(
lambda x: [x, x**3],
t_range=[-2.5, 2.5, 0.01],
)
4. 附件
文中的代码只是关键部分的截取,完整的代码共享在网盘中(number_plane.py
),
下载地址: 完整代码 (访问密码: 6872)
manim边做边学--直角平面的更多相关文章
- 边做边学入门微信小程序之仿豆瓣评分
微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...
- Grails边做边学入门篇[1]--------大家一起来动手建立project和Domain
近期工作比較忙,没空写博客了.我发现每周五的下午都是我最放松的时候,可能是迟延症的缘故吧...总是寄希望于周末,慢慢的.我的周末就被工作占领了. 希望大家不要有这种坏毛病.今日事,今日毕.当然我们程序 ...
- 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good
作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...
- 【Leetcode 做题学算法周刊】第四期
首发于微信公众号<前端成长记>,写于 2019.11.21 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 67 ...
- 做fzu oj 1045 做减法学到的sprintf()函数
题目 做题一直输不出答案,于是就上网去百度了这题的解题,发现解答十分的简短,而且其中我看见了平时没见过的函数,sprintf(). 于是就百度sprintf()的使用. 如下: 函数功能:把格式化的数 ...
- 【Leetcode 做题学算法周刊】第一期
首发于微信公众号<前端成长记>,写于 2019.10.28 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 1. ...
- 【Leetcode 做题学算法周刊】第二期
首发于微信公众号<前端成长记>,写于 2019.11.05 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 20 ...
- 【Leetcode 做题学算法周刊】第三期
首发于微信公众号<前端成长记>,写于 2019.11.13 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 35 ...
- 【Leetcode 做题学算法周刊】第六期
首发于微信公众号<前端成长记>,写于 2019.12.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 11 ...
- 【Leetcode 做题学算法周刊】第七期
首发于微信公众号<前端成长记>,写于 2020.01.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 12 ...
随机推荐
- openAI的仿真环境Gym Retro的Game Integration——新游戏融合(2)( 示例 demo )
内容接前文: openAI的仿真环境Gym Retro的Game Integration--新游戏融合(将retro中没有融合的ROM游戏加入其中) 前文大致简单的介绍了gym retro 库对新游戏 ...
- 用海豚调度器定时调度从Kafka到HDFS的kettle任务脚本
在实际项目中,从Kafka到HDFS的数据是每天自动生成一个文件,按日期区分.而且Kafka在不断生产数据,因此看看kettle是不是需要时刻运行?能不能按照每日自动生成数据文件? 为了测试实际项目中 ...
- Spring 相关知识
https://www.bilibili.com/video/BV1gW411W7wy?spm_id_from=333.788.b_636f6d6d656e74.173 老雷的Spring注解驱动 源 ...
- JVM指令大全之不太全系列
一.未归类系列A 此系列暂未归类. 指令码 助记符 说明0x00 nop ...
- ARM指令和Thumb指令的区别
ARM处理器的工作状态 https://blog.csdn.net/itismine/article/details/4753701?depth_1-utm_source=distribute.pc_ ...
- 树莓派CM4(二): UART/IIC/SPI调试
1. 参考资料 资料汇总页面 https://shumeipai.nxez.com/raspberry-pi-datasheets <bcm2711-peripherals.pdf>,下载 ...
- MessageBox弹出后无响应
这几天学习了自定义模板对话框类,就是说不用系统定义的模板对话框类来创建对话框 消息处理就不用返回0了,可直接返回DefWindowProc HINSTANCE hInstance = ::GetMod ...
- 【Jenkins】之自动化测试持续集成
一.创建jenkins项目 选择节点 创建指定名称的目录名: 写命令,执行shell: 命令填写: # 引入电脑配置文件 #. ~/.bash_profile cd Python_Interface ...
- .NET 摄像头采集
本文主要介绍摄像头(相机)如何采集数据,用于类似摄像头本地显示软件,以及流媒体数据传输场景如传屏.视讯会议等. 摄像头采集有多种方案,如AForge.NET.WPFMediaKit.OpenCvSha ...
- VMware Workstation虚拟机 + 许可证密钥
VMware Workstation虚拟机 + 许可证密钥 VMware Workstation是什么? VMware简介 VMware 安装 VMware系统要求 VMware 版本下载地址 许可证 ...