Manim中,对于多面体,有一系列封装好的类可以直接使用。

使用它们,可以方便快速的构建正多面体:

  1. Polyhedron:通过顶点和面的参数构建任意多面体
  2. Tetrahedron:四面体
  3. Octahedron:八面体
  4. Dodecahedron:十二面体
  5. Icosahedron:二十面体

这些类使得在动画中直观地展示多面体成为可能,有助于理解多面体的几何形状和它们的属性。

特别是在数学和科学教学中,使用这些类制作的动画可以增强教学效果,使学生更容易理解抽象的几何概念。

1. 主要参数

TetrahedronOctahedronDodecahedronIcosahedron都是正多面体,

所以参数比较简单,只有一个edge_length,表示多面体的边长。

Polyhedron作为不定面数的多面体,参数稍微多一些:

参数名称 类型 说明
vertex_coords [[float]] / np.ndarray 定义多面体所有顶点的坐标
faces_list [[int]] 定义多面体的各个面
faces_config dict 为多面体的面提供额外的配置信息
graph_config dict 配置多面体的图结构

参数faces_list中定义的是面的顶点索引(也就是参数vertex_coords中顶点的索引),可以确定多面体的各个面的形状和位置。

参数faces_config为多面体的面设置颜色、透明度、材质等属性,从而增强动画的视觉效果。

参数graph_config用于调整多面体图的连通性、边的权重等属性,这在某些特定的数学动画或物理模拟中可以发挥作用。

2. 主要方法

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

3. 使用示例

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

3.1. 自定义多面体

此示例展示了如何使用Polyhedron类创建自定义多面体。

通过定义顶点坐标面列表,可以创建任意形状的多面体。

# 定义顶点坐标
vertex_coords = [
[1, 1, -1],
[1, -1, 1],
[-1, -1, 1],
[-1, 1, -1],
[0, 0, 2],
] # 定义面(由顶点索引组成)
faces_list = [
[0, 1, 2],
[0, 2, 3],
[0, 3, 1],
[1, 2, 3, 4],
] # 创建Polyhedron对象
p = Polyhedron(vertex_coords, faces_list)
p.faces[0].set_color(GREEN)
p.faces[1].set_color(YELLOW)
p.faces[2].set_color(RED)
p.faces[3].set_color(BLUE) self.play(Create(p))

3.2. 十二面体

此示例展示了Dodecahedron类的使用,该类是Polyhedron的一个特例,用于创建标准的十二面体。

无需手动定义顶点和面,只需实例化对象并设置颜色等属性。

# 创建十二面体对象
d = Dodecahedron()
d.faces.set_color(GREEN) self.play(Create(d))
self.play(d.animate.scale(0.5))

3.3. 二十面体

此示例展示了Icosahedron类的使用,该类用于创建标准的二十面体。

通过设置fill_opacity属性,可以控制多面体的填充透明度,

此外,通过旋转多面体,可以展示其不同的视角。

# 创建二十面体对象
i = Icosahedron()
i.faces.set_color(RED)
i.faces.set_opacity(0.6)
self.play(Create(i)) # 旋转多面体以展示其形状
self.play(i.animate.rotate(PI / 4, axis=OUT))

3.4. 八面体与四面体

此示例同时展示了OctahedronTetrahedron类的使用,这两个类分别用于创建标准的八面体和四面体。

通过将它们移动到场景的不同位置,可以清晰地展示这两个多面体的形状和大小差异。

# 创建八面体对象
o = Octahedron()
o.faces.set_color(YELLOW) # 创建四面体对象
t = Tetrahedron()
t.faces.set_color(PURPLE) self.play(Create(o), Create(t))
self.play(
o.animate.move_to(LEFT),
t.animate.move_to(RIGHT),
)

4. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(polyhedron.py),

下载地址: 完整代码 (访问密码: 6872)

