下面介绍的是一些比较常用的几何图形。 这是参考来源。部分不常用的图形没有收录到本文中。 虽然没有参考,但内容差不多的视频:〔manim教程〕第二讲 manim常用几何类
- 位置:
point=array([0., 0., 0.]) - 半径:
radius=0.08
本质是实心圆。
- 标签:
label(str | SingleStringMathTex | Text | Tex) - 半径:
radius=None - 缓冲:
buff=0.1
若以 str 类型给定标签,则文本会渲染成 MathTex 格式。 若给定半径,则忽略缓冲。
- 起点:
start=array([-1., 0., 0.]) - 终点:
end=array([1., 0., 0.]) - 缓冲:
buff=0 - 圆心角:
path_arc=0若该值不为0,则线会弯曲,详见Arc
方法很多,比如说获取倾斜角(get_angle()),获得点在该线上的投影(get_projection(point)),获得斜率(get_slope()),获得单位向量(get_unit_vector()),获得向量(get_vector())等等。
- 短划线长度:
dash_length=0.05 - 划线与空格之比:
dashed_ratio=0.5取值0~1
这是Line的子类。这意味着,Line的部分参数和方法,在DashedLine也适用。因此,弯曲虚线和虚线箭头都是可以创建出来的。
- 矢量数学对象:
vmob - 切点在vmob的位置:
alpha取值0~1 - 长度:
length=1
这也是Line的子类。
- 半径:
radius=1.0 - 起始角度:
start_angle=0 - 弧所对圆心角:
angle=PI/2逆时针,默认值为π/2
找圆心用get_arc_center(),找背景矩形的中心用get_center(),找弧线的中点用get_midpoint(),找弧线的n等分点用point_from_proportion(1/n)。
- 起点:
start - 终点:
end - 圆心角:
angle=PI/2 - 半径:
radius=None
Arc的子类。 若给定半径,则忽略圆心角。半径的正负号决定方向,半径的绝对值必须大于等于两点距离的一半,且给定半径画不了优弧。
- 两线:
line1line2(Line) - 半径:
radius=None(float) - 象限:
quadrant=(1, 1)取值为(1,1), (-1,1), (1,-1), (-1,-1) - 切换优劣:
other_angle=False从line1逆时针(False)或顺时针(True)到line2
Angle.from_three_points(A, B, C)可构造 get_lines()可获取成角的两线。(返回VGroup)
get_value(degrees=False)可获取角度值。
- 两线:
line1line2(Line) - 长度:
length=None(float)
Angle的子类。即使两线不垂直,也是能画出直角符号的,只是有点丑。
由于Line是TipableVMobject的子类,所以Line及其子类可用add_tip()来添加箭头的尖端。使用tip属性或get_tip()之类的方法来访问尖端。
Arrow() 文档
Line的子类,只是终点(end)处有个尖端(tip)。不过尖端的样式有很多,使用参数tip_shape更改。

