manim边学边做--同伦变换

Manim库中,除了常规的元素移动方法,还可以通过同伦变换(Homotopy)来实现元素的移动。同伦变换不仅仅是简单的位置变化,而是在空间连续变形的过程中考虑元素的变化。这种移动方式避免了突变和中断,保证了整个移动过程的连续性和流畅性。

同伦变换将元素的移动视为空间整体结构的一部分,通过连续变形实现元素的“移动”。在Manim中,实现同伦移动的动画类主要包括:

  1. ComplexHomotopy:用于展示复函数之间的同伦变换。
  2. Homotopy:更通用的同伦动画效果类,适用于任意两个对象之间的同伦变换。
  3. SmoothedVectorizedHomotopy:对向量场进行平滑的同伦变换。

1. 动画概述

1.1. ComplexHomotopy

ComplexHomotopy通常需要接收两个复函数作为参数,通过在复平面上对这两个函数进行采样,得到一系列的复数点。在动画过程中,按照一定的插值方法,逐步将第一个函数对应的点变换到第二个函数对应的点。其参数主要包括:

参数名称 类型 说明
complex_homotopy func 定义了复平面上的同伦变换规则的函数
mobject Mobject 要应用同伦变换的数学对象

complex_homotopy参数是一个函数,它接受一个复数作为参数,并返回一个浮点数。

1.2. Homotopy

Homotopy需要定义起始对象和目标对象,以及一个描述同伦过程的函数。在动画运行时,根据时间参数,通过同伦函数计算出每个时刻对象的中间状态。这个中间状态的计算可能涉及到对象的几何属性(如点的坐标、图形的形状参数等)的插值和变换。其参数主要包括:

参数名称 类型 说明
homotopy func 定义了对象在动画过程中的变形规则的函数
mobject Mobject 要应用同伦变换的数学对象
apply_function_kwargs dict 在应用同伦变换函数时提供额外的控制或配置信息

homotopy参数是一个参数,它接受四个数$ (x,y,z,t) $作为参数,分别表示对象在三维空间中的坐标$ (x,y,z) $以及动画时间参数$ t $(的取值范围从 0 到 1),并返回一个包含三个数的元组$ (x',y',z') $,表示在时间$ t $时,原始坐标对应的点经过同伦变换后的新坐标。

1.3. SmoothedVectorizedHomotopy

SmoothedVectorizedHomotopy首先需要获取起始向量场和目标向量场的信息,例如向量的大小和方向。在动画过程中,通过一种平滑的插值算法来计算中间时刻向量场的向量值,这种算法可能会考虑向量场的梯度、散度等属性,以确保向量的变化是连续且符合物理规律的。在每一帧动画中,根据计算得到的向量值绘制出相应的向量场,展示出向量场的平滑同伦变换。其参数主要包括:

参数名称 类型 说明
homotopy func 定义了对象在动画过程中的变形规则的函数
mobject Mobject 要应用同伦变换的数学对象
apply_function_kwargs dict 在应用同伦变换函数时提供额外的控制或配置信息

SmoothedVectorizedHomotopy参数和Homotopy参数的含义是一样的。SmoothedVectorizedHomotopy侧重于向量场的平滑同伦变换,虽然参数类似但主要针对向量场,确保其变换过程平滑,在涉及向量场的场景(如物理场模拟)中发挥独特作用。

2. 使用示例

这几个同伦变换的类使用起来没有那么直观,下面通过几个示例来演示如何使用这些类。

2.1. 复函数同伦变换展示

这个示例利用ComplexHomotopy展示了复函数$ f(z)=e^z $到$ g(z)=sin(z) $的同伦变换过程。通过在复平面上创建一系列的点来模拟这个变换的过程。

```python

创建复平面

plane = ComplexPlane(
x_range=[-8, 8],
y_range=[-8, 8],
x_length=6,
y_length=6,
)
self.add(plane)

定义两个复

版权声明:程序员胖胖胖虎阿 发表于 2024年12月27日 下午4:39。
转载请注明:manim边学边做--同伦变换 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...