manim边学边做--同伦变换

打印 上一主题 下一主题

主题 830|帖子 830|积分 2490

在Manim中,移动一个元素除了之前介绍的方法之外,还可以通过同伦运算来移动一个元素。
与平常的移动元素方式相比,使用同伦运算移动一个元素时,实际上是在考虑整个空间的连续变形过程中元素的相应变革。
这种移动不是孤立地看待元素的位置改变,而是将元素置于空间的整体结构中,通过连续变形的方式实现元素的 “移动”。
简朴来说,元素的同伦移动是通过连续变形实现的,不存在突然的跳跃或停止。
在同伦运算中,元素的每一个中间状态都与前后状态连续过渡,保持了整个移动过程的连贯性。
Manim中关于同伦移动的动画类主要有:

  • ComplexHomotopy:用于展示复函数之间的同伦变换
  • Homotopy:更通用的同伦动画效果类,它可以用于展示任意两个对象之间的同伦变换,不但仅局限于复函数
  • SmoothedVectorizedHomotopy:对向量场进行平滑的同伦变换
1. 动画概述

1.1. ComplexHomotopy

ComplexHomotopy通常需要接收两个复函数作为参数,通过在复平面上对这两个函数进行采样,得到一系列的复数点。
然后,在动画过程中,按照肯定的插值方法,逐步将第一个函数对应的点变换到第二个函数对应的点。
它的参数主要有:
参数名称范例说明complex_homotopyfunc定义了复平面上的同伦变换规则的函数mobjectMobject要应用同伦变换的数学对象complex_homotopy参数是一个函数,它担当一个复数作为参数,并返回一个浮点数。
1.2. Homotopy

