Python创建数学动画

您是否曾经尝试过使用机器学习算法的数学概念并将3Blue1Brown用作学习资源? 由于格兰特(Grant)出色的解释和出色的动画效果,许多人喜欢3Blue1Brown。

如果您可以了解他是如何创建这些动画的,那么您可以创建类似的动画来向队友,经理或追随者解释一些数据科学概念,这不是很酷吗?

幸运的是,Grant整理了一个名为manim的Python程序包,使您可以使用Python创建数学动画或图片。 在本文中,您将学习如何使用manim如下创建数学动画。

什么是Manim?

Manim是用于制作精确动画的引擎,旨在创建说明性的数学视频。 请注意,有2种版本的manim。 一种是由Grant创建的,另一种是由Manim社区创建和维护的。

要安装软件包的依赖项,请访问文档。 安装依赖项后,键入:

pip install manim

开始创建

创建一个从中心开始生长的蓝色方块。

我们将创建一个从中心开始生长的蓝色正方形。 用于创建动画的代码位于从Scene派生的类的Construct方法中。

将上面的脚本另存为start.py。 现在,运行以下命令为脚本生成视频。

要创建GIF而不是视频,请在命令中添加-i,如下所示:

将正方形变成圆形

单独创建一个正方形并不是那么有趣。 让我们将这个正方形变成一个圆圈。

创建上面动画的代码:

在此处找到形状的完整列表。

自定义Manim

如果您不希望背景为黑色,则可以将其变为灰色,如下所示:

通过使用config.background_color。

from manim import * 

config.background_color = DARK_GRAY

在这里找到其他自定义manim的方法。

Manim还能做什么?

用移动框架编写数学方程

您还可以创建一个动画,该动画编写带有移动框架的数学方程式,如下所示:

或逐步编写方程式的求解方法:

移动和缩放相机

您还可以使用从MovingCameraScene对象继承的类来调整摄像机并选择要放大的方程式的哪一部分。

图形

一起移动对象

追踪路径

本文代码

附录A:数学和物理概念动态解释示例(代码)

附录B:Manim视频教程(代码)

详情参阅 - 亚图跨际

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 答:这里有一个使用 Python Mayavi 制作的流场动画案例,可以参考:https://scipy-cookbook.readthedocs.io/items/StreamplotAnimation.html ### 回答2: 下面是一个使用PythonMayavi库来绘制并展示流场动画的案例: ```python import numpy as np from mayavi import mlab # 创建一个表示流场的网格数据 x, y, z = np.mgrid[-2:3, -2:3, -2:3] u = y - x v = -x*z w = x*y magnitude = np.sqrt(u**2 + v**2 + w**2) # 创建一个Mayavi的场景 mlab.figure(bgcolor=(1, 1, 1), size=(600, 600)) # 绘制流线 mlab.quiver3d(x, y, z, u, v, w, line_width=3, scalars=magnitude) mlab.pipeline.volume(mlab.pipeline.scalar_field(magnitude)) # 添加标题和坐标轴标签 mlab.title("流场动画") mlab.xlabel("X轴") mlab.ylabel("Y轴") mlab.zlabel("Z轴") # 创建一个时间序列 t = np.linspace(0, 10, 100) # 更新场景并生成动画 @mlab.animate(delay=100) def anim(): for i in t: # 更新流场数据 u_new = y - x*np.sin(i) v_new = -x*z*np.cos(i) w_new = x*y*np.sin(i) magnitude_new = np.sqrt(u_new**2 + v_new**2 + w_new**2) # 更新流线和体积渲染 mlab.quiver3d(x, y, z, u_new, v_new, w_new, line_width=3, scalars=magnitude_new) mlab.pipeline.volume(mlab.pipeline.scalar_field(magnitude_new)) mlab.view(azimuth=360*t/10) # 旋转视角 yield anim() mlab.show() ``` 这个案例使用Mayavi库创建了一个流场的动画,流场的数据通过数学函数计算得到。通过更新数据并重新绘制场景,实现了流场随时间变化的动画效果。动画会自动旋转视角以展示流场的全貌。 ### 回答3: 下面是一个使用Python Mayavi库编写的流场动画案例: ```python import numpy as np from mayavi import mlab # 创建流场数据 x, y, z = np.mgrid[-2:3, -2:3, -2:3] u = np.cos(x * y * z) v = np.sin(x * y * z) w = np.cos(x + y + z) # 创建Mayavi场景 fig = mlab.figure() # 绘制流场动画 flow = mlab.flow(u, v, w) mlab.colorbar() # 设置场景属性 fig.scene.background = (1, 1, 1) # 设置背景颜色为白色 # 设置相机视角 fig.scene.camera.position = [-5, -5, -5] fig.scene.camera.focal_point = [0, 0, 0] fig.scene.camera.view_angle = 30 fig.scene.camera.view_up = [0, 0, 1] # 设置动画属性 mlab.view(azimuth=0, elevation=0, distance=8) mlab.animate(fig, duration=5, ui=False) # 创建动画效果 # 显示动画窗口 mlab.show() ``` 该案例使用Numpy生成了一个三维的流场数据,然后使用Mayavi库的`mlab.flow`函数绘制了流场的可视化效果。通过设置Mayavi场景的属性,如背景颜色和相机视角,可以进行个性化的定制。最后,调用`mlab.animate`函数创建动画效果,并通过`mlab.show`显示动画窗口。 该案例中的流场动画可以通过Mayavi库的功能进行交互操作,比如旋转、缩放和平移场景,从不同的角度观察流场变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值