manim边学边做--线性变换的场景类

在数学可视化领域,ManimLinearTransformationScene类为线性代数教学提供了强大的工具。

这个专门设计的场景类继承自VectorScene,通过内置的变换动画和坐标系管理,能够直观展示线性变换的几何意义。

其核心功能包括:

  • 自动管理坐标系和基向量的变换
  • 支持矩阵变换、逆变换、转置变换等多种变换类型
  • 自动保留变换痕迹
  • 集成向量和单位正方形的动态展示

1. LinearTransformationScene概要

线性变换是线性代数中的核心概念之一,它描述了如何通过矩阵将一个向量空间映射到另一个向量空间。

在实际教学和研究中,理解线性变换的几何意义往往比单纯计算矩阵乘法更具挑战性。

LinearTransformationScene正是为了帮助学习者更好地理解线性变换的几何本质而设计的。

它提供了许多参数和方法,用于定制和控制线性变换动画的行为。

1.1. 主要参数

LinearTransformationScene的主要参数有:

参数名称 类型 说明
include_background_plane bool 是否在场景中包含背景平面。背景平面是一个坐标网格,用于帮助观察线性变换对整个空间的影响。
include_foreground_plane bool 是否包含前景平面。前景平面通常用于突出显示某些特定的几何对象,如向量或图形。
show_coordinates bool 是否显示背景平面的坐标轴。
show_basis_vectors bool 是否显示基向量
leave_ghost_vectors bool 是否在变换后保留基向量的原始位置。这对于观察变换的动态过程非常有用。
i_hat_color Color 基向量i_hat的颜色(默认绿色)
j_hat_color Color 基向量j_hat的颜色(默认红色)

1.2. 主要方法

LinearTransformationScene的主要方法有:

名称 说明
apply_matrix 应用一个矩阵变换到整个场景中。
apply_inverse 应用矩阵的逆变换。
apply_nonlinear_transformation 应用非线性变换。
add_vector 添加一个向量到场景中,并将其加入可移动向量列表。
add_unit_square 添加一个单位正方形到场景中。
write_vector_coordinates 显示向量的坐标矩阵。

2. 使用示例

为了更好地理解LinearTransformationScene的强大功能,下面通过示例展示其在不同场景下的应用。

2.1. 矩阵变换

在这个示例中,我们展示了如何通过矩阵[[2, 1], [0, 1]]对整个坐标系进行变换。

show_coordinates=Trueleave_ghost_vectors=True参数使得变换过程更加直观。

python 复制代码
# 在__init__函数中
# 设置LinearTransformationScene的参数
def __init__(self, **kwargs):
    super().__init__(
        show_coordinates=True,
        leave_ghost_vectors=True,
        **kwargs,
    )

matrix = [[2, 1], [0, 1]]
self.apply_matrix(matrix)

2.2. 向量的变换

此示例中,我们添加了一个黄色的向量[2, 1],并应用了一个矩阵变换。

通过观察向量在变换前后的变化,可以更直观地理解线性变换对向量的影响。

python 复制代码
vector = Arrow(ORIGIN, [2, 1, 0], color=YELLOW)
self.add_vector(vector)
self.apply_matrix([[1, -1], [1, 1]])

2.3. 单位正方形的变换

此示例中,我们添加了一个单位正方形,并对其应用了一个矩阵变换。

通过观察单位正方形在变换下的变化,可以直观地理解线性变换对面积和形状的影响。

python 复制代码
self.add_unit_square(animate=True)
self.apply_matrix([[1, -1], [1, 1]])

这个示例在ManimCE v0.19.0版本运行有点问题,源码中似乎少引用了两个类,

对源码文件(manim\scene\vector_space_scene.py)做如下修改。

python 复制代码
# ... ...

# 这里加上 DrawBorderThenFill 
from ..animation.creation import Create, Write, DrawBorderThenFill

# ... ...

# 这里加上 Group 
from ..mobject.mobject import Mobject, Group

3. 附件

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

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

相关推荐
MOMO陌染29 分钟前
Python 饼图入门:3 行代码展示数据占比
后端·python
vvoennvv1 小时前
【Python TensorFlow】 TCN-GRU时间序列卷积门控循环神经网络时序预测算法(附代码)
python·rnn·神经网络·机器学习·gru·tensorflow·tcn
自学互联网2 小时前
使用Python构建钢铁行业生产监控系统:从理论到实践
开发语言·python
无心水2 小时前
【Python实战进阶】7、Python条件与循环实战详解:从基础语法到高级技巧
android·java·python·python列表推导式·python条件语句·python循环语句·python实战案例
xwill*2 小时前
RDT-1B: A DIFFUSION FOUNDATION MODEL FOR BIMANUAL MANIPULATION
人工智能·pytorch·python·深度学习
陈奕昆2 小时前
n8n实战营Day2课时2:Loop+Merge节点进阶·Excel批量校验实操
人工智能·python·excel·n8n
程序猿追2 小时前
PyTorch算子模板库技术解读:无缝衔接PyTorch模型与Ascend硬件的桥梁
人工智能·pytorch·python·深度学习·机器学习
秋邱3 小时前
高等教育 AI 智能体的 “导学诊践” 闭环
开发语言·网络·数据库·人工智能·python·docker
组合缺一3 小时前
Solon AI 开发学习6 - chat - 两种 http 流式输入输出
python·学习·http
沐浴露z3 小时前
为什么使用SpringAI时通常用Builder来创建对象?详解 【Builder模式】和【直接 new】的区别
java·python·建造者模式