manim边学边做--弧形多边形
弧形多边形是一种结合了圆弧和多边形的图形,这类几何图形在设计中应用非常广泛。
比如在家居设计中,看看家里的沙发,餐桌和座椅等,它们的边角,靠背等地方都是弧形的设计,这种设计有效柔化了室内空间,使整体氛围更加和谐自然。
还有景观和建筑设计中,弧形多边形常被用于道路规划、花坛布局等,
特别是儿童游乐的区域,通过自由的弧线设计,不仅符合儿童活泼好动的天性,还能激发他们的想象力和创造力。
在艺术设计领域,弧形多边形用的就更多了,在图形、标志、海报等的创作中,弧形多边形独特的形状和视觉效果能够吸引观众的注意力,传达出设计者的意图和情感。
manim中提供了2个模块来构造弧形多边形:
ArcPolygon:通过顶点和弧度来构造弧形多边形ArcPolygonFromArcs:通过圆弧来构造弧形多边形

这两个模块的主要区别在于构造弧形多边形的过程不同,一个是通过顶点,一个是通过圆弧,
最终构造出的弧形多边形并没有什么不同。
1. 主要参数
ArcPolygon的主要参数有:
| 参数名称 | 类型 | 说明 |
|---|---|---|
| vertices | Point3D | 多边形的顶点列表 |
| angle | float | 统一设置所有弧的弧度 |
| radius | float | 统一设置所有弧的半径 |
| arc_config | list[dict] | 分别设置每个弧的弧度 |
顶点vertices确定之后,angle和radius设置每两个顶点之间弧的弯曲程度。
angle和radius参数只能使用一个,同时使用的话,angle参数无效。
angle和radius是统一设置多边形所有弧的弧度,arc_config可以设置每个弧拥有不同的弧度。
ArcPolygonFromArcs的参数比较简单。
| 参数名称 | 类型 | 说明 |
|---|---|---|
| arcs | Arc | 弧形的集合 |
注意,如果参数传入的弧形列表arcs不能构成一个闭合的多边形,
那么,manim会自动把arcs中最后一个弧形的终点与第一个弧形的起点用直线连接起来,形成闭合的多边形。
这两个模块(ArcPolygon和ArcPolygonFromArcs)构造的弧形多边形没有区别,在制作动画时根据实际情况选用不同的模块。
如果有顶点信息,那么用ArcPolygon来构造多边形,如果有各个圆弧的信息,那么用ArcPolygonFromArcs来构造多边形。
2. 使用示例
2.1. 统一设置弧度
使用angle可以统一设置弧形多边形中每条边的弧度,弧度设置的越大,边的弯曲度越大。
vertices = [UR, UL, DL, DR]
ArcPolygon(*vertices, angle=0)
ArcPolygon(*vertices, angle=60 * DEGREES)
ArcPolygon(*vertices, angle=120 * DEGREES)

2.2. 统一设置半径
使用radius也可以设置弧形多边形中每条边的弯曲度,radius是指构成弧形的两个顶点所在圆的半径。
所以radius越大,边的弯曲度越小。
vertices = [UR, UL, DL, DR]
ArcPolygon(*vertices, radius=10)
ArcPolygon(*vertices, radius=1)
ArcPolygon(*vertices, radius=2)

2.3. 分别设置每个弧
参数angle和radius是用来统一设置所有边的弯曲度的,
如果我们想给弧形多边形的每条边设置不同的弧度,就要使用arc_config参数。
vertices = [UR, UL, DL, DR]
arc_config = [
{"angle": 30 * DEGREES},
{"angle": 90 * DEGREES},
{"radius": 2},
{"radius": 5},
]
ArcPolygon(*vertices, arc_config)

通过arc_config不仅可以设置每个弧的弯曲度,也可以设置它们线的粗细,颜色等等属性。
2.4. 通过圆弧构造多边形
ArcPolygonFromArcs是通过一系列圆弧来构造多边形的,所以不需要angle和radius这些参数了。
因为构造每个圆弧时已经设置好圆弧的弯曲度和相关属性了。
arc1 = ArcBetweenPoints(
angle=PI / 6, # 30度
color=BLUE,
)
arc2 = ArcBetweenPoints(
angle=PI / 3, # 60度
color=GREEN,
)
arc3 = ArcBetweenPoints(
angle=PI / 2, # 90度
color=YELLOW,
)
arc4 = ArcBetweenPoints(
angle=2 * PI / 3, # 120度
color=RED,
)
ArcPolygonFromArcs(arc1, arc2, arc3, arc4)

2.5. 缺失圆弧时的多边形
上面的示例中,使用ArcPolygonFromArcs构造多变形时,传入的4个圆弧合起来正好是闭合的。
如果传入的圆弧不是闭合的会怎么样呢?
ArcPolygonFromArcs会自动将不闭合部分用直线相连,
也就是前一个圆弧的终点和下一个圆弧的起点用直线相连,最终构成一个闭合的多边形。
arc1 = ArcBetweenPoints(
angle=PI / 6, # 30度
color=BLUE,
)
arc3 = ArcBetweenPoints(
angle=PI / 2, # 90度
color=YELLOW,
)
ArcPolygonFromArcs(arc1, arc3)

