圆弧形可以算是一种特殊的圆形,它是圆形的一部分。
manim中,单独为圆弧形状封装了几个模块:

  1. Arc:通用的圆弧,根据半径和角度来绘制圆弧
  2. ArcBetweenPoints:根据两个点和角度来绘制圆弧
  3. AnnularSector:环形圆弧,相当于是圆环的一部分
  4. Sector:扇形,始终是1/4个圆环。

其中,ArcBetweenPointsAnnularSector继承自ArcSector继承自AnnularSector


圆弧系列的模块位于manim中的Mobject之下。

1. 主要参数

模块Arc的主要参数有:

参数名称 类型 说明
radius float 圆弧的半径
start_angle float 圆弧开始的弧度
angle float 圆弧的弧度
num_components int 组成弧的片段,这个值越大,弧越圆滑
arc_center Point3D 圆弧对应的圆心位置

圆弧的起点和终点是由start_angleangle控制的,
start_angle参数控制圆弧的起点,默认值是0(圆心右边为0度);
angle参数是圆弧的弧度,start_angle + angle的值就是圆弧的终点,
angle是逆时针计算的。

模块ArcBetweenPoints的主要参数有:

参数名称 类型 说明
start Point3D 圆弧的起点
end Point3D 圆弧的终点
angle float 圆弧的弧度
raduis float 圆弧的半径

这个模块是根据两个点(startend)来绘制圆弧,
angleraduis参数只能设置一个,用来控制圆弧的弧长。
startend固定时,angle越大,弧长越长;raduis越大,弧长越短。

模块AnnularSector的主要参数有:

参数名称 类型 说明
inner_radius float 环状弧形的内半径
outer_radius float 环状弧形的外半径
start_angle float 环状弧形开始的弧度
angle float 环状弧形的弧度

inner_radiusouter_radius的差形成了一个环形;
start_angleangle的含义与模块Arc中的同名参数一样。

模块Sector的主要参数:

参数名称 类型 说明
inner_radius float 环状弧形的内半径
outer_radius float 环状弧形的外半径

Sector模块只有inner_radiusouter_radius两个参数,因为它默认为1/4个圆环。

2. 主要方法

这几个模块的作用主要是展示图形,所以方法不多,常用的有两个:

名称 说明
get_arc_center 获取弧形当前的圆心坐标
move_arc_center_to 设置弧形新的圆心坐标

3. 使用示例

下面分别针对4种圆弧形的模块的参数,演示一些示例。

3.1. 通用圆弧

通用的的圆弧Arc是最常用的,start_angleangle设置圆弧的起点和弧度,
arc_center设置圆弧的位置,radius控制圆弧的大小。

Arc(
arc_center=LEFT * 2,
angle=PI,
)
Arc(
radius=1.5,
arc_center=RIGHT,
angle=PI,
)
Arc(
start_angle=PI / 2,
angle=PI / 2,
arc_center=LEFT * 2 + DOWN * 2,
)
Arc(
start_angle=PI,
angle=PI * 3 / 2,
arc_center=RIGHT + DOWN * 1.5,
)

3.2. 根据两点生成圆弧

从固定的两点生成圆弧ArcBetweenPoints也是在制作动画时常用的方式,
参数startend设置圆弧的起点和终点;
angleradius设置圆弧的弯曲程度,这两个参数只能使用一个,同时设置时只有radius

ArcBetweenPoints(
start.get_center(),
end.get_center(),
radius=0.8,
) ArcBetweenPoints(
start.get_center(),
end.get_center(),
radius=1.6,
) ArcBetweenPoints(
start.get_center(),
end.get_center(),
angle=PI / 2,
) ArcBetweenPoints(
start.get_center(),
end.get_center(),
angle=PI,
)

前两个示例用radius控制圆弧的度数,后两个示例用angle控制圆弧的度数。

3.3. 环形的圆弧

环形的圆弧AnnularSector可以理解成增加了厚度的圆弧。
它可以使用Arc的参数,不同之处在于它的半径有两个,一个是inner_radius,一个是outer_radius
这两个半径之差就是环形的厚度。