CurvedArrow() 文档 ArcBetweenPoints的子类,只是多了个尖端。
CurvedDoubleArrow() 文档 CurvedArrow的子类。
- 方向:
direction=array([1., 0., 0.]) - 缓冲:
buff=0
Arrow的子类,起点变成原点(ORIGIN),本质就是一个箭头。
有一个专属方法coordinate_label(坐标标签),但这里不会详细介绍。
- 半径:
radius=None - 颜色:
color=RED
Arc的子类。
Circle.from_three_points(p1, p2, p3)三点决定圆。
point_at_angle(angle)根据角度决定圆上一点的坐标。
surround(mobject, dim_to_match=0, stretch=False, buffer_factor=1.2)返回一个环绕指定数学对象的背景矩形的圆。buffer_factor小于1则在内,大于1则在外。
- 宽:
width=2 - 高:
height=1
Circle的子类。
- 内圈半径:
inner_radius=1 - 外圈半径:
outer_radius=2
Circle的子类。
- 内圈半径:
inner_radius=1 - 外圈半径:
outer_radius=2 - 圆心角:
angle=PI/2 - 起始角度:
start_angle=0
Arc的子类。
- 半径:
radius=1
AnnularSector的子类。可参考AnnularSector来设置圆心角angle和起始角度start_angle。
- 顶点:
*vertices
Polygram(一种广义的多边形,允许存在不相连的边集)的子类。
因为本文不介绍Polygram,所以在这里列一下Polygram的方法。
get_vertex_groups()返回分好组的顶点列表(三维数组)。
get_vertices()返回不分组的顶点列表(二维数组)。
round_corners(radius = 0.5)让图形有圆角,该方法的其他参数暂不介绍。
>>> from manim import *
>>> poly = Polygram([ORIGIN, RIGHT, UP, LEFT + UP], [LEFT, LEFT + UP, 2 * LEFT])
>>> groups = poly.get_vertex_groups() # 返回分好组的顶点列表
>>> len(groups)
2
>>> groups[0]
array([[ 0., 0., 0.],
[ 1., 0., 0.],
[ 0., 1., 0.],
[-1., 1., 0.]])
>>> groups[1]
array([[-1., 0., 0.],
[-1., 1., 0.],
[-2., 0., 0.]])
>>> poly.get_vertices() # 返回不分组的顶点列表
array([[ 0., 0., 0.],
[ 1., 0., 0.],
[ 0., 1., 0.],
[-1., 1., 0.],
[-1., 0., 0.],
[-1., 1., 0.],
[-2., 0., 0.]])RegularPolygon(正多边形)的子类。
- 颜色:
color=WHITE - 高:
height=2.0 - 宽:
width=4.0 - 竖直网格线的间距:
grid_xstep=None - 水平网格线的间距:
grid_ystep=None
Polygon的子类。 可以为内部网格线单独设置属性。
rect = Rectangle(width=2.0, height=2.0, grid_xstep=1.0, grid_ystep=1.0)
rect.grid_lines.set_stroke(width=1)
self.add(rect)- 圆角半径:
corner_radius=0.5
Rectangle的子类。
- 边长:
side_length=2.0
Rectangle的子类。
- 边数:
n=6
RegularPolygram的子类。
- 顶点数:
num_vertices - 密度:
density=2每个点与周围第density个点相连 - 半径:
radius=1 - 起始角度:
start_angle=None
Polygram的子类。
下图是顶点数为7时,不同密度的情况。

- 外部顶点数:
n=5 - 外部顶点所在圆半径:
outer_radius=1 - 内部顶点所在圆半径:
inner_radius=None - 密度:
density=2若指定inner_radius,则忽略density - 起始角度:
start_angle=PI/2
Polygon的子类。这算是没有内部连线的RegularPolygram。
- 被围绕的对象:
*mobjects - 颜色:
color=YELLOW - 缓冲:
buff=0.1 - 圆角半径:
corner_radius=0.0
RoundedRectangle的子类。
- 被围绕的对象:
*mobjects - 颜色:
color=None默认颜色为场景的背景色 - 线宽:
stroke_width=0 - 线条不透明度:
stroke_opacity=0默认不显示描边线条 - 填充不透明度:
fill_opacity=0.75 - 缓冲:
buff=0默认贴合对象
- 数学对象:
mobject=None - 线条颜色:
stroke_color=RED - 线宽:
stroke_width=6.0 - 缩放系数:
scale_factor=1.0
本质是包括了两条线的VGroup(矢量组合)。
- 数学对象:
mobject - 缓冲:
buff=0.1
Line的子类。
交集 Intersection(*vmobjects, **kwargs)
并集 Union(*vmobjects, **kwargs)
对称差 (subject, clip, **kwargs)
差集 Difference(subject, clip, **kwargs) 参数是前者减后者
更多内容可参考boolean_ops和示例图库。

- 被减图案:
main_shape - 减去图案:
*mobjects
类似于对称差,区别在于,这个是一对多。
AnnotationDot 注释点 ArcPolygon 弧多边形 ArcPolygonFromArcs 从弧线创建的弧多边形 CubicBezier 三次贝赛尔曲线 TangentialArc 与两线相切的弧
Label 标签 LabeledArrow 带标签的箭头 LabeledLine 带标签的线 LabeledPolygram 带标签的多边形
Elbow 直角标志
ConvexHull 凸包 Polygram 多边形组合 ……
