manim边学边做--通用多边形
manim提供了通用多边形模块,可以绘制任意的多边形。
通用多边形模块有两种,Polygon和Polygram。
Polygon是一个几何学术语,主要指的是由三条或三条以上的线段首尾顺次连接所组成的平面图形,
而Polygram的含义更加广泛一些,它除了可以绘制传统的多边形,还能绘制非闭合的多边形,各部分不相连的多边形等等。
对于一般的几何问题,使用Polygon就足够了,只有在需要表达一些图形的组合或序列时,才会用到Polygram。
manim中关于Polygon和Polygram的模块主要有4个:
Polygon:任意多边形RegularPolygon:任意正多边形Polygram:广义的多边形RegularPolygram:广义的正多边形
Polygon和Polygram其实也可以绘制正多边形,只不过用RegularPolygon和RegularPolygram会更加方便。

这4个模块的继承关系如上图所示。
1. 主要参数
Polygon的参数很简单,就是提供一系列的顶点坐标。
绘制时会依照提供的顶点顺序依次连线,最后一个点会连接第一个点,形成一个闭合的多边形。
| 参数名称 | 类型 | 说明 |
|---|---|---|
| vertices | Point3D | 多边形的顶点列表 |
RegularPolygon的参数也很简单:
| 参数名称 | 类型 | 说明 |
|---|---|---|
| n | int | 正多边形的边数 |
Polygram的参数是多组的顶点,每组有多个顶点,与之相比,Polygon的参数只有一组顶点。
| 参数名称 | 类型 | 说明 |
|---|---|---|
| vertex_groups | Point3D | 多组顶点列表,如果只有一组顶点,那么图形和Polygon一样 |
RegularPolygram的参数有:
| 参数名称 | 类型 | 说明 |
|---|---|---|
| num_vertices | int | 顶点的个数 |
| radius | float | 图形外接圆的半径 |
| density | int | 跳跃多少个顶点来连接 |
| start_angle | float | 第一个顶点的角度 |
RegularPolygon比较简单,就是顺序连接各个顶点形成多边形,
而RegularPolygram有个density参数,可以控制跳跃几个顶点来连接。
设置density=1的话,RegularPolygram和RegularPolygon的图形是一样的,后面示例中详细演示。
2. 主要方法
Polygram作为最通用的多边形,提供了3个方法。
| 名称 | 说明 |
|---|---|
| get_vertex_groups | 以分组的形式获取多变形的所有顶点坐标 |
| get_vertices | 获取多变形的所有顶点坐标 |
| round_corners | 调整多边形角的曲率 |
get_vertex_groups和get_vertices主要区别在于:
get_vertex_groups以分组的形式返回顶点坐标,这对于Polygram模块比较有用,因为Polygram模块的参数可以传入多组顶点;
get_vertices则是将所有的坐标作为一个列表返回出来。
round_corners用来调整多边形尖角的曲率。
# 创建3个广义正六边形
p1 = RegularPolygram(6)
p2 = RegularPolygram(6)
p3 = RegularPolygram(6)
# p2的尖角曲率设为0.1
p2.round_corners(radius=0.1)
# p3的尖角曲率设为0.3
p3.round_corners(radius=0.3)

其他3个模块没有什么重要的方法。
3. 使用示例
3.1. 多边形示例
多变形就是按照传入的顶点的顺序逐个连接成一个闭合图形。
# 凸多边形
points = [
LEFT * 2.5,
LEFT * 1.5 + UP,
LEFT * 0.5,
LEFT * 0.5 + DOWN * 1.5,
LEFT * 2.5 + DOWN * 1.5,
]
Polygon(*points)
# 凹多边形
points = [
RIGHT * 0.5 + UP,
RIGHT * 1.5 + DOWN,
RIGHT * 2.5 + UP,
RIGHT * 2.5 + DOWN * 1.5,
RIGHT * 0.5 + DOWN * 1.5,
]
Polygon(*points)

3.2. 正多边形
正多边形最简单,只要传入边的数量即可。
RegularPolygon(n=6)
RegularPolygon(n=8)
RegularPolygon(n=12)

3.3. 广义多边形
广义多边形更像是多个多边形的组合,它可以传入多个组的的顶点,然后根据每个组的顶点来构造图形。
下面的示例中,第一个图形有3个组顶点,第二个图形有2个组顶点。
group_points = [
[[-2.5,0,0], [-1.5,1,0], [-0.5,0,0]],
[[-2,0,0], [-2,-1.5,0]],
[[-1,0,0], [-1,-1.5,0]],
]
Polygram(*group_points)
group_points = [
[[0.5,0,0], [1.5,1,0], [2.5,0,0]],
[[0.5,-1,0], [1.5,0,0], [2.5,-1,0]],
]
Polygram(*group_points)

3.4. 广义正多边形
广义正多边形可以调整顶点的连接顺序(通过属性density),逐个连接时,和普通正多边形是一样的。
# 正九边形,逐个连接顶点
RegularPolygram(9, density=1)
# 正九边形,隔一个顶点连接
RegularPolygram(9, density=2)
# 正九边形,隔两个顶点连接
RegularPolygram(9, density=3)