AnnularSector(
inner_radius=0.5,
outer_radius=1.5,
angle=PI,
)
AnnularSector(
inner_radius=0.5,
outer_radius=0.8,
angle=PI,
)
AnnularSector(
start_angle=PI / 2,
angle=PI / 2,
inner_radius=0.5,
outer_radius=1.5,
)
AnnularSector(
start_angle=PI,
angle=PI * 3 / 2,
inner_radius=0.5,
outer_radius=0.8,
)

3.4. 扇形

扇形Sector是一种简化的AnnularSector,它固定为1/4个圆环。

Sector(
inner_radius=0.5,
outer_radius=1.5,
)
Sector(
inner_radius=0.5,
outer_radius=0.8,
)
Sector(
inner_radius=1,
outer_radius=1.5,
)
Sector(
inner_radius=0.3,
outer_radius=1.8,
)

4. 附件

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

manim边学边做--圆弧形的更多相关文章

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

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

  2. Android圆弧形ListView的实现

    本文带大家来实现ListView的圆弧形的分布排列,原理非常easy,就是依据ListView的每个Item的高度来对每个item进行偏移. 首先自己定义一个LinearLayout,这是ListVi ...

  3. 牛腩学Kotlin做Android应用

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

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

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

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

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

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

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

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

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

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

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

  9. 牛腩学ASP.NET CORE做博客(视频)

    牛腩学习ASP.NET CORE做的项目,边学边做. 目录: 01-dotnetcore网站部署到centos7系统上(时长 2:03:16) 02-前期准备及项目搭建 (时长:0:23:35) 03 ...

  10. 牛腩学用MUI做手机APP

    斗鱼直播间直播学习撸码,最终目标是用MUI做一个手机APP(暂定android平台,攒钱买IPHONE 7SE!!!),直播内容含整个软件APP的制作过程(含后台接口的制作,放到自己买的阿里云服务器, ...

随机推荐

  1. Debezium-Flink-Hudi:实时流式CDC

    1. 什么是Debezium Debezium是一个开源的分布式平台,用于捕捉变化数据(change data capture)的场景.它可以捕捉数据库中的事件变化(例如表的增.删.改等),并将其转为 ...

  2. todo高通Android UEFI中的LCD分析(1):启动流程分析

    # 高通Android UEFI中的LCD分析(1):启动流程 背景 之前学习的lk阶段点亮LCD的流程算是比较经典,但是高通已经推出了很多种基于UEFI方案的启动架构. 所以需要对这块比较新的技术进 ...

  3. Zynq-7045升级,ARM+FPGA性能怪兽,Xilinx UltraScale+ MPSoC XCZU7EV核心板正式发布

  4. 通过vscode写博客

    通过Vscode写博客到博客园 前言 在以前的写作方式都是通过博客园内置的markdown进行工作,但是在实际使用过程中,感觉不是很方便,所以找到了用VSCode插件写作的方法. 所需插件 博客园Cn ...

  5. 阿里云服务器安装Docker Compose

    官网地址:https://docs.docker.com/compose/install/ 1. sudo curl -L "https://github.com/docker/compos ...

  6. C# 获取指定年月的第一天和最后一天、获取本月的第一天和最后一天、获取当前日期的星期几等

    •获取指定年月的第一天 public static DateTime GetCurMonthFirstDay(string year,string mon) { DateTime AssemblDat ...

  7. centos下安装Docker容器

    安装前的准备工作 1.列出docker安装过的相关包 sudo yum list installed | grep docker 2.删除相关安装包 #根据查找出来的进行删除,不同版本可能有不一样的情 ...

  8. UE4 蓝图查找Actor和Actor标签

    在用UE4 开发数字孪生应用的过程中,有很多业务会涉及到actor的查找,和actor标签的使用. 比如下面的场景中,找出所有的物联网设备进行标注. 通过类查找actor 通过类查找actor,可以查 ...

  9. 基于django(爱抚宠物) 小程序设计和实现(源码+LW+部署讲解)

    感兴趣的可以先收藏起来,大家在毕设选题,项目以及论文编写等相关问题都可以给我加好友咨询 系统介绍: 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用 ...

  10. Java实现快速快速排序算法

    算法简介 快速排序(Quick Sort) 是由冒泡排序改进而得的.在冒泡排序过程中,只对相邻的两个记录进行比较,因此每次交换两个相邻记录时只能消除一个逆序.如果能通过两个(不相邻)记录的一次交换直接 ...