manim边做边学--通用三维坐标系
ThreeDAxes
是Manim
中用于创建三维坐标系的类。
在数学、物理和工程等领域,三维坐标系的绘制是非常重要的。
ThreeDAxes
使得用户能够在动画中直观地展示三维空间中的对象和关系,从而提高演示文稿和教学的效果。
ThreeDAxes
提供了多种参数,如坐标轴的范围、长度、颜色、粗细等,以及光源位置和光泽度等,这些参数使得用户能够根据需要自定义坐标系的外观和行为。
1. 主要参数
ThreeDAxes
的主要参数有:
参数名称 | 类型 | 说明 |
---|---|---|
x_range | Sequence[float] | X轴的范围,格式为(起始值,结束值,步长) |
y_range | Sequence[float] | Y轴的范围,格式为(起始值,结束值,步长) |
z_range | Sequence[float] | Z轴的范围,格式为(起始值,结束值,步长) |
x_length | float | X轴的长度 |
y_length | float | Y轴的长度 |
z_length | float | Z轴的长度 |
z_axis_config | dict | 对Z轴的配置,如颜色、粗细等 |
z_normal | Vector3D | 定义Z轴的“正向”方向 |
num_axis_pieces | int | 轴的细分数量 |
light_source | Sequence[float] | 光源的位置,影响阴影和光照效果 |
ThreeDAxes
也是继承自Axes
的,所以也有x_axis_config
和y_axis_config
参数,这里没有再列出来。
2. 主要方法
ThreeDAxes
主要使用的是下面2个方法:
名称 | 说明 |
---|---|
get_axis_labels | 为每个轴添加标签 |
add_coordinates | 在坐标系中添加网格线或刻度标记 |
3. 使用示例
下面通过几个示例展示ThreeDAxes
的关键功能和应用场景,每个示例都聚焦于该类的一个或多个核心参数或方法。
3.1. 坐标轴范围和刻度
在这个示例中,我们使用ThreeDAxes
的x_range
, y_range
, 和z_range
参数来设置坐标轴的范围,
并通过x_length
, y_length
, z_length
来调整坐标轴的长度。
示例中:
- 设置x轴范围为
(-5, 5)
,y轴范围为(-3, 3)
,z轴范围为(-2, 2)
- 调整x轴长度为
10
个单位,y轴长度为6
个单位,z轴长度为4
个单位 - 设置x轴刻度单位为
1.5
,y轴刻度单位为1
,z轴刻度单位为0.5
axes = ThreeDAxes(
x_range=(-5, 5, 1.5),
y_range=(-3, 3, 1),
z_range=(-2, 2, 0.5),
x_length=10,
y_length=6,
z_length=4,
)
axes.add_coordinates()
3.2. 自定义坐标轴颜色和标签
本示例将展示如何使用*_axis_config
参数来自定义坐标轴的颜色、粗细以及标签。
使用x_axis_config
将x轴设置红色,轴的粗细设为1
,
使用y_axis_config
将y轴设置绿色,轴的粗细设为3
,
使用z_axis_config
将z轴设置蓝色,轴的粗细设为5
。
然后,再为每个轴添加自定义标签,如x轴标签为"人口",y轴标签为"年龄",z轴标签为"收入"。
axes = ThreeDAxes(
x_axis_config={
"color": RED,
"stroke_width": 1,
},
y_axis_config={
"color": GREEN,
"stroke_width": 3,
},
z_axis_config={
"color": BLUE,
"stroke_width": 5,
},
).scale(0.6)
labels = axes.get_axis_labels(
Text("人口", font_size=20, color=RED),
Text("年龄", font_size=20, color=GREEN),
Text("收入", font_size=20, color=BLUE),
)
axes.add_coordinates()
3.3. 绘制三维函数
二维坐标系Axes
中绘制的是曲线函数,在三维坐标系ThreeDAxes
中,可以使用plot_surface
函数来绘制曲面函数。
本示例绘制一个 $ z = x2+y2 $的曲面。
axes = ThreeDAxes(
x_range=[-3, 3],
y_range=[-3, 3],
z_range=[-1, 3],
x_length=6,
y_length=6,
z_length=4,
)
graph = axes.plot_surface(
lambda u, v: u**2 + v**2,
u_range=[-1, 1],
v_range=[-1, 1],
)
4. 附件
文中的代码只是关键部分的截取,完整的代码共享在网盘中(threed_axes.py
),
下载地址: 完整代码 (访问密码: 6872)
manim边做边学--通用三维坐标系的更多相关文章
- matlab中的三维坐标系与旋转
1. matlab中的三维坐标系 matlab中的三维坐标系是使用的右手坐标系: 输入以下代码: >> plot3(0,0,0) >> xlabel('axis X') > ...
- 边做边学入门微信小程序之仿豆瓣评分
微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...
- 不到50行代码实现一个能对请求并发数做限制的通用RequestDecorator
使用场景 在开发中,我们可能会遇到一些对异步请求数做并发量限制的场景,比如说微信小程序的request并发最多为5个,又或者我们需要做一些批量处理的工作,可是我们又不想同时对服务器发出太多请求(可能会 ...
- 对请求并发数做限制的通用RequestDecorator
使用场景 在开发中,我们可能会遇到一些对异步请求数做并发量限制的场景,比如说微信小程序的request并发最多为5个,又或者我们需要做一些批量处理的工作,可是我们又不想同时对服务器发出太多请求(可能会 ...
- Grails边做边学入门篇[1]--------大家一起来动手建立project和Domain
近期工作比較忙,没空写博客了.我发现每周五的下午都是我最放松的时候,可能是迟延症的缘故吧...总是寄希望于周末,慢慢的.我的周末就被工作占领了. 希望大家不要有这种坏毛病.今日事,今日毕.当然我们程序 ...
- three.js 添加三维坐标系
//显示三维坐标系 ); scene.add(axis);
- 计算机图形学学习方法和相关书籍,做游戏,GIS,虚拟现实,三维引擎的都能够看看.
本书參照<<图形学扫盲>> 整理的,原文内容引子: http://www.cppblog.com/lai3d/archive/2008/12/30/70796.html 前言: ...
- Android OpenGL ES(十二):三维坐标系及坐标变换初步 .
OpenGL ES图形库最终的结果是在二维平面上显示3D物体(常称作模型Model)这是因为目前的打部分显示器还只能显示二维图形.但我们在构造3D模型时必须要有空间现象能力,所有对模型的描述还是使用三 ...
- 【opencv】 solvepnp 和 solvepnpRansac 求解 【空间三维坐标系 到 图像二维坐标系】的 三维旋转R 和 三维平移 T 【opencv2使用solvepnp求解rt不准的问题】
参考: pnp问题 与 solvepnp函数:https://www.jianshu.com/p/b97406d8833c 对图片进行二维仿射变换cv2.warpAffine() or 对图片进行二维 ...
- 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good
作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...
随机推荐
- 旧物利用 - 将机顶盒改造为一台Linux开发机!
前言 机顶盒型号:移动魔百盒CM201-2(CH),芯片组: hi3798mv300(hi3798mv3dmm),其他型号类似 理论上适用于以下SOC:Hi3798Mv100 / Hi3798Cv20 ...
- nginx配置web服务|反向代理|负载均衡
目录 http模块 server模块(虚拟主机配置) location模块 基本语法 匹配类型 等号匹配(=) 正则匹配(~) 忽略大小写的正则匹配(~*) 常见指令 嵌套 location 反向代理 ...
- Atcoder ABC296 F
Atcoder ABC296 F F - Simultaneous Swap 链接: F - Simultaneous Swap (atcoder.jp) 简要题意: 问题陈述 给你两个 \(N\) ...
- Modbus ASCII 获取数据
根据银河高低温试验箱协议读取数据 1.协议内容 8.1:通讯协议介绍 8.1.5 通讯设置 本通讯协议使用异步串行通讯方式,1 个起始位.8 个数据位.2 个停止 位.无奇偶校验数据通讯格式,其中数据 ...
- Cloud Studio:颠覆传统的云端开发与学习解决方案
Cloud Studio Cloud Studio(云端 IDE)是一款基于浏览器的集成开发环境,它为开发者提供了一个高效.稳定的云端工作站.用户在使用 Cloud Studio 时,无需进行任何本地 ...
- Docker 抓取 buildx 缓存
有时候由于配置的失误,导致构建了好久的镜像没能推送到云或者保存到本地.而如果重新构建,则可能又要全部重来.其实这时候我们可以导出 buildx 中的缓存到本地文件,再将本地文件导入为镜像.这样可以节省 ...
- RxJS 系列 – Observable to Subject (Hot, Cold, Warm, connectable, share)
前言 前两篇介绍了 Observable 和 Subject.它们有一个重大区别当 multiple subscribe 的时候. Observable 每一次 subscribe 都会调用初始化方法 ...
- Azure – 对比 AWS Research Report
前言 最近有机会接触了一下 AWS, 在对比完之后决定继续用 Azure, 这里小小记入一下. VM & SQL Server Azure 和 AWS 都可以选择 2 in 1, 或者 Web ...
- C++ char*类型与vector类型的相互转换
char*类型与vector<char> 类型的相互转换 很多时候需要使用动态的字符串,但是char*难以完成相应的扩容操作,而动态数组vector则可以简单地完成,结合二者特性就可以完成 ...
- SpringMVC —— 入门案例执行流程
启动服务器初始化过程 1.服务器启动,执行ServletContainersInitConfig类,初始化web容器 2.执行createServletApplicationContext方法, ...