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 类的一个方法,用于将给定的矩阵应用于场景中的对象(如几何形状、文本或矢量等)。这个方法是进行动画制作时实现线性变换的重要工具,能够直观地演示线性代数中的矩阵变换如何影响图形。

方法参数

  1. matrix: 这是一个二维列表或者 NumPy 数组,代表一个线性变换矩阵。该矩阵的维度应当与操作的对象的维度相匹配。例如,对于二维对象(如平面内的图形),你需要提供一个 2x2 的矩阵。矩阵中的元素决定了对象的缩放、旋转、平移等变换效果。

  2. kwargs: 这个参数允许传递其他关键字参数,通常用于设置动画的相关属性,例如持续时间(run_time)、动画的延迟(lag_ratio),以及是否在动画结束后保留变换结果的标志(path_arc)等。通过这些可选参数,可以更加灵活地控制动画的表现和视觉效果。

方法功能

apply_matrix() 的主要功能是将指定的矩阵应用于场景中的对象,具体流程如下:

  1. 计算变换: 根据传入的矩阵,计算出对象在变换后的位置和形状。这一过程涉及到矩阵乘法,将对象的每个顶点坐标与矩阵相乘,从而得到新的坐标。

  2. 更新对象: 将计算后的新坐标应用到对象上。对于大多数对象而言,这意味着它们的顶点、边界和外观会根据新的坐标重新绘制。

  3. 动画表现: 可以通过提供的 kwargs 设置动画属性,例如变换的时间和延迟,使变换更加动态和平滑。这样可以增强观众的视觉体验,使线性变换不仅仅是数学计算,而是通过动画直观呈现。

小结

总的来说,apply_matrix(matrix, **kwargs) 方法在 Manim 中是实现线性变换的核心工具,通过对矩阵的灵活运用,用户可以创建丰富多彩的数学可视化效果,将抽象的数学概念变得生动有趣。无论是学术研究、教学演示还是创意动画,这个方法都提供了强大的支持。

 

2.apply_transposed_matrix(transposed_matrix, **kwargs)方法

apply_transposed_matrix(transposed_matrix, **kwargs) 是 Manim 中 LinearTransformationScene 类的一个方法,用于将给定的转置矩阵应用于场景中的对象。这一方法在进行线性变换演示时非常重要,特别是在涉及到坐标变换、数据变换以及几何变换时。

方法参数

  1. transposed_matrix: 这是一个二维列表或 NumPy 数组,表示需要应用的转置矩阵。转置矩阵是通过交换矩阵的行和列得到的,彼此之间的元素位置被互换。对于二维覆盖面的操作,转置矩阵通常是一个 2x2 的矩阵。由于线性变换本质上是通过矩阵运算来实现的,在需要展示对象如何在新的坐标系中变换时,转置矩阵尤其有用。

  2. kwargs: 该参数允许您传递其他关键字参数,通常用于控制动画的外观和行为。这包括动画的持续时间(如 run_time)、延迟(如 lag_ratio)、路径弧度(path_arc)等可选设置。通过这些参数,用户能够更好地控制动画效果,以确保变换的动态表现既美观又符合预期。

方法功能

apply_transposed_matrix() 的主要功能在于将转置矩阵应用于场景中的对象,与 apply_matrix() 类似,但它使用的是变换的转置矩阵。这一过程如下:

  1. 计算变换: 依据传入的转置矩阵,计算出对象在变换后的位置。通过与转置矩阵进行矩阵乘法,可以获取对象新位置的坐标。这对于理解数据或几何体在新维度上的表现尤为重要。

  2. 更新对象: 接下来,将计算得出的新坐标应用于对象上。这一步通常涉及到重新定义对象的顶点,因此对象的形状和位置会发生变化。

  3. 动画表现: 使用提供的 kwargs,可以设置动画的持续时间和视觉效果。例如,您可以调整动画的速度,使其在视觉上更加流畅,或者增加延迟以强调变换过程。

小结

总的来说,apply_transposed_matrix(transposed_matrix, **kwargs) 方法为用户提供了一种简便的方式,将转置矩阵应用于 Manim 中的对象,展示线性变换的影响。这种能力提高了数学可视化的表达力,使得抽象的数学概念能够通过动态展示变得更加直观,适用于数学教育、数据科学展示和各种创意动画制作。通过使用该方法,用户可以方便地探索和表达各种数学特性与变换关系。

  • 14
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yasen.M

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值