圆弧形可以算是一种特殊的圆形,它是圆形的一部分。manim中,单独为圆弧形状封装了几个模块:
Arc:通用的圆弧,根据半径和角度来绘制圆弧ArcBetweenPoints:根据两个点和角度来绘制圆弧AnnularSector:环形圆弧,相当于是圆环的一部分Sector:扇形,始终是1/4个圆环。
其中,ArcBetweenPoints和AnnularSector继承自Arc,Sector继承自AnnularSector。

圆弧系列的模块位于manim中的Mobject之下。
1. 主要参数
模块Arc的主要参数有:
| 参数名称 | 类型 | 说明 |
|---|---|---|
| radius | float | 圆弧的半径 |
| start_angle | float | 圆弧开始的弧度 |
| angle | float | 圆弧的弧度 |
| num_components | int | 组成弧的片段,这个值越大,弧越圆滑 |
| arc_center | Point3D | 圆弧对应的圆心位置 |
圆弧的起点和终点是由start_angle和angle控制的,start_angle参数控制圆弧的起点,默认值是0(圆心右边为0度);angle参数是圆弧的弧度,start_angle + angle的值就是圆弧的终点,angle是逆时针计算的。
模块ArcBetweenPoints的主要参数有:
| 参数名称 | 类型 | 说明 |
|---|---|---|
| start | Point3D | 圆弧的起点 |
| end | Point3D | 圆弧的终点 |
| angle | float | 圆弧的弧度 |
| raduis | float | 圆弧的半径 |
这个模块是根据两个点(start和end)来绘制圆弧,angle和raduis参数只能设置一个,用来控制圆弧的弧长。start和end固定时,angle越大,弧长越长;raduis越大,弧长越短。
模块AnnularSector的主要参数有:
| 参数名称 | 类型 | 说明 |
|---|---|---|
| inner_radius | float | 环状弧形的内半径 |
| outer_radius | float | 环状弧形的外半径 |
| start_angle | float | 环状弧形开始的弧度 |
| angle | float | 环状弧形的弧度 |
inner_radius和outer_radius的差形成了一个环形;start_angle和angle的含义与模块Arc中的同名参数一样。
模块Sector的主要参数:
| 参数名称 | 类型 | 说明 |
|---|---|---|
| inner_radius | float | 环状弧形的内半径 |
| outer_radius | float | 环状弧形的外半径 |
Sector模块只有inner_radius和outer_radius两个参数,因为它默认为1/4个圆环。
2. 主要方法
这几个模块的作用主要是展示图形,所以方法不多,常用的有两个:
| 名称 | 说明 |
|---|---|
| get_arc_center | 获取弧形当前的圆心坐标 |
| move_arc_center_to | 设置弧形新的圆心坐标 |
3. 使用示例
下面分别针对4种圆弧形的模块的参数,演示一些示例。
3.1. 通用圆弧
通用的的圆弧Arc是最常用的,start_angle和angle设置圆弧的起点和弧度,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也是在制作动画时常用的方式,
参数start和end设置圆弧的起点和终点;angle和radius设置圆弧的弯曲程度,这两个参数只能使用一个,同时设置时只有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)