Homotopy需要定义起始对象和目的对象,以及一个描述同伦过程的函数。
在动画运行时,根据时间参数,通过同伦函数计算出每个时刻对象的中间状态,
这个中间状态的计算大概涉及到对象的多少属性(如点的坐标、图形的外形参数等)的插值和变换。
它的参数主要有:
参数名称范例说明homotopyfunc定义了对象在动画过程中的变形规则的函数mobjectMobject要应用同伦变换的数学对象apply_function_kwargsdict在应用同伦变换函数时提供额外的控制或配置信息homotopy参数是一个参数,它担当四个数$ (x,y,z,t) \(作为参数,分别体现对象在三维空间中的坐标\) (x,y,z) \(以及动画时间参数\) t $(的取值范围从 0 到 1),
并返回一个包含三个数的元组$ (x',y',z') \(,体现在时间\) t $时,原始坐标对应的点经过同伦变换后的新坐标。
1.3. SmoothedVectorizedHomotopy

SmoothedVectorizedHomotopy起首需要获取起始向量场和目的向量场的信息,例如向量的大小和方向。
在动画过程中,通过一种平滑的插值算法来计算中间时刻向量场的向量值,这种算法大概会考虑向量场的梯度、散度等属性,以确保向量的变革是连续且符合物理规律的。
在每一帧动画中,根据计算得到的向量值绘制出相应的向量场,展示出向量场的平滑同伦变换。
它的参数主要有:
参数名称范例说明homotopyfunc定义了对象在动画过程中的变形规则的函数mobjectMobject要应用同伦变换的数学对象apply_function_kwargsdict在应用同伦变换函数时提供额外的控制或配置信息SmoothedVectorizedHomotopy参数和Homotopy参数的含义是一样的。
SmoothedVectorizedHomotopy侧重于向量场的平滑同伦变换,虽然参数类似但主要针对向量场,确保其变换过程平滑,在涉及向量场的场景(如物理场模拟)中发挥独特作用。
2. 使用示例

这几个同伦变换的类使用起来没有那么直观,下面通过几个示例来演示怎样使用这些类。
2.1. 复函数同伦变换展示

这个示例使用ComplexHomotopy展示了复函数$ f(z)=e^z \(到\) g(z)=sin(z) $的同伦变换过程。
通过在复平面上创建一系列的点来模拟这个变换的过程。
  1. # 创建复平面
  2. plane = ComplexPlane(
  3.     x_range=[-8, 8],
  4.     y_range=[-8, 8],
  5.     x_length=6,
  6.     y_length=6,
  7. )
  8. self.add(plane)
  9. # 定义两个复函数
  10. def f(z):
  11.     return np.exp(z)
  12. def g(z):
  13.     return np.sin(z)
  14. # ComplexHomotopy动画
  15. homotopy = lambda z, t: (1 - t) * f(z) + t * g(z)
  16. # 要应用动画的点集
  17. points = [
  18.     complex(x, y) for x in np.arange(-3, 3, 0.5) for y in np.arange(-3, 3, 0.5)
  19. ]
  20. mobject = VGroup(*[Dot(plane.n2p(p)) for p in points])
  21. self.add(mobject)
  22. self.play(
  23.     ComplexHomotopy(homotopy, mobject),
  24.     run_time=3,
  25. )
复制代码

2.2. 圆形的同伦收缩演示

借助Homotopy实现圆形在三维空间沿轴逐渐收缩为点的动画,
展示拓扑学中同伦变换下多少图形的连续变革,辅助理解拓扑性质。
  1. # 创建一个圆形
  2. circle = Circle(radius=2)
  3. self.add(circle)
  4. # 定义同伦函数
  5. def homotopy(x, y, z, t):
  6.     return (x * (1 - t), y * (1 - t), z)
  7. # 创建Homotopy动画
  8. self.play(
  9.     Homotopy(homotopy, circle),
  10.     run_time=3,
  11. )
复制代码

2.3. 向量场强度均匀削弱模拟

通过SmoothedVectorizedHomotopy呈现二维向量场强度随时间均匀削弱,
在物理学电场或磁场讲授中,能有效资助学生理解向量场动态变革。
  1. # 创建一个向量场
  2. vector_field = ArrowVectorField(
  3.     lambda pos: (pos[0], pos[1], 0)
  4. )
  5. self.add(vector_field)
  6. # 定义同伦函数
  7. def homotopy(x, y, z, t):
  8.     return ((1 - t) * x, (1 - t) * y, 0)
  9. # SmoothedVectorizedHomotopy动画
  10. self.play(
  11.     SmoothedVectorizedHomotopy(homotopy, vector_field),
  12.     run_time=3,
  13. )
复制代码

3. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(homotopy.py),
下载地点: 完整代码 (访问密码: 6872)
4. 补充说明:什么是同伦运算

同伦运算是代数拓扑学中的概念,本质上是在同伦范畴中对映射或空间的操作。
从直观上来说,如果两个连续映射 可以通过连续变形从一个变成另一个,那么这两个映射是同伦的,而对这些同伦的映射进行的各种操作和研究就是同伦运算的范畴。
具体的数学定义这里不赘述,举几个实际生活中可以当做同伦变换的例子来资助大家理解一下:

  • 揉面团:把一块面团从初始的球形揉成各种外形,比如椭圆形、扁平状,甚至可以在面团上捏出一些起伏但不切断面团。这个过程中,面团的外形发生了连续变革,但它始终是一个整体,没有被撕裂或粘连,不同外形之间存在同伦关系。
  • 吹气球:从气球未吹气时的扁平状态,到逐渐吹起变成球形的过程,气球的表面在连续地扩张变形。只要气球没有破裂,这个过程就是一个连续的变换。
  • 绳结的变换:在不剪断绳子和不使绳子打结部分相互穿越的前提下,绳结可以从一种外形连续地变换为另一种外形。
  • 衣服的变形:一件衣服在被人穿着的过程中,随着人的动作,衣服会发生各种变形。比如从平整的挂在衣架上的状态,到穿在人身上随着身体的弯曲、伸展而改变外形。
  • 等等... ...
留意,上面的示例可以资助理解同伦变换,但并不是完全严谨的同伦变换
比如,面团弄断了,衣服撕裂了等等情况就不是同伦变换,但却是实际生活中经常发生的事。

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

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

曹旭辉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表