manim边学边做--向量相关的场景类

news/2025/3/11 1:09:55/文章来源:https://www.cnblogs.com/wang_yb/p/18759476

VectorSceneManim动画库中专门用于向量空间可视化的场景类,继承自基础 Scene 类。

它通过封装一系列向量操作方法,使数学教育、物理模拟等领域的动画制作更加高效。

本文主要介绍VectorScene的作用、主要参数和方法,并通过示例动画来展示其特点。

1. VectorScene概要

VectorScene的核心功能包括:

  • 自动管理坐标系与网格系统
  • 支持向量的创建、标注与动态操作
  • 提供向量空间变换的可视化工具
  • 内置多种动画过渡效果

在教学中,VectorScene可以帮助学生更好地理解向量的概念和性质,例如向量的坐标表示、基向量的作用以及向量的线性组合等。

通过动画的形式,我们可以更直观地看到向量的变化过程,从而加深对数学概念的理解。

在科研和工程领域,VectorScene也可以用于展示向量场、力的分析等,帮助研究人员和工程师更清晰地表达和理解复杂的向量关系。

1.1. 主要参数

VectorScene继承自Scene,父类的参数它也都可以使用,VectorScene特有的参数不多:

参数名称 类型 说明
basis_vector_stroke_width int 基向量的笔触宽度。也就是基向量箭头的粗细程度

1.2. 主要方法

VectorScene的方法大多与向量操作有关,主要包括:

名称 说明
add_axes 添加一对坐标轴到场景中。通过设置animate=True,可以以动画的形式展示坐标轴的生成过程,增强视觉效果。
add_plane 在背景中添加一个NumberPlane对象。这个方法可以创建一个二维平面,用于展示向量的位置和方向。
add_vector 将一个向量添加到平面上,并返回该向量的箭头对象。通过设置 animate=True,可以以动画的形式展示向量的生成过程。
coords_to_vector 将向量表示为列矩阵,并展示向量的 x 和 y 分量对应的线段。
get_basis_vectors 返回一个包含基向量(1,0)(0,1)VGroup对象。通过设置不同的颜色,可以区分不同的基向量。
get_vector_label 为给定的向量生成标签。这个方法可以方便地为向量添加描述性文本,增强动画的可读性。
label_vector 为向量添加标签,并可以选择是否以动画的形式展示。
lock_in_faded_grid 冻结背景中的 NumberPlane 和坐标轴,并在前景中添加新的可操作的平面和坐标轴。这个方法可以用于在动画中切换不同的平面和坐标轴,增强视觉效果。
show_ghost_movement 播放一个动画,部分展示整个平面沿着特定向量方向移动的效果。这个方法可以用于展示向量的方向和作用,而不会实际移动平面。
vector_to_coords 将向量表示为基于Vector的向量,并展示向量的xy分量对应的线段,然后在向量头部附近创建一个列矩阵标签。
write_vector_coordinates 将向量的坐标写为列矩阵,并返回该列矩阵对象。

2. 使用示例

以下的示例展示VectorScene的特点。

2.1. 向量的加法

这个示例展示了如何使用VectorScene来展示向量的加法。

通过添加两个向量并计算它们的和,可以直观地展示向量加法的几何意义。

self.add_plane(animate=True,x_range=[-6, 6],y_range=[-6, 6],x_length=5,y_length=5,
)  # 添加平面
# TODO: add_axes 方法的 **kwargs 参数无效
self.add_axes(animate=True)  # 添加坐标轴# 定义两个向量
vector1 = self.add_vector([-2, 1], color=BLUE, animate=True)
vector2 = self.add_vector([1, 1], color=RED, animate=True)# 计算向量和
sum_vector = vector1.get_end() + vector2.get_end()
sum_vector = self.add_vector(sum_vector, color=GREEN, animate=True)# 添加标签
self.label_vector(vector1, "v1", animate=True)
self.label_vector(vector2, "v2", animate=True)
self.label_vector(sum_vector, "v1 + v2", animate=True)

2.2. 向量的标量乘法

这个示例展示了如何使用VectorScene来展示基向量的变换。

通过改变基向量的方向和大小,可以直观地展示基向量在向量空间中的作用。

self.add_plane(animate=True,x_range=[-6, 6],y_range=[-6, 6],x_length=5,y_length=5,
)  # 添加平面# 定义一个向量
v = np.array([1, 0.5])
vector = self.add_vector(v, color=BLUE, animate=True)
self.label_vector(vector, "v", animate=True)# 标量乘法
scaled_vector = self.add_vector(v * 2, color=RED, animate=True)
self.label_vector(scaled_vector,MathTex(r"\overrightarrow{2V}", color=RED, font_size=30),animate=True,
)

2.3. 向量的投影

这个示例展示了如何使用VectorScene来展示向量的投影。

通过计算一个向量在另一个向量上的投影,可以直观地展示向量投影的几何意义。

