直角平面NumberPlaneManim库中用于创建二维坐标平面的对象,它可以帮助用户在场景中可视化坐标轴以及网格线。

通过坐标轴、网格线以及刻度,它能够动态地展示函数曲线、几何图形以及它们的变换过程,使得复杂的数学概念变得直观易懂。

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_stylefaded_line_ratio

2. 主要方法

Manim中的坐标系统CoordinateSystem类提供了很多方法,包括:

  1. 获取和设置坐标系统属性的方法
  2. 坐标系中坐标和屏幕上坐标转换的方法
  3. 坐标系中绘制图形(点,线,面等等)的方法

后续介绍各种坐标系统时会用在示例中用到其中的方法,这里不再一一介绍。

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. 不同比例的坐标轴

默认情况下,NumberPlaneX轴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边做边学--直角平面的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. DataOps 新趋势:联通数科如何利用 DolphinScheduler 实现数据一体化管理

    引言 在DataOps(数据运营)的推动下,越来越多的企业开始关注数据研发和运营的一体化建设.DataOps通过自动化和流程优化,帮助企业实现数据的高效流转和管理. 当前,Apache Dolphin ...

  2. 解决Perforce lua文件utf-8 with bom

    设置typemap,将lua文件定义为unicode

  3. .NET 8 中利用 MediatR 实现高效消息传递

    前言 MediatR 是 .NET 下的一个实现消息传递的库,轻量级.简洁高效,用于实现进程内的消息传递机制.它基于中介者设计模式,支持请求/响应.命令.查询.通知和事件等多种消息传递模式.通过泛型支 ...

  4. 牛客周赛 Round 8

    牛客周赛 Round 8 A-小美的排列询问_牛客周赛 Round 8 (nowcoder.com) 枚举即可 #include<bits/stdc++.h> using i64 = lo ...

  5. dubbo超时异常 荐

    dubbo超时异常 在调用dubbo服务时经常看到如下错误: Caused by: com.alibaba.dubbo.remoting.TimeoutException: Waiting serve ...

  6. OpenPCDet复现过程记录

    0.前言 OpenPCDet项目之前我就复现过,一个很优秀的项目,这几天又需要用到这个项目,再次复现遇到了不少问题,特此记录复现的流程 1.环境准备 1.1.前置条件 以下是我安装的版本 CUDA 1 ...

  7. P10789 [NOI2024] 登山

    思路: 我们可以对于每个 \(i\) 找到它能跳到的最远的点和最近的点,倍增求一下 \(k\) 级祖先即可,令 \([l_i,r_i]\) 新表示 \(i\) 能跳到其祖先中深度在 \([l_i,r_ ...

  8. 反转字符串II(541)

    题目描述 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符. 如果剩余字符少于 k 个,则将剩余字符全部反转. 如果剩余字符小于 2 ...

  9. Pandas从入门到放弃

    公众号本文地址:https://mp.weixin.qq.com/s/mSkA5KvL1390Js8_1ZBiyw Pandas简介 Pandas是Panel data(面板数据)和Data anal ...

  10. php自定义函数访问其他地方定义的变量

    新捣鼓php,很多地方有.net的思维好难改过来. 在Connection/config.php 自定义了数据库连接字符串 然后在外部页面,自定义了一个function,对数据库进行操作 然后死活都给 ...