manim边学边做--通用二维坐标系

news/2024/10/30 13:28:08/文章来源:https://www.cnblogs.com/wang_yb/p/18515637

ManimAxes对象是通用的坐标系对象,之前几篇介绍的数轴和各种坐标平面都是继承Axes对象。

Axes对象的主要作用在于创建和管理二维坐标轴,以满足我们制作数学动画时的各种需求。

具体来说,Axes对象可以帮助我们:

  1. 定义坐标系:定义一个明确的坐标系,通过设置x轴和y轴的范围、步长等参数,创建符合自己需求的坐标轴
  2. 定制坐标轴样式:可以设置坐标轴的颜色、刻度线的长度、箭头的长度等属性,还可以控制是否显示刻度线、标签和注释等
  3. 绘制函数曲线:绘制各种自定义的函数曲线,如二次函数、三角函数、指数函数等
  4. 添加图形和标签:可以添加图形元素(如圆、三角形等)和标签(如坐标轴标签、标题等)

1. 主要参数

Axes的主要参数有:

参数名称 类型 说明
x_range Sequence[float] 横坐标轴范围,间隔
y_range Sequence[float] 纵坐标轴范围,间隔
x_length float 横轴的宽度
y_length float 纵轴的高度
axis_config dict 坐标轴的通用配置选项
x_axis_config dict 横轴的配置选项
y_axis_config dict 纵轴的配置选项
tips bool 横轴的右边和纵轴上边是否显示箭头

参数axis_configx_axis_configy_axis_config中的可配置的项目类似,

区别在于axis_config是针对整个坐标轴的配置,

x_axis_configy_axis_config是分别针对横轴和纵轴的配置。

如果它们设置了相同的项,那么x_axis_configy_axis_config中的设置会覆盖axis_config中相应的设置。

可对坐标轴设置的项有很多,下面列举了一些常用的。

  • stroke_color:设置坐标轴线的颜色
  • stroke_width(或line_width):设置坐标轴线的宽度
  • include_numbers:是否在坐标轴上显示数字
  • numbers_to_include:指定要显示数字的列表。
  • numbers_with_elongated_ticks:指定要加长刻度线的数字列表。用于突出显示特定的刻度
  • include_ticks:是否显示刻度线
  • tick_size:设置刻度线的长度
  • include_tip:是否在坐标轴的末端显示箭头
  • tip_length:设置箭头的长度。当include_tipTrue时,此选项才有效
  • font_size:设置坐标轴上数字的字体大小
  • label_direction:设置坐标轴标签的方向
  • scaling:设置坐标轴的刻度缩放方式,如线性刻度、对数刻度等

2. 主要方法

Axes的方法主要是为了动态获取坐标轴上的各种信息,以及在坐标轴上绘制函数图形。

其中用的比较多的有:

名称 说明
coords_to_point 将坐标转换为在屏幕上点的位置
point_to_coords 将屏幕上点的位置转换为坐标
get_axes 获取各个坐标轴的信息
plot_line_graph 在坐标轴中绘制函数图形

3. 使用示例

下面通过由简单到复杂的示例,一步步演示如何使用Axes对象。

3.1. 基本坐标系

使用Axes对象创建一个基本的二维坐标系,设置x轴y轴的范围,并显示坐标轴上的数字刻度线

下面的示例设置x轴范围[-5,5]y轴范围[-3,3],坐标轴上以1为间隔显示数字和刻度线。

# x轴范围从-5到5,间隔为1
# y轴范围从-3到3,间隔为1
# 显示坐标轴上的数字
Axes(x_range=[-5, 5, 1],y_range=[-3, 3, 1],axis_config={"include_numbers": True},
)

3.2. 自定义坐标轴样式

自定义坐标轴的样式,包括轴的颜色、线条宽度、刻度线的长度和是否显示箭头等。

下面的示例将x轴设置为红色,线条宽度为2;y轴设置为蓝色,线条宽度为1.5,且x轴y轴末端均显示不同的箭头。

