manim Manim 边学边做Manim之中的基本图形说明 老刘博客 2025-10-18 2025-10-18
做数学动画视频的软件还是比较丰富的,但是个人观点最酷的还是Manim,这款数学视频制作软件的使用难度也是很大的,需要一定的编程知识,制作数学视频时,各类几何图形是使用最频繁的。一般来说,常用的几何图形包括:点 ,线 ,圆 以及多边形 。
1. 点 点 是最简单图形,也是其他所有图形的基础。绘制其他任何图形时,都是用点 来定位的。manim
中生成一个点很方便,只要给定一个坐标即可。这里的坐标包含 [x, y, z]
3个维度,如果绘制二维图形,将第三个坐标 z
固定为 0
。
1 2 3 4 5 6 7 class DotSample (Scene ): def construct (self ): for x in range (-1 , 2 ): for y in range (1 , -2 , -1 ): p = Dot([x, y, 0 ]) self .play(Create(p), run_time=0.5 )
按照 3x3
的格式绘制9个点
1 manim -p .\samples.py DotSample
2.线 manim
的线 其实都是线段,绘制线 只要提供两个点的坐标。
2.1 直线 提供任意2个点,manim
通过 Line
来绘制线。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 class LineSample (Scene ): def construct (self ): self ._lines() def _lines (self ): l = Line([-1 , 1 , 0 ], [1 , 1 , 0 ]) self .play(Create(l), run_time=0.5 ) l = Line([-1 , 0 , 0 ], [1 , 0 , 0 ]) self .play(Create(l), run_time=0.5 ) l = Line([-1 , -1 , 0 ], [1 , -1 , 0 ]) self .play(Create(l), run_time=0.5 )
运行效果:
2.2 带箭头的线 绘制带箭头的线同样只要提供2个点。只是绘制的对象不用 Line
,而是用 Arrow
。
1 2 3 4 5 6 7 8 9 10 11 12 13 class LineSample (Scene ): def construct (self ): self ._arrows() def _arrows (self ): a = Arrow([-1 , 1 , 0 ], [1 , 1 , 0 ]) self .play(Create(a), run_time=0.5 ) a = Arrow([-1 , 0 , 0 ], [1 , 0 , 0 ]) self .play(Create(a), run_time=0.5 ) a = Arrow([-1 , -1 , 0 ], [1 , -1 , 0 ]) self .play(Create(a), run_time=0.5 )
运行效果:
2.3 虚线 绘制虚线使用 DashedLine
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 class LineSample (Scene ): def construct (self ): self ._dashedLines() self .wait() def _dashedLines (self ): dl = DashedLine([-1 , 1 , 0 ], [1 , 1 , 0 ]) self .play(Create(dl), run_time=0.5 ) dl = DashedLine([-1 , 0 , 0 ], [1 , 0 , 0 ]) self .play(Create(dl), run_time=0.5 ) dl = DashedLine([-1 , -1 , 0 ], [1 , -1 , 0 ]) self .play(Create(dl), run_time=0.5 )
运行效果:
3. 圆 绘制圆 只要提供半径 即可,圆心默认在屏幕的中心。 绘制圆使用 Circle
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 class CircleSample (Scene ): def construct (self ): self ._circles() self .wait() def _circles (self ): c = Circle(radius=1 ) self .play(Create(c), run_time=0.5 ) c = Circle(radius=2 ) self .play(Create(c), run_time=0.5 ) c = Circle(radius=3 ) self .play(Create(c), run_time=0.5 )
运行效果:
3.1 椭圆 manim
也支持绘制椭圆,使用 Ellipse
。绘制椭圆的两个参数 width
和 height
分别控制椭圆最大宽度和最大高度。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 class CircleSample (Scene ): def construct (self ): self ._ellipses() self .wait() def _ellipses (self ): e = Ellipse(width=1 , height=0.5 ) self .play(Create(e), run_time=0.5 ) e = Ellipse(width=2 , height=1 ) self .play(Create(e), run_time=0.5 ) e = Ellipse(width=3 , height=1.5 ) self .play(Create(e), run_time=0.5 )
运行效果:
3.2 圆弧 manim
中绘制圆弧主要有三个参数:
angle:圆弧的弧度
start_angle: 开始的角度,默认 0
radius:圆弧的半径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class CircleSample (Scene ): def construct (self ): self ._arcs() self .wait() def _arcs (self ): a = Arc(angle=PI / 2 , radius=1 ) self .play(Create(a), run_time=0.5 ) a = Arc(angle=PI, radius=2 ) self .play(Create(a), run_time=0.5 ) a = Arc(angle=PI / 6 , start_angle=PI * 1.5 , radius=2 ) self .play(Create(a), run_time=0.5 )
运行效果:
4. 多边形 如果制作几何相关的数学视频,那么多边形绝对是使用最多的。manim
对多边形的支持非常完善,常用的主要以下几种:
4.1 等边三角形 manim
中专门有绘制等边三角形的对象 Triangle
。
1 2 3 4 5 6 7 8 class PolygonSample (Scene ): def construct (self ): self ._triangles() self .wait() def _triangles (self ): t = Triangle() self .play(Create(t))
运行效果:
4.2 四边形 四边形比三角形应用的更广,所以 manim
也提供了更多绘制四边形的方法。
4.2.1 正方形 绘制正方形主要有一个参数,就是 side_length
(正方形的边长)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 class PolygonSample (Scene ): def construct (self ): self ._squares() self .wait() def _squares (self ): s = Square(side_length=1 ) self .play(Create(s), run_time=0.5 ) s = Square(side_length=1.5 ) self .play(Create(s), run_time=0.5 ) s = Square(side_length=2 ) self .play(Create(s), run_time=0.5 )
运行效果:
4.2.2 矩形 绘制矩形有两个主要的参数,分别代表矩形的高 height
和宽 width
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 class PolygonSample (Scene ): def construct (self ): self ._rectangles() self .wait() def _rectangles (self ): r = Rectangle(width=1.5 , height=1 ) self .play(Create(r), run_time=0.5 ) r = Rectangle(width=2 , height=1.5 ) self .play(Create(r), run_time=0.5 ) r = Rectangle(width=3 , height=2 ) self .play(Create(r), run_time=0.5 )
运行效果:
4.2.3 圆角矩形 圆角矩形和矩形相比,多了一个参数corner_radius
用来控制矩形四个角的弧度半径, 也就是控制矩形四个角的圆滑程度。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 class PolygonSample (Scene ): def construct (self ): self ._rounded_rectangles() self .wait() def _rounded_rectangles (self ): r = RoundedRectangle(corner_radius=0.2 , width=1.5 , height=1 ) self .play(Create(r), run_time=0.5 ) r = RoundedRectangle(corner_radius=0.4 , width=2 , height=1.5 ) self .play(Create(r), run_time=0.5 ) r = RoundedRectangle(corner_radius=0.6 , width=3 , height=2 ) self .play(Create(r), run_time=0.5 )
运行效果:
4.3 任意多边形 除了三角形和四边形,manim
还提供了一个通用的Polygon
对象,它会依次连接传入的坐标点列表,绘制任意多边形。
1 2 3 4 5 6 7 8 9 10 11 class PolygonSample (Scene ): def construct (self ): self ._polygons() self .wait() def _polygons (self ): p = Polygon([-3 , 1 , 0 ], [-1 , 1 , 0 ], [-2 , -1 , 0 ]) self .play(Create(p), run_time=0.5 ) p = Polygon([1 , 1 , 0 ], [2 , 0 , 0 ], [3 , 1 , 0 ], [3 , -1 , 0 ], [1 , -1 , 0 ]) self .play(Create(p), run_time=0.5 )
运行效果:
4.4 正多边形 虽然 manim
提供了绘制任意多边形的对象 Polygon
,利用Polygon
绘制正多边形理论上是完全可行的。不过,要自己去计算各个正多边形的坐标点显然有些费时费力,所以,manim
中还提供了一个专门用来绘制正多边形的对象 RegularPolygon
.
1 2 3 4 5 6 7 8 9 10 11 12 13 class PolygonSample (Scene ): def construct (self ): self ._reguler_polygons() self .wait() def _reguler_polygons (self ): p1 = RegularPolygon(n=6 ) p2 = RegularPolygon(n=8 ) p3 = RegularPolygon(n=10 ) vg = VGroup(p1, p2, p3) vg.arrange(RIGHT, buff=SMALL_BUFF) self .play(Create(vg))
运行效果:
总结回顾 本篇主要介绍了平面几何中,使用 manim
绘制各种基本图形的方法。
只要提供点坐标就能绘制的图形有:点,线(直线,虚线,箭头线),还有任意多边形。
需要提供角度或者半径信息的图形有:圆,椭圆,圆弧,圆角矩形
提供边长信息的图形有:正方形,矩形
最后,还有一个特殊的专门用来绘制正多边形的对象