python动画:场景的线性变换展示
一,主函数
LinearTransformationScene 是 Manim 中用于展示线性变换的场景类。它通过在一幅背景和前景平面上展示向量和变换,帮助理解线性代数中的概念。
LinearTransformationScene(include_background_plane=True,
include_foreground_plane=True, background_plane_kwargs=None,
foreground_plane_kwargs=None, show_coordinates=False,
show_basis_vectors=True, basis_vector_stroke_width=6,
i_hat_color=ManimColor('#83C167'), j_hat_color=ManimColor('#FC6255'),
leave_ghost_vectors=False, **kwargs)
以下是该函数及其参数的解释:
参数解释:
-
include_background_plane(bool): 是否包括背景平面。默认为 True,它显示背景平面用于帮助视觉化向量和变换。 -
include_foreground_plane(bool): 是否包括前景平面。默认为 True,前景平面可以用于显示变换后的向量。 -
background_plane_kwargs(dict): 背景平面的一些可选参数,例如颜色、大小等。默认是 None,表示使用默认设置。 -
foreground_plane_kwargs(dict): 前景平面的可选参数,可以设置不同的样式或属性。默认是 None。 -
show_coordinates(bool): 是否显示坐标轴。默认为 False。 -
show_basis_vectors(bool): 是否显示基向量(i_hat 和 j_hat)。默认为 True。 -
basis_vector_stroke_width(int): 基向量的线宽。默认为 6。 -
i_hat_color(ManimColor): i 方向基向量的颜色,默认为 '#83C167'。 -
j_hat_color(ManimColor): j 方向基向量的颜色,默认为 '#FC6255'。 -
leave_ghost_vectors(bool): 是否保留“幽灵”向量(即变换前后都可见的向量)。默认为 False。 -
**kwargs: 其他可选参数,可以传入给父类的构造函数。
示例代码:
from manim import * class LinearTransformationSceneExample01(LinearTransformationScene): def __init__(self, **kwargs): # 初始化父类 LinearTransformationScene,并设置一些属性 LinearTransformationScene.__init__( self, include_background_plane=True, # 包括背景平面 include_foreground_plane=True, # 包括前景平面 background_plane_kwargs=None, # 背景平面的参数(可选) foreground_plane_kwargs=None, # 前景平面的参数(可选) show_coordinates=False, # 是否显示坐标轴坐标 show_basis_vectors=True, # 是否显示基础向量 basis_vector_stroke_width=6, # 基础向量的线宽 i_hat_color=ManimColor('#83C167'), # i 向量的颜色 j_hat_color=ManimColor('#FC6255'), # j 向量的颜色 leave_ghost_vectors=False, # 是否保留变换之后的向量影像 **kwargs # 其他参数 ) def construct(self): # 定义一个线性变换矩阵 matrix = [[1, 1], [0, 1]] # 创建坐标轴并添加坐标 ax = Axes().add_coordinates() self.add(ax) # 将坐标轴添加到场景中 # 应用线性变换矩阵 self.apply_matrix(matrix,run_time=1)