缺失的部分就是上面白色直线连接的部分。
3. 附件
文中完整的代码放在网盘中了(arc_polygon.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等,所有人都认为我是个没法学习的孩 ...
- 边学边做,简单的 GraphQL 实例
项目中有功能要调用 API,对方 API 用的是 GraphQL 实现,就简单学了下,感叹技术进步真快,Facebook 发明的这玩意儿咋这么牛逼,使前端开发人员变得主动起来,想要什么接口.返回什么结 ...
- LabVIEW Actor Framwork (2)________ 边学边做server&client
回顾下初始需求: 现在要做一个类似聊天的demo,一个server端,若干个client端:首先是server启动,通过server可以打开若干个client端,然后每个client可以独立给serv ...
- 牛腩学ASP.NET CORE做博客(视频)
牛腩学习ASP.NET CORE做的项目,边学边做. 目录: 01-dotnetcore网站部署到centos7系统上(时长 2:03:16) 02-前期准备及项目搭建 (时长:0:23:35) 03 ...
- 牛腩学用MUI做手机APP
斗鱼直播间直播学习撸码,最终目标是用MUI做一个手机APP(暂定android平台,攒钱买IPHONE 7SE!!!),直播内容含整个软件APP的制作过程(含后台接口的制作,放到自己买的阿里云服务器, ...
- 技术的止境(客户价值第一,快速实现第二,边做边学,迅速成为牛人。紧贴客户的需求去做技术,立于不败之地。追求的目标:把一项产品去做好,用产品去养活自己和家人)good
作为一个依靠技术来谋生的程序员,我最近一直在思考一个问题,有限的生命里,面对无限的技术更新,我要研究到什么程度才能算是完成我的成为技术大牛的目标呢?换而言之,那就是技术的止境在哪儿呢?深入的思考下去, ...
随机推荐
- 咬文嚼图式的介绍二叉树、B树/B-树
前言 因为本人天资愚钝,所以总喜欢将抽象化的事务具象化表达.对于各类眼花缭乱的树,只需要认知到它们只是一种数据结构,类似数组,切片,列表,映射等这些耳熟能详的词汇.对于一个数据结构而言,无非就是增删改 ...
- [oeasy]python019_ 如何在github仓库中进入目录_找到程序代码_找到代码
继续运行 回忆上次内容 上上次 真写了万行代码 这 万行代码 都是写在明面上的 这次 使用git命令 下载了 github上面的仓库 添加图片注释,不超过 140 字(可选) 下载仓库 ...
- oeasy教您玩转vim - 16 跳到某行
跳到某行 回忆上节课内容 上下行 向 下 是 j 向 上 是 k 上下行首 向 下 到行首非空字符 + 向 上 到行首非空字符 - 这些 motion 都可以加上 [count] 来翻倍 首尾行 首行 ...
- SUM_ACM-Codeforces Round 941 (Div. 2)
A Card Exchange https://codeforces.com/contest/1966/problem/A 思路:找规律,如果b>a,输出a,如果a中有大于等于b个数,输出b-1 ...
- QT 的 ModelView
QApplication a(argc, argv); QDirModel model; //QDirModel, 问文件目录树 QTreeView tree; QListView l ...
- 解决Win平台VSCode中Python在控制台输出中文乱码的问题
在菜单Debug->Open Configurations,打开launch.json,新增如下粉红色字符内容: { "configurations": [ { " ...
- 【Spring Data JPA】04 JPQL和原生SQL
@Transactional注解 让Spring处理事务 不需要自己每次都手动开启提交回滚 FINDONE & GETONE的区别? findone是立即加载 getone是延迟加载,配合事务 ...
- 2024年 智能机器人元年 —— 国内的智能机器人(humanoid)公司当下最大的压力(最为急迫的任务)是什么?
可以说,2024年是人形机器人的元年.我国在去年年底将发展智能机器人立为了第一线的重要科技发展方向,并计划在2024年.2025年建立出完整的产业链条,并培育出几家成熟的行业领先的智能机器人公司.而我 ...
- Jax计算框架的MPI通讯的扩展库 —— mpi4jax
地址: https://github.com/mpi4jax/mpi4jax PS. 关于这个library的性能表现并不是很清楚,没有亲自手动安装并测试过.这里只作为链接收藏之用,毕竟这个属于比较小 ...
- YouTube上的很多时视频就是有问题的,还经常不允许评论,妥妥的双标网站
过多的事情不说了,这些个外国反华势力的网站真是无时无刻的不在视频中加私货,你想评论吧他还能判断你的个人价值观来预估你的评价倾向然后禁止你评价,十分的气人.要是立场不够坚定的人真的是很容易被带偏,像这种 ...