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

大连密封材料  金牌会员 | 2024-9-13 08:26:15 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 815|帖子 815|积分 2445

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

  • Polygon:恣意多边形
  • RegularPolygon:恣意多边形
  • Polygram:广义的多边形
  • RegularPolygram:广义的多边形
Polygon和Polygram其实也可以绘制多边形,只不过用RegularPolygon和RegularPolygram会更加方便。

这4个模块的继续关系如上图所示。
1. 主要参数

Polygon的参数很简单,就是提供一系列的顶点坐标。
绘制时会依照提供的顶点次序依次连线,最后一个点会毗连第一个点,形成一个闭合的多边形。
参数名称类型说明verticesPoint3D多边形的顶点列表RegularPolygon的参数也很简单:
参数名称类型说明nint正多边形的边数Polygram的参数是多组的顶点,每组有多个顶点,与之相比,Polygon的参数只有一组顶点。
参数名称类型说明vertex_groupsPoint3D多组顶点列表,如果只有一组顶点,那么图形和Polygon一样RegularPolygram的参数有:
参数名称类型说明num_verticesint顶点的个数radiusfloat图形外接圆的半径densityint跳跃多少个顶点来毗连start_anglefloat第一个顶点的角度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用来调解多边形尖角的曲率。
  1. # 创建3个广义正六边形
  2. p1 = RegularPolygram(6)
  3. p2 = RegularPolygram(6)
  4. p3 = RegularPolygram(6)
  5. # p2的尖角曲率设为0.1
  6. p2.round_corners(radius=0.1)
  7. # p3的尖角曲率设为0.3
  8. p3.round_corners(radius=0.3)
复制代码

其他3个模块没有什么紧张的方法。
3. 利用示例

3.1. 多边形示例

多变形就是按照传入的顶点的次序逐个毗连成一个闭合图形。
  1. # 凸多边形
  2. points = [
  3.     LEFT * 2.5,
  4.     LEFT * 1.5 + UP,
  5.     LEFT * 0.5,
  6.     LEFT * 0.5 + DOWN * 1.5,
  7.     LEFT * 2.5 + DOWN * 1.5,
  8. ]
  9. Polygon(*points)
  10. # 凹多边形
  11. points = [
  12.     RIGHT * 0.5 + UP,
  13.     RIGHT * 1.5 + DOWN,
  14.     RIGHT * 2.5 + UP,
  15.     RIGHT * 2.5 + DOWN * 1.5,
  16.     RIGHT * 0.5 + DOWN * 1.5,
  17. ]
  18. Polygon(*points)
复制代码

3.2. 正多边形

正多边形最简单,只要传入边的数量即可。
  1. RegularPolygon(n=6)
  2. RegularPolygon(n=8)
  3. RegularPolygon(n=12)
复制代码

3.3. 广义多边形

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

3.4. 广义正多边形

广义正多边形可以调解顶点的毗连次序(通过属性density),逐个毗连时,和普通正多边形是一样的。
  1. # 正九边形,逐个连接顶点
  2. RegularPolygram(9, density=1)
  3. # 正九边形,隔一个顶点连接
  4. RegularPolygram(9, density=2)
  5. # 正九边形,隔两个顶点连接
  6. RegularPolygram(9, density=3)
复制代码

4. 附件

文中完整的代码放在网盘中了(polygon02.py),
下载地址: 完整代码 (访问密码: 6872)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表