manim边学边做--向量相关的场景类
VectorScene是Manim動畫庫中專門用于向量空間可視化的場景類,繼承自基礎(chǔ) Scene 類。
它通過封裝一系列向量操作方法,使數(shù)學(xué)教育、物理模擬等領(lǐng)域的動畫制作更加高效。
本文主要介紹VectorScene的作用、主要參數(shù)和方法,并通過示例動畫來展示其特點。
1. VectorScene概要
VectorScene的核心功能包括:
- 自動管理坐標系與網(wǎng)格系統(tǒng)
- 支持向量的創(chuàng)建、標注與動態(tài)操作
- 提供向量空間變換的可視化工具
- 內(nèi)置多種動畫過渡效果
在教學(xué)中,VectorScene可以幫助學(xué)生更好地理解向量的概念和性質(zhì),例如向量的坐標表示、基向量的作用以及向量的線性組合等。
通過動畫的形式,我們可以更直觀地看到向量的變化過程,從而加深對數(shù)學(xué)概念的理解。
在科研和工程領(lǐng)域,VectorScene也可以用于展示向量場、力的分析等,幫助研究人員和工程師更清晰地表達和理解復(fù)雜的向量關(guān)系。
1.1. 主要參數(shù)
VectorScene繼承自Scene,父類的參數(shù)它也都可以使用,VectorScene特有的參數(shù)不多:
| 參數(shù)名稱 | 類型 | 說明 | 
|---|---|---|
| basis_vector_stroke_width | int | 基向量的筆觸寬度。也就是基向量箭頭的粗細程度 | 
1.2. 主要方法
VectorScene的方法大多與向量操作有關(guān),主要包括:
| 名稱 | 說明 | 
|---|---|
| add_axes | 添加一對坐標軸到場景中。通過設(shè)置 animate=True,可以以動畫的形式展示坐標軸的生成過程,增強視覺效果。 | 
| add_plane | 在背景中添加一個 NumberPlane對象。這個方法可以創(chuàng)建一個二維平面,用于展示向量的位置和方向。 | 
| add_vector | 將一個向量添加到平面上,并返回該向量的箭頭對象。通過設(shè)置 animate=True,可以以動畫的形式展示向量的生成過程。 | 
| coords_to_vector | 將向量表示為列矩陣,并展示向量的 x 和 y 分量對應(yīng)的線段。 | 
| get_basis_vectors | 返回一個包含基向量 (1,0)和(0,1)的VGroup對象。通過設(shè)置不同的顏色,可以區(qū)分不同的基向量。 | 
| get_vector_label | 為給定的向量生成標簽。這個方法可以方便地為向量添加描述性文本,增強動畫的可讀性。 | 
| label_vector | 為向量添加標簽,并可以選擇是否以動畫的形式展示。 | 
| lock_in_faded_grid | 凍結(jié)背景中的 NumberPlane 和坐標軸,并在前景中添加新的可操作的平面和坐標軸。這個方法可以用于在動畫中切換不同的平面和坐標軸,增強視覺效果。 | 
| show_ghost_movement | 播放一個動畫,部分展示整個平面沿著特定向量方向移動的效果。這個方法可以用于展示向量的方向和作用,而不會實際移動平面。 | 
| vector_to_coords | 將向量表示為基于 Vector的向量,并展示向量的x和y分量對應(yīng)的線段,然后在向量頭部附近創(chuàng)建一個列矩陣標簽。 | 
| 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 參數(shù)無效
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. 附件
文中的代碼只是關(guān)鍵部分的截取,完整的代碼共享在網(wǎng)盤中(vector.py),
下載地址: 完整代碼 (訪問密碼: 6872)
總結(jié)
以上是生活随笔為你收集整理的manim边学边做--向量相关的场景类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: EHPC通过断点续算和自动伸缩在抢占式实
- 下一篇: PowerShell开发游戏 ·
