manim边做边学--多面体

瑞星  金牌会员 | 2024-12-5 21:39:37 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 852|帖子 852|积分 2556

在Manim中,对于多面体,有一系列封装好的类可以直接使用。
使用它们,可以方便快速的构建正多面体:

  • Polyhedron:通过顶点和面的参数构建恣意多面体
  • Tetrahedron:四周体
  • Octahedron:八面体
  • Dodecahedron:十二面体
  • Icosahedron:二十面体
这些类使得在动画中直观地展示多面体成为可能,有助于理解多面体的几何形状和它们的属性。
特别是在数学和科学讲授中,使用这些类制作的动画可以加强讲授结果,使学生更容易理解抽象的几何概念。
1. 主要参数

Tetrahedron,Octahedron,Dodecahedron和Icosahedron都是正多面体,
以是参数比较简单,只有一个edge_length,表现多面体的边长。
Polyhedron作为不定面数的多面体,参数稍微多一些:
参数名称类型说明vertex_coords[[float]] / np.ndarray界说多面体全部顶点的坐标faces_list[[int]]界说多面体的各个面faces_configdict为多面体的面提供额外的设置信息graph_configdict设置多面体的图结构参数faces_list中界说的是面的顶点索引(也就是参数vertex_coords中顶点的索引),可以确定多面体的各个面的形状和位置。
参数faces_config为多面体的面设置颜色、透明度、材质等属性,从而加强动画的视觉结果。
参数graph_config用于调整多面体图的连通性、边的权重等属性,这在某些特定的数学动画或物理模拟中可以发挥作用。
2. 主要方法

这些多面体的类没有什么本身特有的方法,通用的设置样式和动画(比如平移,旋转和缩放等)的方法都支持。
3. 使用示例

下面通过几个示例来演示各个多面体在动画中的应用。
3.1. 自界说多面体

此示例展示了如何使用Polyhedron类创建自界说多面体。
通过界说顶点坐标面列表,可以创建恣意形状的多面体。
  1. # 定义顶点坐标
  2. vertex_coords = [
  3.     [1, 1, -1],
  4.     [1, -1, 1],
  5.     [-1, -1, 1],
  6.     [-1, 1, -1],
  7.     [0, 0, 2],
  8. ]
  9. # 定义面(由顶点索引组成)
  10. faces_list = [
  11.     [0, 1, 2],
  12.     [0, 2, 3],
  13.     [0, 3, 1],
  14.     [1, 2, 3, 4],
  15. ]
  16. # 创建Polyhedron对象
  17. p = Polyhedron(vertex_coords, faces_list)
  18. p.faces[0].set_color(GREEN)
  19. p.faces[1].set_color(YELLOW)
  20. p.faces[2].set_color(RED)
  21. p.faces[3].set_color(BLUE)
  22. self.play(Create(p))
复制代码

3.2. 十二面体

此示例展示了Dodecahedron类的使用,该类是Polyhedron的一个特例,用于创建标准的十二面体。
无需手动界说顶点和面,只需实例化对象并设置颜色等属性。
  1. # 创建十二面体对象
  2. d = Dodecahedron()
  3. d.faces.set_color(GREEN)
  4. self.play(Create(d))
  5. self.play(d.animate.scale(0.5))
复制代码

3.3. 二十面体

此示例展示了Icosahedron类的使用,该类用于创建标准的二十面体。
通过设置fill_opacity属性,可以控制多面体的添补透明度,
此外,通过旋转多面体,可以展示其不同的视角。
  1. # 创建二十面体对象
  2. i = Icosahedron()
  3. i.faces.set_color(RED)
  4. i.faces.set_opacity(0.6)
  5. self.play(Create(i))
  6. # 旋转多面体以展示其形状
  7. self.play(i.animate.rotate(PI / 4, axis=OUT))
复制代码

3.4. 八面体与四周体

此示例同时展示了Octahedron和Tetrahedron类的使用,这两个类分别用于创建标准的八面体和四周体。
通过将它们移动加入景的不同位置,可以清晰地展示这两个多面体的形状和大小差异。
  1. # 创建八面体对象
  2. o = Octahedron()
  3. o.faces.set_color(YELLOW)
  4. # 创建四面体对象
  5. t = Tetrahedron()
  6. t.faces.set_color(PURPLE)
  7. self.play(Create(o), Create(t))
  8. self.play(
  9.     o.animate.move_to(LEFT),
  10.     t.animate.move_to(RIGHT),
  11. )
复制代码

4. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(polyhedron.py),
下载地址: 完整代码 (访问密码: 6872)

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

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

瑞星

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

标签云

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