在数学可视化领域,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参数使得变换过程更加直观。

# 在__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],并应用了一个矩阵变换。

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

vector = Arrow(ORIGIN, [2, 1, 0], color=YELLOW)
self.add_vector(vector)
self.apply_matrix([[1, -1], [1, 1]])

2.3. 单位正方形的变换

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

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

self.add_unit_square(animate=True)
self.apply_matrix([[1, -1], [1, 1]])

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

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

# ... ...

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

3. 附件

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

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

manim边学边做--线性变换的场景类的更多相关文章

  1. 学EE做硬件找工作不如学CS做软件,为什么会这样?

    学EE做硬件找工作不如学CS做软件,为什么会这样? 电子工程(EE)就业最好的方向居然是转计算机,也许让有的人觉得很不公平,EE也是很重要的学科,我们学习也很努力,为什么就业会不如CS?也有的人好奇, ...

  2. 牛腩学Kotlin做Android应用

    牛腩学Kotlin做Android应用,蹭热度视频,边学边做, 01-kotlin插件安装及hello world 02-kotlin基础语法速览 哔哩哔哩观看地址:http://www.bilibi ...

  3. 使用jmeter做简单的场景设计

    使用jmeter做简单的场景设计 Jmeter: Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试.我之所以选择它,最重要的一点就是----开源 个人 ...

  4. php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)

    php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习) 一.总结 1.递归不优化的话,30层开外就有点吃力了 2.php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是p ...

  5. html5-3 html5标签(热点地图如何实现)(边学边做)

    html5-3 html5标签(热点地图如何实现)(边学边做) 一.总结 一句话总结:热点地图用绝对定位实现. 1.自定义列表怎么弄? dl  自定义列表dt  自定义标题dd  自定义列表内容 2. ...

  6. 老猿学5G:融合计费场景的离线计费会话的Nchf_OfflineOnlyCharging_Release释放操作

    ☞ ░ 前往老猿Python博文目录 ░ 一.Nchf_OfflineOnlyCharging_Release消息交互流程 Nchf_OfflineOnlyCharging_Release是CHF提供 ...

  7. 老猿学5G:融合计费场景的离线计费会话的Nchf_OfflineOnlyCharging_Update 更新操作过程

    ☞ ░ 前往老猿Python博文目录 ░ 一.Nchf_OfflineOnlyCharging_Update消息交互过程 Nchf_OfflineOnlyCharging_Update消息是是5G融合 ...

  8. (NO.00004)iOS实现打砖块游戏(五):游戏场景类

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 创建游戏场景类头文件 在Xcode创建新GameScene类,继 ...

  9. [原创]cocos2d-x研习录-第二阶 概念类之场景类(CCScene)

    场景类CCScene是Cocos2D-x在屏幕显示的内容,相当于游戏关卡或界面.CCDirector任何时候只能显示一个场景CCScene,游戏中可能存在若干场景,CCDirector通过场景切换达到 ...

  10. [置顶] 【玩转cocos2d-x之七】场景类CCScene和布景类CCLayer

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12708811 场景类CCScene和布景类CCLayer都是作为一个容器来使 ...

随机推荐

  1. Docker学习笔记(一) - Docker安装

    1.安装yum-utils yum install yum-utils device-mapper-persistent-data lvm2 复制 安装yum-utils是为方便添加yum源使用的,d ...

  2. Qt编写物联网管理平台46-云端数据同步

    一.前言 在上一篇文章说的采集数据转发的基础上,针对方案一还做了云端数据同步功能,满足各式各样的用户需求.云端数据库同步,相当于把本地采集到的数据实时存储到云端,至于这些记录到了云端后什么用途,客户端 ...

  3. findHomography()函数详解

    indHomography: 计算多个二维点对之间的最优单映射变换矩阵 H(3行x3列) ,使用最小均方误差或者RANSAC方法 函数功能:找到两个平面之间的转换矩阵. Mat cv::findHom ...

  4. [转]升级/重装win10系统--提示无法验证密钥的解决办法

    在由win7系统升级到win10时,出现了无法验证密钥的问题(还未提示输入密钥的时候就直接提示无法验证密钥),英文版报错为:Windows 10 setup has failed to validat ...

  5. 在命令中输入信息创建maven项目

    参考链接: 1.使用命令行创建maven web项目 2.Maven 三种archetype说明 3.maven创建项目时在generating project in interactive mode ...

  6. [转]Java Swing组件编程之JTable表格用法实例详解

    原文链接: Java Swing组件编程之JTable表格用法实例详解

  7. canal源码分析简介-4

    7.0 driver模块  2018-11-10 22:30:19  6,053 4 driver,顾名思义为驱动.熟悉jdbc编程的同学都知道,当项目中需要操作数据库(oracle.sqlserve ...

  8. Elasticsearch中数据是如何存储的

    前言 很多使用Elasticsearch的同学会关心数据存储在ES中的存储容量,会有这样的疑问:xxTB的数据入到ES会使用多少存储空间.这个问题其实很难直接回答的,只有数据写入ES后,才能观察到实际 ...

  9. 抽取网易云音乐热门评论:html+css+python+js 音乐与灵魂的碰撞

    抽取网易云音乐热门评论:html+css+python+js 音乐与灵魂的碰撞 代码链接 不说废话,上代码!!! get.py # get.py import urllib.request impor ...

  10. .NET9 AOT部署

    概念 AOT是Ahead-of-Time的缩写,AOT是将C#程序提前编译为机器代码(通常为平台特定的二进制文件),在应用程序启动之前完成编译过程. 微软官方文档是这样说的 将应用程序发布为本机 AO ...