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
作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...
随机推荐
- java创建一个日历(某个月)实例
''' package helloworld; //需要导入py4j.jar包 import py4j.GatewayServer; import java.util.*; import java.l ...
- 原生js操作dom的总结
一.学习DOM之前需要知道的 1.什么是window? window:是一个全局对象, 代表浏览器中一个打开的窗口, 每个窗口都是一个window对象 2.什么是document? d ...
- dubbo超时异常
荐
dubbo超时异常 在调用dubbo服务时经常看到如下错误: Caused by: com.alibaba.dubbo.remoting.TimeoutException: Waiting serve ...
- 为什么使用#define 而不是用enum定义常量
typedef enum { IOTAG_PORT__A = (0), IOTAG_PORT__B, IOTAG_PORT__C, IOTAG_PORT__F, IOTAG_PORT__ITEMS } ...
- 瑞芯微-I2S | 音频驱动调试基本命令和工具-基于rk3568-2
基于Linux嵌入式设备常用调试方法很多,本文一口君把调试语音用到的工具和方法给大家做一个简单的介绍. 1. procfs.sysfs Linux系统上的/proc目录是一种文件系统,即proc文件系 ...
- Sql语句的两表联合查询
string sql = "select mID,mName,mSex,mAge,(select fzName from TxlFenZu where ID=mFenZu) as mFenZ ...
- Playwright 浏览器窗口最大化
实现方式 浏览器启动时,加参数 args=['--start-maximized']: 创建上下文时,加参数 no_viewport=True. from playwright.sync_api im ...
- 以Top-Down思维去解决问题——递归
目录 递归的基础 递归的底层实现(不是重点) 递归的应用场景 编程中 两种解决问题的思维 自下而上(Bottom-Up) 自上而下(Top-Down) 自上而下的思考过程--求和案例 台阶问题 案例 ...
- Kubernetes-6:Pod生命周期介绍(init Container)
Pod生命周期 生命周期 1.API server调用kubelet下达Pod创建指令 2.容器环境初始化 3.进入Pod生命周期内(Pod开始创建) 4.Pod只要创建,就会自动生成一个pause容 ...
- python pyqt6 QComboBox 设定下拉框背景颜色
设定QComboBox 的背景颜色,边框设定,以及下拉框的背景颜色以及边框设定, selection-background-color 不生效可忽略 xxx_source = QComboBox(se ...