4. 附件
文中完整的代码放在网盘中了(polygon02.py),
下载地址: 完整代码 (访问密码: 6872)
manim边学边做--通用多边形的更多相关文章
- 学EE做硬件找工作不如学CS做软件,为什么会这样?
学EE做硬件找工作不如学CS做软件,为什么会这样? 电子工程(EE)就业最好的方向居然是转计算机,也许让有的人觉得很不公平,EE也是很重要的学科,我们学习也很努力,为什么就业会不如CS?也有的人好奇, ...
- 牛腩学Kotlin做Android应用
牛腩学Kotlin做Android应用,蹭热度视频,边学边做, 01-kotlin插件安装及hello world 02-kotlin基础语法速览 哔哩哔哩观看地址:http://www.bilibi ...
- php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)
php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习) 一.总结 1.递归不优化的话,30层开外就有点吃力了 2.php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是p ...
- html5-3 html5标签(热点地图如何实现)(边学边做)
html5-3 html5标签(热点地图如何实现)(边学边做) 一.总结 一句话总结:热点地图用绝对定位实现. 1.自定义列表怎么弄? dl 自定义列表dt 自定义标题dd 自定义列表内容 2. ...
- 第一份开发工作,边学边做android
我刚刚毕业,在培训学校学的Java web开发,虽然学的没有大学生那么丰富细致,没有他们理论基础扎实,但是这是我学习软件开发的唯一方式了. 从小学我学习就是倒数2.3等,所有人都认为我是个没法学习的孩 ...
- 如何通过 Vue+Webpack 来做通用的前端组件化架构设计
目录: 1. 架构选型 2. 架构目录介绍 3. 架构说明 4. 招聘消息 目前如果要说比较流行的前端架构哪家强,屈指可数:reactjs.angularjs.emberj ...
- java利用注解及反射做通用的入参校验
一.原理: 1.做一个field注解,注解有两个参数:是否必填.toString之后的最大长度 2.对某个request类(或基类),使用注解标记某个字段的校验详情 3.通用的static方法,利用反 ...
- 边学边做,简单的 GraphQL 实例
项目中有功能要调用 API,对方 API 用的是 GraphQL 实现,就简单学了下,感叹技术进步真快,Facebook 发明的这玩意儿咋这么牛逼,使前端开发人员变得主动起来,想要什么接口.返回什么结 ...
- thinkphp5高亮当前页(仅针对个人项目记录,不做通用参考)
<div class="navbg"> <ul class="menu"> <li> <a href="/& ...
- LabVIEW Actor Framwork (2)________ 边学边做server&client
回顾下初始需求: 现在要做一个类似聊天的demo,一个server端,若干个client端:首先是server启动,通过server可以打开若干个client端,然后每个client可以独立给serv ...
随机推荐
- 全网最适合入门的面向对象编程教程:15 类和对象的 Python 实现-__slots__魔法方法
全网最适合入门的面向对象编程教程:15 类和对象的 Python 实现-__slots__魔法方法 摘要: 本文主要介绍了 Python 中创建自定义类时不同实例属性保存的基本原理和缺点,介绍了__s ...
- leetcode简单(矩阵):[566, 766, 832, 867, 999, 1030, 1261, 1275, 1337, 1351]
目录 566. 重塑矩阵 766. 托普利茨矩阵 832. 翻转图像 867. 转置矩阵 999. 可以被一步捕获的棋子数 1030. 距离顺序排列矩阵单元格 1260. 二维网格迁移 1275. 找 ...
- Groovy 基于Groovy实现DES加解密
groovy 3.0.7 DES加密简介 加密分为对称加密和非对称加密.非对称加密,加解密使用不同的密钥,如RSA:对称加密,加解密使用相同的密钥,如DES(Data Encryption Stand ...
- java面试一日一题:mysql的索引下推了解吗
问题:请问你了解索引下推吗 分析:该问题主要考察对mysql优化方面的理解 回答要点: 主要从以下几点去考虑, 1.mysql中索引的概念? 2.索引下推的理解及意义? 在面试过程中问到mysql,必 ...
- 2023/4/16 SCRUM个人博客
1.我昨天的任务 大体学习并了解初始化pyqt5的一些可视化问题 2.遇到了什么困难 对于py的字典使用 3.我今天的任务 学习了easydict库的基本操作
- 用jacoco统计JAVA项目测试代码覆盖率
一.概述 Jacoco 统计的是全量代码覆盖率.它不仅支持生成单元测试的覆盖率,也支持监控生成接口测试,功能测试的覆盖率. 在新一代精准测试技术流的影响中,各大型单位对覆盖率的追求越来越迫切.作为一款 ...
- 我用Awesome-Graphs看论文:解读GraphBolt
GraphBolt论文:<GraphBolt: Dependency-Driven Synchronous Processing of Streaming Graphs> 前面通过文章&l ...
- 13、SpringMVC之异常解析器
13.1.环境搭建 创建名为spring_mvc_exception的新module,过程参考9.1节和9.5节 13.1.1.创建错误提示页 <!DOCTYPE html> <ht ...
- 【Mybatis-Plus】制作逆向工具
官方文档可参考: https://baomidou.com/pages/779a6e/#快速入门 工具需要的依赖 <?xml version="1.0"?> <p ...
- 国内网友搭建的 Huggingface 镜像站 —— https://hf-mirror.com/
huggingface是什么这里不作解释. hugggingface的网站访问同Google一样,不能直接通过浏览器访问,需要科学的方式才可以,这里假设大家是知道如何访问Google的: huggin ...