manim边做边学--多面体的更多相关文章

  1. 边做边学入门微信小程序之仿豆瓣评分

    微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...

  2. Grails边做边学入门篇[1]--------大家一起来动手建立project和Domain

    近期工作比較忙,没空写博客了.我发现每周五的下午都是我最放松的时候,可能是迟延症的缘故吧...总是寄希望于周末,慢慢的.我的周末就被工作占领了. 希望大家不要有这种坏毛病.今日事,今日毕.当然我们程序 ...

  3. 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good

    作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...

  4. 【Leetcode 做题学算法周刊】第四期

    首发于微信公众号<前端成长记>,写于 2019.11.21 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 67 ...

  5. 做fzu oj 1045 做减法学到的sprintf()函数

    题目 做题一直输不出答案,于是就上网去百度了这题的解题,发现解答十分的简短,而且其中我看见了平时没见过的函数,sprintf(). 于是就百度sprintf()的使用. 如下: 函数功能:把格式化的数 ...

  6. 【Leetcode 做题学算法周刊】第一期

    首发于微信公众号<前端成长记>,写于 2019.10.28 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 1. ...

  7. 【Leetcode 做题学算法周刊】第二期

    首发于微信公众号<前端成长记>,写于 2019.11.05 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 20 ...

  8. 【Leetcode 做题学算法周刊】第三期

    首发于微信公众号<前端成长记>,写于 2019.11.13 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 35 ...

  9. 【Leetcode 做题学算法周刊】第六期

    首发于微信公众号<前端成长记>,写于 2019.12.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 11 ...

  10. 【Leetcode 做题学算法周刊】第七期

    首发于微信公众号<前端成长记>,写于 2020.01.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 12 ...

随机推荐

  1. Go日志管理库zap

    一.zap介绍 在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 1.能够将事件记录到文件中,而不是应用程序控制台. 2.日志切割-能够根据文件大小.时间或间隔等来切割日志文件. ...

  2. DOM – Work with Document.styleSheets and JS/Scss Breakpoint Media Query

    前言 为了方便管理, 我们会定义 CSS Variables, 类似于全局变量. 有时候做特效的时候还需要 JavaScript 配合, 这时就会希望 JavaScript 可以获取到 CSC Var ...

  3. CSS & JS Effect – 脉冲 Pulse Play Button

    效果 参考 Youtube – Create a pulsing animation with CSS 重点 在背后做一个一样大的 div border 然后 animation scale up. ...

  4. Google Analytics & Ads 学习笔记 2 (GA4 版本)

    首先去 control panel admin 升级 GA4 https://support.google.com/analytics/answer/9744165?hl=en 它其实是开多一个 pr ...

  5. QT6跨平台开发

    QT6跨平台开发 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C++扩展开发视频课程 免费QT视频课程 您可以看免费1000+个QT技术 ...

  6. 命令行gcc -v和g++ -v输出版本不一致

    命令行gcc -v和g++ -v输出版本不一致 前言:本文初编辑于2024年1月30日 CSDN主页:https://blog.csdn.net/rvdgdsva 博客园主页:https://www. ...

  7. 【赵渝强老师】在Spark SQL中读取JSON文件

    Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用.为什么要学习Spark SQL?如果大家了解Hive的话,应该 ...

  8. php中的跳转

    php中的跳转 header("refresh:3;url=http://www.baidu.com";); <meta http-equiv='refresh' conte ...

  9. 4.3.2 等比数列的前n项和公式

    \({\color{Red}{欢迎到学科网下载资料学习 }}\) [ [基础过关系列]高二数学同步精品讲义与分层练习(人教A版2019)] ( https://www.zxxk.com/docpack ...

  10. NOI 2024

    Day1 T1 集合(set) 容易发现两个序列等价当且仅当,所有数字在序列中出现位置的集合构成集族相等. 考虑哈希,对于一个集合 \(S\),令它的哈希值为 \(f(S) = (\sum\limit ...