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

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

其中,
ArcBetweenPoints

AnnularSector
继承自
Arc

Sector
继承自
AnnularSector

image.png
圆弧系列
的模块位于
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
是逆时针计算的。
image.png

模块
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,
)

out.gif

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
控制圆弧的度数。
out.gif

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,
)

out.gif

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,
)

out.gif

4. 附件

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

标签: none

添加新评论