二,函数方法
1.apply_matrix(matrix, **kwargs)方法
apply_matrix(matrix, **kwargs) 是 Manim 中 LinearTransformationScene 类的一个方法,用于将给定的矩阵应用于场景中的对象(如几何形状、文本或矢量等)。这个方法是进行动画制作时实现线性变换的重要工具,能够直观地演示线性代数中的矩阵变换如何影响图形。
方法参数
-
matrix: 这是一个二维列表或者 NumPy 数组,代表一个线性变换矩阵。该矩阵的维度应当与操作的对象的维度相匹配。例如,对于二维对象(如平面内的图形),你需要提供一个 2x2 的矩阵。矩阵中的元素决定了对象的缩放、旋转、平移等变换效果。
-
kwargs: 这个参数允许传递其他关键字参数,通常用于设置动画的相关属性,例如持续时间(
run_time)、动画的延迟(lag_ratio),以及是否在动画结束后保留变换结果的标志(path_arc)等。通过这些可选参数,可以更加灵活地控制动画的表现和视觉效果。
方法功能
apply_matrix() 的主要功能是将指定的矩阵应用于场景中的对象,具体流程如下:
-
计算变换: 根据传入的矩阵,计算出对象在变换后的位置和形状。这一过程涉及到矩阵乘法,将对象的每个顶点坐标与矩阵相乘,从而得到新的坐标。
-
更新对象: 将计算后的新坐标应用到对象上。对于大多数对象而言,这意味着它们的顶点、边界和外观会根据新的坐标重新绘制。
-
动画表现: 可以通过提供的
kwargs设置动画属性,例如变换的时间和延迟,使变换更加动态和平滑。这样可以增强观众的视觉体验,使线性变换不仅仅是数学计算,而是通过动画直观呈现。
小结
总的来说,apply_matrix(matrix, **kwargs) 方法在 Manim 中是实现线性变换的核心工具,通过对矩阵的灵活运用,用户可以创建丰富多彩的数学可视化效果,将抽象的数学概念变得生动有趣。无论是学术研究、教学演示还是创意动画,这个方法都提供了强大的支持。
2.apply_transposed_matrix(transposed_matrix, **kwargs)方法
apply_transposed_matrix(transposed_matrix, **kwargs) 是 Manim 中 LinearTransformationScene 类的一个方法,用于将给定的转置矩阵应用于场景中的对象。这一方法在进行线性变换演示时非常重要,特别是在涉及到坐标变换、数据变换以及几何变换时。
方法参数
-
transposed_matrix: 这是一个二维列表或 NumPy 数组,表示需要应用的转置矩阵。转置矩阵是通过交换矩阵的行和列得到的,彼此之间的元素位置被互换。对于二维覆盖面的操作,转置矩阵通常是一个 2x2 的矩阵。由于线性变换本质上是通过矩阵运算来实现的,在需要展示对象如何在新的坐标系中变换时,转置矩阵尤其有用。
-
kwargs: 该参数允许您传递其他关键字参数,通常用于控制动画的外观和行为。这包括动画的持续时间(如
run_time)、延迟(如lag_ratio)、路径弧度(path_arc)等可选设置。通过这些参数,用户能够更好地控制动画效果,以确保变换的动态表现既美观又符合预期。
方法功能
apply_transposed_matrix() 的主要功能在于将转置矩阵应用于场景中的对象,与 apply_matrix() 类似,但它使用的是变换的转置矩阵。这一过程如下:
-
计算变换: 依据传入的转置矩阵,计算出对象在变换后的位置。通过与转置矩阵进行矩阵乘法,可以获取对象新位置的坐标。这对于理解数据或几何体在新维度上的表现尤为重要。
-
更新对象: 接下来,将计算得出的新坐标应用于对象上。这一步通常涉及到重新定义对象的顶点,因此对象的形状和位置会发生变化。
-
动画表现: 使用提供的
kwargs,可以设置动画的持续时间和视觉效果。例如,您可以调整动画的速度,使其在视觉上更加流畅,或者增加延迟以强调变换过程。
小结
总的来说,apply_transposed_matrix(transposed_matrix, **kwargs) 方法为用户提供了一种简便的方式,将转置矩阵应用于 Manim 中的对象,展示线性变换的影响。这种能力提高了数学可视化的表达力,使得抽象的数学概念能够通过动态展示变得更加直观,适用于数学教育、数据科学展示和各种创意动画制作。通过使用该方法,用户可以方便地探索和表达各种数学特性与变换关系。
相关文章:
python动画:场景的线性变换展示
一,主函数 LinearTransformationScene 是 Manim 中用于展示线性变换的场景类。它通过在一幅背景和前景平面上展示向量和变换,帮助理解线性代数中的概念。 LinearTransformationScene(include_background_planeTrue, include_foreground_planeTrue, ba…...
HBase体系架构与环境搭建
这里写目录标题 一、常见的NoSQL数据库二、HBase的体系架构和表结构三、搭建HBasa环境1.本地模式2.伪分布模式全分布模式HA模式 一、常见的NoSQL数据库 NoSQL数据库的说明与定义 NoSQL是一种不同于关系数据库的数据库管理系统设计方式,是对非关系型数据库的统称。它…...
海思SD3403/SS928V100开发(16)Tsensor驱动开发
1. 前言 由于需要检测SD3403芯片内部实时温度,需要开发Tsensor传感器驱动和应用 查看手册发现SD3403内部有三个Tsensor传感器 可以参考之前我写的35系列平台Tsensor驱动开发记录 海思35系列平台Tsensor驱动开发(1)驱动编写_t sensor-CSDN博客 海思35系列平台Tsensor驱动…...
JVM类加载机制—JVM类加载过程
一、概述 代码编译后,就会生成JVM(Java虚拟机)能够识别的二进制字节流文件(*.class)。而JVM把Class文件中的类描述数据从文件加载到内存,并对数据进行校验、转换解析、初始化,使这些数据最终成…...
可变参数模板与包装器
抱歉:铁汁们,最近在做兼职,积累社会经验,多有拖欠,请多多包涵(抱拳) 引子:接上回我们讲了C11的几种新增,今天就来接着讲C11中比较有用的二个东西可变参数模板与包装器。…...
工业控制常用“对象“数据类型汇总(数据结构篇)
合理巧妙的数据结构会大大简化项目的编程工作量,所以任何项目前期第一步应该是设计巧妙的数据结构、封装对象属性。这样会使我们的编程快捷和高效。这篇博客作为数据类型汇总,会不间断更新。 1、普通电机轴对象 2、普通电机轴对象(详细结构变量) TYPE "udtMotorAxis&q…...
优雅处理枚举前端丢失大Long精度问题
1. 枚举-json处理(前端 <> 后端 <> 数据库) 前端传递 枚举code 后端响应 枚举code 表里存储 枚举code 内存处理 枚举对象 Getter AllArgsConstructor JsonFormat(shape JsonFormat.Shape.OBJECT) public enum SexEnum {MALE(0, "男&…...
【c/c++】 学习ector 容器笔记
c/c 学习ector 容器笔记 int 型的 vector 容器应该使用什么类型的索引? 对于 int 型的 vector 容器,应该使用 size_t 类型的索引。size_t 是一个无符号整数类型,它在标准库中广泛用于表示大小和索引。它足够大,可以表示任何标准…...
DN专业3D图形制作软件win/mac软件安装下载(附下载链接)
目录 一、软件概述 1.1 Adobe DN简介 1.2 Windows/Mac系统要求 Windows系统: Mac系统: 二、安装步骤 2.1 下载与解压 2.2 安装程序 2.3 启动软件 三、使用教程 3.1 界面介绍 3.2 创建和编辑3D内容 3.3 合成与渲染 四、高级技巧与注意事项 …...
VSCode搭建Hzero(SpringCloud架构)后端开发调试环境
正常情况下我们使用IDEA开发Hzero,但是有的公司是不允许破解或者使用IDEA的,此时可以使用eclipse来替代也是可以的,最近尝试使用VSCode来开发调试发现了一些问题其中最大的问题是Vscdoe在绝大多数情况下是不能直接运行Hzero,使用插…...
【C++】OJ习题(初阶)
🚀个人主页:奋斗的小羊 🚀所属专栏:C 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 💥1、字符串💥1.1 字符串相加💥1.2 验证回文字符串💥1.3 反转…...
6.4K+ Star!一个强大的本地知识库问答系统,支持多格式文件和跨语言检索,为企业提供高效、安全的数据洞察……
https://github.com/netease-youdao/QAnything 【阅读原文】跳转Github项目 转自AIGC创想者 项目简介 QAnything 是一个基于本地知识库的问答系统,它能够理解和回答基于任何类型文件的问题。 QAnything支持的文件格式非常广泛,包括PDF、Word、PPT、XL…...
mvn编译的时候出现Perhaps you are running on a JRE rather than a JDK 解决方法
目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 mvn编译的时候出现如下问题: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile (default-compile) on project yudao...
React原理之Fiber详解
前置文章: React原理之 React 整体架构解读React原理之整体渲染流程 -----读懂这一篇需要对 React 整体架构和渲染流程有大致的概念 😊----- 在React原理之 React 整体架构解读中,简单介绍了 Fiber 架构,也了解了 Fiber 节点的…...
远离“优越感”陷阱,拥抱美好人生
在人生的漫长旅程中,我们不断地与他人相遇、相知、相交,在各种关系中寻找温暖、支持与成长。然而,并非所有的关系都如我们所愿,有些关系甚至可能成为我们前进道路上的阻碍。正如我们所知,唯利是图者不可交,但有一种关系比索要金钱更值得警惕,那就是找你索取满足感的关系…...
Redis的线程模型
Redis作为一种基于内存的高性能键值对数据库,其线程模型和IO模型是实现高性能的关键因素。以下将详细探讨Redis的线程与IO模型,内容不少于2000字。 一、Redis的线程模型 Redis的线程模型是理解其高性能的重要基础。在Redis的发展过程中,其线…...
ubuntu24.04安装nginx1.24
ubuntu安装nginx 更新包索引 sudo apt update安装nginx sudo apt install nginx确认安装成功并检查Nginx版本 nginx -v启动Nginx服务 sudo systemctl start nginx设置Nginx开机自启 sudo systemctl enable nginx在浏览器中访问 http://<your_server_IP> 来确认Nginx…...
一款好看的WordPress REST API 主题
介绍: 主题特色: 使用Nuxtjs WordPress Rest Api 实现前后端分离,可完成多端部署; 主题支持自动切换黑夜模式。 使用说明: service 目录为wordpress主题文件,需要拷贝到wordpress主题目录下࿰…...
《5G 与区块链融合:智能城市服务质量的飞跃》
在科技飞速发展的时代,5G 技术的普及正以前所未有的速度改变着我们的生活,而区块链技术的兴起也为各领域带来了创新的解决方案。当这两种前沿技术相互结合,将为智能城市的发展注入强大动力,显著提升服务质量,开创更加便…...
前后端分离开发:用 Apifox 高效管理 API
目录 1.前后台分离开发介绍 2.API 2.1 APIfox介绍 2.2 接口文档管理 1.前后台分离开发介绍 前端开发有2种方式:「前后台混合开发」和「前后台分离开发」。 前后台混合开发,顾名思义就是前台后台代码混在一起开发,如下图所示:…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用
阻止除自定义标签之外的所有标签 先输入一些标签测试,说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时(如通过点击或键盘导航&…...
Tauri2学习笔记
教程地址:https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引:https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多,我按照Tauri1的教程来学习&…...
工厂方法模式和抽象工厂方法模式的battle
1.案例直接上手 在这个案例里面,我们会实现这个普通的工厂方法,并且对比这个普通工厂方法和我们直接创建对象的差别在哪里,为什么需要一个工厂: 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类: 两个发…...
第22节 Node.js JXcore 打包
Node.js是一个开放源代码、跨平台的、用于服务器端和网络应用的运行环境。 JXcore是一个支持多线程的 Node.js 发行版本,基本不需要对你现有的代码做任何改动就可以直接线程安全地以多线程运行。 本文主要介绍JXcore的打包功能。 JXcore 安装 下载JXcore安装包&a…...
