一,主函数
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 中的对象,展示线性变换的影响。这种能力提高了数学可视化的表达力,使得抽象的数学概念能够通过动态展示变得更加直观,适用于数学教育、数据科学展示和各种创意动画制作。通过使用该方法,用户可以方便地探索和表达各种数学特性与变换关系。