axes = Axes(x_range=[-5, 5, 1],y_range=[-3, 3, 1],x_axis_config={"color": RED,"stroke_width": 5,"include_tip": True,  # 显示箭头"tip_shape": ArrowSquareTip,},y_axis_config={"color": BLUE,"stroke_width": 1.5,"include_tip": True,"tip_shape": StealthTip,},axis_config={# 加长特定数字的刻度线"numbers_with_elongated_ticks": [0, -3, 3],"font_size": 20,},  
)

3.3. 绘制函数曲线

坐标系上绘制一个函数曲线。

比如,下面的示例绘制一个抛物线($ y=x^2 \()和一个三角函数曲线(\) y=\sin(\theta) $)。

axes = Axes(x_range=[-5, 5, 1],y_range=[-5, 5, 1],x_axis_config={"color": RED,},y_axis_config={"color": BLUE,},axis_config={"include_numbers": True,"font_size": 20,"include_tip": True,"tip_shape": StealthTip,"tip_length": 2,},
)# 抛物线
func = lambda x: x**2
graph = axes.plot(func, x_range=[-2, 2], color=GREEN)
self.play(Create(graph), run_time=run_time)# 三角函数
func = lambda x: np.sin(x)
graph = axes.plot(func, x_range=[-5, 5], color=YELLOW)
self.play(Create(graph), run_time=run_time)

3.4. 添加标签和注释

在坐标轴上添加标签,并在函数曲线上添加注释,以解释图形的含义。

下面的示例基于上一节的函数曲线,标出坐标轴名称xy,并且选择抛物线上的一个点,标出点的坐标。

axes = Axes(x_range=[-5, 5, 1],y_range=[-5, 5, 1],x_axis_config={"color": RED,},y_axis_config={"color": BLUE,},axis_config={"include_numbers": True,"font_size": 20,"include_tip": True,"tip_shape": StealthTip,"tip_length": 2,},
)# 绘制曲线
func = lambda x: x**2
graph = axes.plot(func, x_range=[-2, 2], color=GREEN, stroke_width=2)# 添加标签
x_label = axes.get_x_axis_label(MathTex("x", font_size=25, color=RED),direction=UP,
)
y_label = axes.get_y_axis_label(MathTex("y", font_size=25, color=BLUE),direction=RIGHT,
)# 标记一个点
x = 1.5
y = x * x
d = Dot(axes.coords_to_point(x, y), color=YELLOW)
txt = Matrix([[x], [y]]).scale(0.5).next_to(d.get_center(), RIGHT)

4. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(axes.py),

下载地址: 完整代码 (访问密码: 6872)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/824120.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SHCTF week1-3

SHCTF week1-3最后一周没时间做了,开摆了. 1zflask robots.txt文件泄露加任意命令执行 import os import flask from flask import Flask, request, send_from_directory, send_fileapp = Flask(__name__)@app.route(/api) def api():cmd = request.args.get(SSHCTFF, ls /)res…

网络流的认识

# 网络流的认识 ## 什么是流网络 网络(`network`)是指一个特殊的有向图 $G = (V,E)$,其与一般有向图的不同之处在于有**容量和源汇点**,不考虑反向边。 其中,我们有以下变量来方便表示: - $S$:源点 - $T$:汇点 - $c(u,v)$:表示从 $u$ 到 $v$ 这条有向边的**容量**为 $…

CF370

废话370:纪念盗笔青春提交记录几个脑残错误后文会提到 3.题目: 黄黄绿蓝蓝( 幸好 370 不是“红红红红红” | “黑黑黑黑黑” ) 算法: 是没有滴 贪心,前缀和 正题 CF370A Rook, Bishop and King 签到数学题 车可以两步到达任意点 ,只需判断出发点与目标点是否在同行 | 同…

那两天,我的灵魂缺失了

写在前面 261 字 | 思念 | 回忆 | 爱恋 | 悔恨 | 执念 | 断舍离 | 放弃 For Nileicna. 正文我的灵魂每一天都在游走。6 月 8 日的下午 17:00,吹过一阵风,带走我的身体。我的灵魂停留在原地。我跟很多人说,我不认识你。那些时候,我的灵魂总是寄存在十字架上。自那天之后,每…

轻松上手CANoe Scenario Editor———智能网联工程师入门篇

(小编先带大家扫盲一下) V2X(Vehicle-to-Everything,车与万物通信)是一种先进的通信技术,使车辆能够与周围环境进行信息交换。这不仅包括与其他车辆(V2V)的互动,还涵盖与基础设施(V2I)和行人(V2P)的通信。通过V2X,车辆能够实时获取周围信息,从而提升行驶安全性和…

Windows Server 2016 中文版、英文版下载 (updated Oct 2024)

Windows Server 2016 中文版、英文版下载 (updated Oct 2024)Windows Server 2016 中文版、英文版下载 (updated Oct 2024) Windows Server 2016 Version 1607 请访问原文链接:https://sysin.org/blog/windows-server-2016/ 查看最新版。原创作品,转载请保留出处。 作者主页:…

Windows 7 Windows Server 2008 R2 简体中文版下载 (updated Oct 2024)

Windows 7 & Windows Server 2008 R2 简体中文版下载 (updated Oct 2024)Windows 7 & Windows Server 2008 R2 简体中文版下载 (updated Oct 2024) Windows 7 & Windows Server 2008 R2 (2024 年 10 月更新) 请访问原文链接:https://sysin.org/blog/windows-7/ 查…

SA:从入门到入土

基本应用 读入一个长度为 $ n $ 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序(用 ASCII 数值比较)从小到大排序。 解法 1.将每个后缀取出来,直接排序 \(O(n^2 \log n)\) 2.用hash二分LCP比较下一位,\(O(n \log^2 n)\) 3.倍增求后缀数组,\…

06.动态代理设计模式

06.动态代理设计模式 目录介绍01.为何要动态代理1.1 为何要动态代理 1.2 动态代理思考02.动态代理的概念2.1 动态代理定义 2.2 动态代理类比理解 2.3 动态代理参与者 2.4 动态代理步骤03.动态代理的实现3.1 罗列一个场景 3.2 用一个例子理解代理 3.3 基于接口动态代理 3.4 基于…

.NET 8.0 开源在线考试系统(支持移动端)

https://www.cnblogs.com/1312mn/p/18510576阅读目录前言 系统介绍 系统功能 支持环境 系统源码 项目部署 项目效果 项目总结 项目地址 最后前言 推荐一款基于.NET 8.0 免费开源跨平台在线考试系统,系统不仅支持桌面端,还特别优化了移动端的用户体验。 通过本系统可以轻松搭建…

GaussDB数据计算路由层(Coordinator)关键技术方案

GaussDB Kernel V5版本的Catalog还是本地存储, 所以还需要考虑catalog的持久化问题.未来演进元数据解耦,Coordinator 无状态, 就不需要考虑Catalog持久化问题了。但是跨节点场景下的事务提交在Coordinator上还是要持久化的。图14 Coordinator模块图 路由信息:每个表数据共分1…

GaussDB全局事务管理层(GTM)关键技术方案

GTM 仅处理全局时间戳请求, 64位CSN递增,几乎都是CPU ++和消息收发操作。不是每次都写ETCD, 而是采用定期持久化到ETCD 里, 每次写ETCD的CSN要加上一个backup_step (100w), 一旦GTM故障,CSN从ETCD读取出来的值保证单调递增。当前GTM 只完成CSN++, 预估可以支持200M/s 请求…