首页 > 其他分享 >manim边学边做--通用多边形

manim边学边做--通用多边形

时间:2024-09-13 09:27:17浏览次数:5  
标签:1.5 多边形 Polygon -- RegularPolygram 顶点 Polygram 边学边 manim

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)

标签:1.5,多边形,Polygon,--,RegularPolygram,顶点,Polygram,边学边,manim
From: https://www.cnblogs.com/wang_yb/p/18411587

相关文章

  • PbootCMS程序运行环境要求
    PbootCMS是一款基于PHP的轻量级内容管理系统(CMS),它对运行环境有一定的要求。为了确保PbootCMS能够稳定运行,你需要满足以下最低环境要求:1.PHP版本最低要求:PHP7.0或更高版本。推荐版本:PHP7.4或更高版本。2.Web服务器Apache:Apache2.4或更高版本。需要启用......
  • 连通性问题(有向图)(未完结)
    强连通分量我们首先定义两种边:返祖边为从一个点指向其祖先的边;横叉边从某个点指向树中另一个子树中的点的边。两者统称为非树边。而剩下的边即为树边,树边也就是在\(dfs\)树上的边。我们定义\(dfn_i\)为\(i\)是第几个被\(dfs\)到的,\(low_i\)从\(i\)出发走任意条边,但是......
  • PbootCMS模板发布文章显示的默认作者如何修改?
    PbootCMS模板中默认作者的修改可以通过以下步骤完成:1.修改默认作者名称登录后台:登录PbootCMS后台管理界面。点击右上角的作者名称:在后台右上角,点击当前显示的作者名称(如“格展网络”)。进入密码修改页面:在弹出的菜单中选择“密码修改”。修改作者名称:......
  • 59.C文件操作题目整理
    fseek()函数一般用于二进制文件也可用于文本文件EOF只可用于文本文件用来作为文件结束的标志函数feof()用来判断文件的当前状态是否处于结束是返回值为非0否则返回值0fgets函数最多从文件中读入n-1个字符fread(buffer,....)buffer代表一个指针,指向要读入数据的存放地址#inc......
  • python 生成器
    一、可迭代对象、迭代器、生成器的区别可迭代对象:只要实现__iter__方法或者实现__getitem__方法而且其参数从0开始索引,那么该对象就是可迭代对象。可以用for循环遍历,常见的有string,list,tuple,dict,set。迭代器:实现了__iter__方法和__next__方法的对象。__iter......
  • kex_exchange_identification: read: Connection reset
    问题截图解决手贱把这个禁用了(打开就行)其它参考https://stackoverflow.com/questions/69394001/how-can-i-fix-kex-exchange-identification-read-connection-reset-by-peer......
  • 数据库———事务及bug的解决
    一:事务1:场景引入张三在银行账户中存有1000元,李四存有500元,这时张三要给李四支付500元,执行sql语句①:updateaccountsetbalance=balance-500wherename='张三';②:updateaccountsetbalance=balance+500wherename='李四';想象一下,如果在sql语句①执行完......
  • 当谈论DDD到底在谈论什么
    你好,今天简单写写DDD领域驱动设计。字少总结版什么是DDD:DDD是将业务领域概念和规则映射到软件设计的方法,能打通产品、设计、编码人员的信息壁垒。DDD、ER和UML三者关系:三者在软件开发中相互关联但侧重点、范围和目的不同,DDD可结合UML,ER作用可弱化。DDD的核心概念有哪些:包括事......
  • docker进入容器运行命令
    Docker容器的基本操作在深入讨论如何进入容器并运行命令之前,让我们先回顾一下Docker容器的一些基本操作:列出容器:使用dockerps命令列出当前正在运行的容器。如果你还想看到已经停止的容器,可以添加-a或--all选项。启动容器:使用dockerstart命令加上容器ID或名称来启动一个......
  • 复合函数的前向微分与反向自动微分计算
    复合函数的前向微分与反向自动微分计算关于首次发表日期:2024-09-13参考:https://rufflewind.com/2016-12-30/reverse-mode-automatic-differentiationCalculusEarlyTranscendentals9e-JamesStewart(2020)https://en.wikipedia.org/wiki/Automatic_differentiation......