manim边做边学--多面体
在Manim
中,对于多面体,有一系列封装好的类可以直接使用。
使用它们,可以方便快速的构建正多面体:
Polyhedron
:通过顶点和面的参数构建任意多面体Tetrahedron
:四面体Octahedron
:八面体Dodecahedron
:十二面体Icosahedron
:二十面体
这些类使得在动画中直观地展示多面体成为可能,有助于理解多面体的几何形状和它们的属性。
特别是在数学和科学教学中,使用这些类制作的动画可以增强教学效果,使学生更容易理解抽象的几何概念。
1. 主要参数
Tetrahedron
,Octahedron
,Dodecahedron
和Icosahedron
都是正多面体,
所以参数比较简单,只有一个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. 八面体与四面体
此示例同时展示了Octahedron
和Tetrahedron
类的使用,这两个类分别用于创建标准的八面体和四面体。
通过将它们移动到场景的不同位置,可以清晰地展示这两个多面体的形状和大小差异。
# 创建八面体对象
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边做边学--多面体的更多相关文章
- 边做边学入门微信小程序之仿豆瓣评分
微信小程序由于适用性强.逻辑简要.开发迅速的特性,叠加具有海量活跃用户的腾讯公司背景,逐渐成为了轻量级单一功能应用场景的较佳承载方式,诸如电影购票.外卖点餐.移动商城.生活服务等场景服务提供商迅速切入 ...
- Grails边做边学入门篇[1]--------大家一起来动手建立project和Domain
近期工作比較忙,没空写博客了.我发现每周五的下午都是我最放松的时候,可能是迟延症的缘故吧...总是寄希望于周末,慢慢的.我的周末就被工作占领了. 希望大家不要有这种坏毛病.今日事,今日毕.当然我们程序 ...
- 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good
作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...
- 【Leetcode 做题学算法周刊】第四期
首发于微信公众号<前端成长记>,写于 2019.11.21 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 67 ...
- 做fzu oj 1045 做减法学到的sprintf()函数
题目 做题一直输不出答案,于是就上网去百度了这题的解题,发现解答十分的简短,而且其中我看见了平时没见过的函数,sprintf(). 于是就百度sprintf()的使用. 如下: 函数功能:把格式化的数 ...
- 【Leetcode 做题学算法周刊】第一期
首发于微信公众号<前端成长记>,写于 2019.10.28 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 1. ...
- 【Leetcode 做题学算法周刊】第二期
首发于微信公众号<前端成长记>,写于 2019.11.05 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 20 ...
- 【Leetcode 做题学算法周刊】第三期
首发于微信公众号<前端成长记>,写于 2019.11.13 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 35 ...
- 【Leetcode 做题学算法周刊】第六期
首发于微信公众号<前端成长记>,写于 2019.12.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 11 ...
- 【Leetcode 做题学算法周刊】第七期
首发于微信公众号<前端成长记>,写于 2020.01.15 背景 本文记录刷题过程中的整个思考过程,以供参考.主要内容涵盖: 题目分析设想 编写代码验证 查阅他人解法 思考总结 目录 12 ...
随机推荐
- [Tkey] CodeForces 1267G Game Relics
太神了这题,膜拜出题人 orz. 思考一 首先是大家都提到的一点,先抽卡再买.这里来做个数学分析. 假设我们还剩 \(k\) 种没有买,其实我们是有式子来算出它的花费期望的.WIKI 上提到,假设一个 ...
- 手搓大模型Task03:手搓一个最小的 Agent 系统
前言 训练一个大模型是一件高投入低回报的事情,况且训练的事情是由大的巨头公司来做的事情:通常我们是在已有的大模型基础之上做微调或Agent等:大模型的能力是毋庸置疑的,但大模型在一些实时的问题上, ...
- Windows平台下安装与配置MySQL9
要在Windows平台下安装MySQL,可以使用图行化的安装包.图形化的安装包提供了详细的安装向导,以便于用户一步一步地完成对MySQL的安装.本节将详细介绍使用图形化安装包安装MySQL的方法. 1 ...
- nginx服务器下laravel项目无法访问
nginx服务器下laravel项目无法访问 后台用的nginx服务器,之前在本地开发项目时用的apache服务器,没想到切换到线上访问时除了首页一直显示404的错误,网页无法访问,网上搜索发现是ng ...
- 高通Perflock
高通的Perflock是Qualcomm公司开发的一项技术,用于优化设备性能和功耗管理.Perflock是一种锁定机制,允许操作系统或应用程序在需要时对处理器的性能状态进行控制,从而确保在关键任务或高 ...
- 理解 keep-alive
keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,避免重新渲染 : 对应两个钩子函数 activated 和 deactivated ,当组件被激活时,触发钩子函数 act ...
- js的宏任务和微任务有哪些,是怎么执行的 ?
事件循环有宏任务和微任务: 宏任务所处的队列就是宏任务队列,队列可以有多个,第一个队列只有一个任务就是执行主线程的js代码,剩余队列任务有setTimeout setInterval :微任务所处的 ...
- apisix~kafka-logger插件
作用 将http请求与响应的内容发到kafka的topic,以json的形式发送存储 配置相关 log_format为自定义配置字段,添加后,默认的请求响应消息将被覆盖 { "_meta&q ...
- Android复习(五)设备兼容—>支持刘海屏
支持刘海屏 刘海屏是指某些设备显示屏上的一个区域延伸到显示面,这样既能为用户提供全面屏体验,又能为设备正面的重要传感器留出空间.Android 在搭载 Android 9(API 级别 28)及更高版 ...
- Git项目提交规范结合Husky + commitlint使用
一.前置条件 为了更好地 GIT 提交,加入了代码提交规范和规范校验,优雅的提交: 方便团队协作和快速定位问题,采取 Husky + commitlint 辅助项目做约定. npm install ...