manim提供了通用多边形模块,可以绘制任意的多边形。

通用多边形模块有两种,PolygonPolygram

Polygon是一个几何学术语,主要指的是由三条或三条以上的线段首尾顺次连接所组成的平面图形,

Polygram的含义更加广泛一些,它除了可以绘制传统的多边形,还能绘制非闭合的多边形,各部分不相连的多边形等等。

对于一般的几何问题,使用Polygon就足够了,只有在需要表达一些图形的组合或序列时,才会用到Polygram

manim中关于PolygonPolygram的模块主要有4个:

  1. Polygon:任意多边形
  2. RegularPolygon:任意多边形
  3. Polygram:广义的多边形
  4. RegularPolygram:广义的多边形

PolygonPolygram其实也可以绘制多边形,只不过用RegularPolygonRegularPolygram会更加方便。

这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的话,RegularPolygramRegularPolygon的图形是一样的,后面示例中详细演示。

2. 主要方法

Polygram作为最通用的多边形,提供了3个方法。

名称 说明
get_vertex_groups 以分组的形式获取多变形的所有顶点坐标
get_vertices 获取多变形的所有顶点坐标
round_corners 调整多边形角的曲率

get_vertex_groupsget_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边学边做--通用多边形的更多相关文章

  1. 学EE做硬件找工作不如学CS做软件,为什么会这样?

    学EE做硬件找工作不如学CS做软件,为什么会这样? 电子工程(EE)就业最好的方向居然是转计算机,也许让有的人觉得很不公平,EE也是很重要的学科,我们学习也很努力,为什么就业会不如CS?也有的人好奇, ...

  2. 牛腩学Kotlin做Android应用

    牛腩学Kotlin做Android应用,蹭热度视频,边学边做, 01-kotlin插件安装及hello world 02-kotlin基础语法速览 哔哩哔哩观看地址:http://www.bilibi ...

  3. php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)

    php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习) 一.总结 1.递归不优化的话,30层开外就有点吃力了 2.php因为定义变量的时候不用定义变量类型,所以数组里面的类型也是p ...

  4. html5-3 html5标签(热点地图如何实现)(边学边做)

    html5-3 html5标签(热点地图如何实现)(边学边做) 一.总结 一句话总结:热点地图用绝对定位实现. 1.自定义列表怎么弄? dl  自定义列表dt  自定义标题dd  自定义列表内容 2. ...

  5. 第一份开发工作,边学边做android

    我刚刚毕业,在培训学校学的Java web开发,虽然学的没有大学生那么丰富细致,没有他们理论基础扎实,但是这是我学习软件开发的唯一方式了. 从小学我学习就是倒数2.3等,所有人都认为我是个没法学习的孩 ...

  6. 如何通过 Vue+Webpack 来做通用的前端组件化架构设计

    目录:   1. 架构选型     2. 架构目录介绍     3. 架构说明     4. 招聘消息 目前如果要说比较流行的前端架构哪家强,屈指可数:reactjs.angularjs.emberj ...

  7. java利用注解及反射做通用的入参校验

    一.原理: 1.做一个field注解,注解有两个参数:是否必填.toString之后的最大长度 2.对某个request类(或基类),使用注解标记某个字段的校验详情 3.通用的static方法,利用反 ...

  8. 边学边做,简单的 GraphQL 实例

    项目中有功能要调用 API,对方 API 用的是 GraphQL 实现,就简单学了下,感叹技术进步真快,Facebook 发明的这玩意儿咋这么牛逼,使前端开发人员变得主动起来,想要什么接口.返回什么结 ...

  9. thinkphp5高亮当前页(仅针对个人项目记录,不做通用参考)

    <div class="navbg"> <ul class="menu"> <li> <a href="/& ...

  10. LabVIEW Actor Framwork (2)________ 边学边做server&client

    回顾下初始需求: 现在要做一个类似聊天的demo,一个server端,若干个client端:首先是server启动,通过server可以打开若干个client端,然后每个client可以独立给serv ...

随机推荐

  1. 当项目中使用到缓存,我们是选择 Redis 还是 Memcached ,为什么?

    举一些场景: 一.比如实现一个简单的日志收集功能或发送大量短信.邮件的功能,实现方式是先将数据收集到队列中,然后有一个定时任务去消耗队列,处理该做的事情. 直接使用 Redis 的 lpush,rpo ...

  2. <script> 和 <script setup> 的一些主要差别

    <script setup> 是 Vue 3 中的新特性,它是一种简化和更具声明性的语法,用于编写组件的逻辑部分.相比之下,<script> 是 Vue 2 中常用的编写组件逻 ...

  3. go 环境搭建

    下载go 编辑器 https://www.jetbrains.com.cn/go/ 激活工具可以留言,我看到就回复.(保存在阿里云盘) 编辑器配置 GOPROXY=https://goproxy.cn ...

  4. 初学者使用1Panel面板快速搭建WordPress网站

    之前介绍了宝塔面板以及如何搭建wordpress网站,这篇文章我们来学习如何使用1Panel面板搭建wordpress网站. 一.1Panel面板介绍 1. 介绍 1Panel 是一个现代化.开源的基 ...

  5. app专项测试:测试内容

    app专项测试:测试内容 除了app的UI功能测试,平时听说比较多的就是app专项测试了, app专项测试主要包含以下内容: 1,流量测试 :app静态测试(耗时.流量.内存.图片大小) 2,弱网测试 ...

  6. Netty的源码分析和业务场景

    Netty 是一个高性能.异步事件驱动的网络应用框架,它基于 Java NIO 构建,广泛应用于互联网.大数据.游戏开发.通信行业等多个领域.以下是对 Netty 的源码分析.业务场景的详细介绍: 源 ...

  7. 【FastDFS】05 Java程序测试上传

    创建普通Maven工程 导入所需依赖坐标: <dependencies> <!-- https://mvnrepository.com/artifact/net.oschina.zc ...

  8. 【Shiro】04 ini授权实现

    [授权概念] 访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等). 在授权中需了解的几个关键对象:主体(Subject).资源(Resource).权限(Permission ...

  9. 【转载】 ImportError: libGL.so.1: cannot open shared object file: No such file or directory——docker容器内问题报错

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_35516745/article/de ...

  10. 最新版gym-0.26.2中Atari环境下各游戏在不同模式和困难度下的遍历

    相关内容参看前文: 最新版gym-0.26.2下Atari环境的安装以及环境版本v0,v4,v5的说明 =========================================== gym中 ...