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

打印 上一主题 下一主题

主题 1001|帖子 1001|积分 3003

VectorScene是Manim动画库中专门用于向量空间可视化的场景类,继承自基础 Scene 类。
它通过封装一系列向量操作方法,使数学教诲、物理模拟等领域的动画制作更加高效。
本文重要介绍VectorScene的作用、重要参数和方法,并通过示例动画来展示其特点。
1. VectorScene概要

VectorScene的焦点功能包括:

  • 自动管理坐标系与网格系统
  • 支持向量的创建、标注与动态操作
  • 提供向量空间变换的可视化工具
  • 内置多种动画过渡效果
在讲授中,VectorScene可以帮助学生更好地明白向量的概念和性质,比方向量的坐标表示、基向量的作用以及向量的线性组合等。
通过动画的形式,我们可以更直观地看到向量的厘革过程,从而加深对数学概念的明白。
在科研和工程领域,VectorScene也可以用于展示向量场、力的分析等,帮助研究职员和工程师更清晰地表达和明白复杂的向量关系。
1.1. 重要参数

VectorScene继承自Scene,父类的参数它也都可以使用,VectorScene特有的参数不多:
参数名称类型说明basis_vector_stroke_widthint基向量的笔触宽度。也就是基向量箭头的粗细程度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的向量,并展示向量的x和y分量对应的线段,然后在向量头部附近创建一个列矩阵标签。write_vector_coordinates将向量的坐标写为列矩阵,并返回该列矩阵对象。2. 使用示例

以下的示例展示VectorScene的特点。
2.1. 向量的加法

这个示例展示了如何使用VectorScene来展示向量的加法。
通过添加两个向量并计算它们的和,可以直观地展示向量加法的几何意义。
  1. self.add_plane(
  2.     animate=True,
  3.     x_range=[-6, 6],
  4.     y_range=[-6, 6],
  5.     x_length=5,
  6.     y_length=5,
  7. )  # 添加平面
  8. # TODO: add_axes 方法的 **kwargs 参数无效
  9. self.add_axes(animate=True)  # 添加坐标轴
  10. # 定义两个向量
  11. vector1 = self.add_vector([-2, 1], color=BLUE, animate=True)
  12. vector2 = self.add_vector([1, 1], color=RED, animate=True)
  13. # 计算向量和
  14. sum_vector = vector1.get_end() + vector2.get_end()
  15. sum_vector = self.add_vector(sum_vector, color=GREEN, animate=True)
  16. # 添加标签
  17. self.label_vector(vector1, "v1", animate=True)
  18. self.label_vector(vector2, "v2", animate=True)
  19. self.label_vector(sum_vector, "v1 + v2", animate=True)
复制代码

2.2. 向量的标量乘法

这个示例展示了如何使用VectorScene来展示基向量的变换。
通过改变基向量的方向和大小,可以直观地展示基向量在向量空间中的作用。
  1. self.add_plane(
  2.     animate=True,
  3.     x_range=[-6, 6],
  4.     y_range=[-6, 6],
  5.     x_length=5,
  6.     y_length=5,
  7. )  # 添加平面
  8. # 定义一个向量
  9. v = np.array([1, 0.5])
  10. vector = self.add_vector(v, color=BLUE, animate=True)
  11. self.label_vector(vector, "v", animate=True)
  12. # 标量乘法
  13. scaled_vector = self.add_vector(v * 2, color=RED, animate=True)
  14. self.label_vector(
  15.     scaled_vector,
  16.     MathTex(r"\overrightarrow{2V}", color=RED, font_size=30),
  17.     animate=True,
  18. )
复制代码

2.3. 向量的投影

这个示例展示了如何使用VectorScene来展示向量的投影。
通过计算一个向量在另一个向量上的投影,可以直观地展示向量投影的几何意义。
  1. self.add_plane(
  2.     animate=True,
  3.     x_range=[-6, 6],
  4.     y_range=[-6, 6],
  5.     x_length=5,
  6.     y_length=5,
  7. )  # 添加平面
  8. # 定义两个向量
  9. vector1 = self.add_vector([2.5, 1.5], color=BLUE, animate=True)
  10. vector2 = self.add_vector([0.5, 0.5], color=RED, animate=True)
  11. self.label_vector(vector1, "v1", animate=True)
  12. self.label_vector(vector2, "v2", animate=True)
  13. # 计算向量1在向量2上的投影
  14. projection = vector2.get_projection(vector1.get_end())
  15. projected_vector = Arrow(start=ORIGIN, end=projection, color=GREEN)
  16. self.add_vector(projected_vector, animate=True)
  17. self.label_vector(projected_vector, "proj_{v2}(v1)", animate=True)
复制代码

3. 附件

文中的代码只是关键部分的截取,完备的代码共享在网盘中(vector.py),
下载地址: 完备代码 (访问密码: 6872)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表