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

ThreeDAxes是Manim中用于创建三维坐标系的类。

在数学、物理和工程等领域,三维坐标系的绘制是非常重要的。

ThreeDAxes使得用户能够在动画中直观地展示三维空间中的对象和关系,从而提高演示文稿和教学的效果。

ThreeDAxes提供了多种参数,如坐标轴的范围、长度、颜色、粗细等,以及光源位置和光泽度等,这些参数使得用户能够根据需要自定义坐标系的外观和行为。

1. 主要参数

ThreeDAxes的主要参数有:

参数名称 类型 说明
x_range Sequencefloat X轴的范围,格式为(起始值,结束值,步长)
y_range Sequencefloat Y轴的范围,格式为(起始值,结束值,步长)
z_range Sequencefloat 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 Sequencefloat 光源的位置,影响阴影和光照效果

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
python 复制代码
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轴 标签为**"收入"**。

python 复制代码
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 = x^2+y^2 的曲面。

python 复制代码
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)

相关推荐
zwd20055 小时前
Manim 画布尺寸与像素换算详解:frame_width、frame_height、pixel_width 和画质参数(0.21.0 实测)
python·分辨率·manim·数学动画·frame_width·manim教程
wang_yb5 小时前
MinMax vs Standard vs Robust:三种特征缩放怎么选
ai·数据分析·databook
wang_yb2 天前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
ai·databook
wang_yb4 天前
从循环到向量化:NumPy提速的7个关键思维
数据分析·databook
wang_yb6 天前
ManimCE v0.22.0 发布:输出配置大一统与渲染流程重构
databook·manim
wang_yb7 天前
Scikit-Learn实战:5步搞定PCA降维
ai·databook
zwd20059 天前
Manim add_sound 用法详解:time_offset、gain、多条音频与旁白对齐(2026 最新教程,0.21.0)
python·音频·动画·manim·数学动画·add_sound
wang_yb9 天前
什么是范数?用 NumPy 动手算一遍就明白了
数据分析·databook
wang_yb10 天前
从手动检查到自动监控:一个数据质量工作流的实现
数据分析·databook
zwd200512 天前
Manim move_to 和 shift 用法详解:相对位移、绝对落点与 aligned_edge(0.21.0 实测)
python·动画·可视化·shift·manim·数学动画·move_to