self.add_plane(animate=True,x_range=[-6, 6],y_range=[-6, 6],x_length=5,y_length=5,
)  # 添加平面# 定义两个向量
vector1 = self.add_vector([2.5, 1.5], color=BLUE, animate=True)
vector2 = self.add_vector([0.5, 0.5], color=RED, animate=True)
self.label_vector(vector1, "v1", animate=True)
self.label_vector(vector2, "v2", animate=True)# 计算向量1在向量2上的投影
projection = vector2.get_projection(vector1.get_end())
projected_vector = Arrow(start=ORIGIN, end=projection, color=GREEN)self.add_vector(projected_vector, animate=True)
self.label_vector(projected_vector, "proj_{v2}(v1)", animate=True)

3. 附件

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/895543.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 42~44 1.1~1.8

第一章1.1 str1 = input("请输入一个人的名字:") str2 = input("请输入一个国家的名字:") print("世界这么大,{}想去{}看看.".format(str1,str2))第一章1.2 n = input("请输入整数N:") sum = 0 for i in range(int(n)): sum += i +…

MySQL训练营-DDL性能问题

DDL类型 copy/inplace/instant 复制、原地、即时 copy复制算法 原理 Copy 算法在执行 DDL 操作时,会创建一个新的临时表,该临时表具有修改后的表结构。然后将原表中的数据逐行复制到新的临时表中。复制完成后,删除原表,并将临时表重命名为原表的名称。 优点 兼容性好:几乎…

Manus邀请码,Manus:科技圈新“炸点”,还是又一场狂欢?

2025年3月6日,AI圈被一款名为Manus的产品“炸醒”。这款由Monica团队开发的AI Agent,在短短4分钟的视频中展示出强大的功能,如旅行规划、股票分析、教育内容创建等,仿佛预示着一个新时代的到来。 嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和…

C# DataTable Merge() 合并DataTable

如果两个表具有不同的结构,则会在原有结构上保留新的架构:dt.Merge(dt2); 使用Add方法时,新表(dt2)的列数不能大于原表(dt)的列数,否则运行时会报错。(可以少于原表列数)dt.Rows.Add(dt2.Rows[0].ItemArray)

VS大型CPP项目调试,Debug模式,Release模式,附加到进程模式

windows下vs调试大型cpp项目,exe,dll,lib,debug模式调试,release模式调试,附加到进程调试,一文搞定visual studio 项目一览 以开源项目 cloudcompare 为例,一个大型项目 肯定会有很多模块,每个模块 根据需求 生成 dll 库 或者 lib 库主程序dll 库lib库debug 模式调试 …

ARC191 ~ 193 题解

ARC191 题解 A - Replace Digits简要题意给定一个长为 \(n\) 的字符串 \(a\)。\(m\) 次操作,第 \(k\) 次给定一个字符 \(b_k\),你需要选择一个 \(i \in [1, n]\) 并将 \(a_i\) 替换成 \(b_k\)。 求最后能得到的所有字符串中,字典序最大的是什么。 \(1 \leq n, m \leq 10^6\)…

物理机安装archLinux

从官网下载镜像并通过up启动成功联网后 一、基础配置 1.设置时间 查看时间 timedatectl status 如果时间不对 timedatectl set-ntp true 如果时区不对 timedatectl set-timezone Asia/Shanghai2.磁盘分区 对于 UEFI 需要至少创建三个分区(efi、swap、根)格式化分区 根分区mk…

Maven踩坑记录与反思

本次事件的发生是在我来到一个新的技术初创团队,由于团队中的前同事与我交接代码时候,关于Maven私服这块的账号密码为给我,导致一系列的爱恨情仇。事件的持续花费两天时间进行解决,现在总结一下遇到的问题与解决思路!回顾Mavenue的背景 关于Maven,维基百科给的解释主要有…

解决pyechart模块绘制地图无数据

在绘制地图发现没有数据错误原因: 传入数据中的省份名称不规范 例如: data = [("北京", 99),("上海", 199),("湖南", 299),("台湾", 399),("广东", 499) ]解决办法: 使用此函数,把传入地图的数据传入函数进行处理(返回规…

2025.3.8 考试记录

省流:炸完了!!! 7:35 开考,7:37开始看题。 先看一眼题,没有 DS ,那完了。 按照惯例先试着冲一下 T1 。 有点像二分图最大匹配的题,记不住怎么建图了,睡觉。 T2 是个树上最优解问题,似乎可以冲?先放在一边等着吧。 T3 是序列上的一个问题,序列上的找一个区间 min …

Ubuntu24.04安装Cherry Studio记录

1. 官网下载安装包 在Cherry Studio官网获取Appimage安装包 2. 修改运行权限 下载结束后终端输入chmod 777 AppImage文件路径修改Appimage文件权限为可执行文件。 3. 下载FUSE 直接运行./Cherry-Studio-1.0.6-x86_64.AppImage,发现类似报错:Need to install FUSE 打开FUSE的G…

两块滤膜

“部长通道”上,生态环境部部长掏出了两块滤膜 央视一套2025年03月08日 14:53 北京 ⇧点蓝色字关注“央视一套” 今天(8日),第十四届全国人民代表大会第三次会议第二场“部长通道”集中采访活动举行。生态环境部部长黄润秋、水利部部长李国英、农业农村部部长韩俊接受了媒体…