用Manim实现【多边形】类的实现——[上]
Polygram内容是关于不同几何图形的分类,特别是涉及多边形(Polygon)及其扩展形式,比如多图形(Polygram)。在manim中有10中特征,接下来5种类及其特征的解释:
1.Cutout
带有小切口的形状。这种形状内部可能有凹洞或空隙,它的构造函数:
Cutout(main_shape, *mobjects, **kwargs)
参数说明:
-
main_shape
:- 这是一个必要参数,指定主要的形状。这可以是任何几何形状对象,比如一个多边形(Polygon)或矩形(Rectangle)。
main_shape
是在其上进行切口操作的基本形状。
- 这是一个必要参数,指定主要的形状。这可以是任何几何形状对象,比如一个多边形(Polygon)或矩形(Rectangle)。
-
*mobjects
:- 这是一个可变长度参数(也称为位置参数),表示可以传入多个对象(mobjects)。这些对象可以是想要从
main_shape
中切除的形状或形状的一部分。你可以传入任意数量的这些对象,函数会将它们视为切口的组成部分。
- 这是一个可变长度参数(也称为位置参数),表示可以传入多个对象(mobjects)。这些对象可以是想要从
-
**kwargs
:- 这是一个可变长度的关键字参数,允许传入额外的配置选项或参数。这些参数可以用于定制
Cutout
的行为或外观,例如颜色、线条宽度、透明度等属性。具体的关键字参数则依赖于函数的实现和绘图库的定义。
- 这是一个可变长度的关键字参数,允许传入额外的配置选项或参数。这些参数可以用于定制
功能概述:
Cutout
函数的作用可能是从一个主要形状 (main_shape) 中切除一部分(由 *mobjects
定义)。生成的结果会是一个带有切口或凹洞的形状,适用于视觉化或几何构造等场景。
示例1:
from manim import *class CutoutExample(Scene):def construct(self):s1 = Square().scale(3.5)s2 = Triangle().shift(2*DOWN + 2*RIGHT).scale(1)s3 = Square().shift(UP + 2*RIGHT).scale(1)s4 = RegularPolygon(5).shift(2*DOWN + LEFT).scale(1)s5 = RegularPolygon(6).shift(UP + LEFT).scale(1)c = Cutout(s1, s2, s3, s4, s5, fill_opacity=1, color=BLUE, stroke_color=RED)self.add(c)#self.wait()
运行结果:
示例2:
from manim import * class CutoutScene01(Scene): def construct(self): # 创建一个矩形 rectangle = Rectangle(width=5, height=3, fill_color=BLUE, fill_opacity=1) self.play(Create(rectangle)) # 创建一个圆形 circle = Circle(radius=1, fill_color=RED, fill_opacity=1) circle.move_to(rectangle.get_center()) # 将圆形移动到矩形的中心 self.play(Create(circle)) # 创建一个三角形 triangle = Triangle(fill_color=GREEN, fill_opacity=1) triangle.move_to(rectangle.get_center() + UP) # 将三角形移动到矩形的上方 self.play(Create(triangle)) # 添加切口效果(假设的 Cutout 类) cutout_shape = AnnularSector(inner_radius=0, outer_radius=1, start_angle=0, angle=PI / 3) cutout_shape.move_to(circle.get_center()) # 将切口形状移动到圆形中心 # 应用切口(涉及形状遮蔽处理) self.play(FadeOut(circle)) self.play(FadeOut(triangle)) # 展示最终的矩形(切口后) self.play(FadeIn(cutout_shape)) self.wait()
运行结果:
2.Polygon
由一条闭合的顶点线构成的形状。多边形可以拥有任意数量的边和顶点,它的构造函数是如下:
Polygon(*vertices, **kwargs)
是 Manim 库中的一个函数,用于创建一个多边形对象。下面是对这个函数及其参数的详细解释:
函数说明:
Polygon(*vertices, **kwargs)
:- 这个函数用于创建一个由给定顶点构成的多边形。多边形是由一系列点(顶点)连接而成的,可以是任意形状,至少需要三个顶点。
参数说明:
-
*vertices
:- 这是一个可变参数,允许你传入任意数量的点(顶点)。
- 每个点通常是一个二元组,表示点的坐标。例如,
(x, y)
。 - 如果你想构造一个三角形,你可以传入三个顶点;四边形则需要四个顶点,依此类推。
- 示例:
Polygon((0, 0), (1, 1), (0, 1))
创建了一个三角形。
-
**kwargs
:- 这是关键字参数,允许你传递额外的属性和样式选项,用于自定义多边形的外观。
- 常见的关键字参数包括:
color
: 设置多边形的边框颜色。fill_color
: 设置多边形的填充颜色。fill_opacity
: 设置多边形的填充透明度(0.0 表示完全透明,1.0 表示不透明)。stroke_width
: 设置边界线的宽度。
示例1:
from manim import * class PolygonExample01(Scene): def construct(self): # 创建一个多边形(四边形) polygon = Polygon( (0, 0,0), # 第一个顶点 (2, 0,0), # 第二个顶点 (1,1,0),(2, 2,0), # 第三个顶点 (0, 2,0), # 第四个顶点 color=BLUE, # 边框颜色为蓝色 fill_color=YELLOW, # 填充颜色为黄色 fill_opacity=0.5 # 透明度为0.5 ) # 播放动画 self.play(Create(polygon)) self.wait()
运行结果:
示例2:
from manim import * class PolygonExample(Scene): def construct(self): # 创建等腰三角形 isosceles = Polygon([-5, 1.5, 0], [-2, 1.5, 0], [-3.5, -2, 0]) # 创建多边形的顶点列表 position_list = [ [4, 1, 0], # middle right [4, -2.5, 0], # bottom right [0, -2.5, 0], # bottom left [0, 3, 0], # top left [2, 1, 0], # middle [4, 3, 0], # top right ] # 创建多边形 square_and_triangles = Polygon(*position_list) # 设置多边形的颜色和透明度 square_and_triangles.set_color(BLUE) # 边框颜色为蓝色 square_and_triangles.set_fill(RED, opacity=0.5) # 填充颜色为黄色,透明度为0.5 # 添加到场景中 self.add(isosceles, square_and_triangles)
运行结果:
3.Polygram
一种更广泛的多边形,允许由不连接的边组成的形状。也就是说,Polygram 可以包含多个分开的部分。
构造函数:
Polygram(*vertex_groups, color=ManimColor('#58C4DD'), **kwargs)
Polygram
是 Manim 中用于创建多边形或星状图形的一个类,通常用于自定义形状的绘制。下面是对 Polygram
函数及其参数的详细解释:
函数定义
Polygram(*vertex_groups, color=ManimColor('#58C4DD'), **kwargs)
参数说明
-
*vertex_groups
:- 这是一个可变参数(variadic argument),允许你传入一个或多个顶点组。
- 每个顶点组都是一个包含多个顶点坐标的列表或元组。顶点的顺序决定了图形的形状。
- 例如,可以传入多个多边形��形成重叠的形状。
-
color=ManimColor('#58C4DD')
:- 这是一个用于设置多边形边框颜色的参数,默认值是
#58C4DD
,表示一种青色。 ManimColor
是 Manim 的一个颜色解析类,可以传入十六进制颜色值、RGB 值或其他颜色形式。
- 这是一个用于设置多边形边框颜色的参数,默认值是
-
**kwargs
:- 这是一个关键字参数(keyword arguments),允许你传入其他的任意参数以自定义
Polygram
的属性。 - 这些参数可以包括多边形的填充颜色、透明度、边框粗细等,具体取决于 Manim 中
Polygon
类的实现。
- 这是一个关键字参数(keyword arguments),允许你传入其他的任意参数以自定义
示例1:
from manim import * class PolygramExample01(Scene): def construct(self): # 定义两个顶点组 triangle1 = [UP, DOWN + LEFT, DOWN + RIGHT] triangle2 = [UP, DOWN + LEFT * 0.5, DOWN + RIGHT * 0.5] # 创建 Polygram star_shape = Polygram(triangle1, triangle2, color=BLUE, fill_color=YELLOW, fill_opacity=0.5) # 添加到场景中 self.add(star_shape)
运行结果:
示例2:
from manim import *import numpy as npclass PolygramExample(Scene):def construct(self):hexagram = Polygram([[0, 2, 0], [-np.sqrt(3), -1, 0], [np.sqrt(3), -1, 0]],[[-np.sqrt(3), 1, 0], [0, -2, 0], [np.sqrt(3), 1, 0]],)self.add(hexagram)dot = Dot()self.play(MoveAlongPath(dot, hexagram), run_time=5, rate_func=linear)self.remove(dot)self.wait()
运行结果:
示例3:
from manim import *class PolygramRoundCorners(Scene):def construct(self):star = Star(outer_radius=2)shapes = VGroup(star)shapes.add(star.copy().round_corners(radius=0.1))shapes.add(star.copy().round_corners(radius=0.25))shapes.arrange(RIGHT)self.add(shapes)
运行结果:
4.Rectangle
一种四边形,具有两组平行的边。矩形的对边相等且角都是90度。Rectangle
是 Manim 中用于创建矩形对象的一个类。它允许用户根据所提供的参数自定义矩形的外观和属性。以下是对 Rectangle
函数及其参数的详细解释:
Rectangle(color=ManimColor('#FFFFFF'), height=2.0, width=4.0,
grid_xstep=None, grid_ystep=None, mark_paths_closed=True,close_new_points=True, **kwargs)
参数说明
-
color=ManimColor('#FFFFFF')
:- 用于设置矩形的边框颜色,默认值为白色 (
#FFFFFF
)。 ManimColor
是 Manim 的颜色处理类,可以接收十六进制颜色值、RGB 值或颜色名称。
- 用于设置矩形的边框颜色,默认值为白色 (
-
height=2.0
:- 该参数指定了矩形的高度,单位是 Manim 的标准单位(通常是小数点后的一部分,表示图形在屏幕上的高度)。默认值为
2.0
。
- 该参数指定了矩形的高度,单位是 Manim 的标准单位(通常是小数点后的一部分,表示图形在屏幕上的高度)。默认值为
-
width=4.0
:- 该参数指定了矩形的宽度,单位同样是 Manim 的标准单位。默认值为
4.0
。
- 该参数指定了矩形的宽度,单位同样是 Manim 的标准单位。默认值为
-
grid_xstep=None
:- 这是一个可选参数,用于在根据网格生成点时指定 x 轴步长。默认为
None
,表示不使用网格步长。
- 这是一个可选参数,用于在根据网格生成点时指定 x 轴步长。默认为
-
grid_ystep=None
:- 这是一个可选参数,用于在根据网格生成点时指定 y 轴步长。默认为
None
,表示不使用网格步长。
- 这是一个可选参数,用于在根据网格生成点时指定 y 轴步长。默认为
-
mark_paths_closed=True
:- 这个参数用于设置生成的路径是否需要被视为封闭的,如果为
True
,则矩形的起点和终点将被连接。默认值为True
。
- 这个参数用于设置生成的路径是否需要被视为封闭的,如果为
-
close_new_points=True
:- 当为
True
时,任何新的点会被自动连接到路径的末尾。该参数通常用于在动态修改形状或添加新点的时候。默认值为True
。
- 当为
-
**kwargs
:- 这是一个用于传递其他关键字参数的可变参数,可以指定其他样式或图形属性,比如填充颜色、透明度、边框粗细等。这些参数具体取决于 Manim 中矩形类的实现。
使用示例01
假设你想创建一个高度为 3 单位,宽度为 5 单位的红色矩形,可以这样使用 Rectangle
:
from manim import * class RectangleExample(Scene): def construct(self): # 创建矩形 rect = Rectangle(color=RED, height=3.0, width=5.0) # 添加到场景中 self.add(rect)
运行结果:
示例2:
from manim import *class RectangleExample(Scene):def construct(self):rect1 = Rectangle(width=4.0, height=2.0, grid_xstep=1.0, grid_ystep=0.5)rect2 = Rectangle(width=1.0, height=4.0)rect3 = Rectangle(width=2.0, height=2.0, grid_xstep=1.0, grid_ystep=1.0)rect3.grid_lines.set_stroke(width=1)rects = Group(rect1, rect2, rect3).arrange(buff=1)self.add(rects)
运行结果:
5.RegularPolygon
一个具有n个顶点并且所有边和角都相等的规则多边形。RegularPolygon
是 Manim 中用于创建正多边形的一个类。它允许用户指定多边形的边数及其他可选参数来自定义外观。以下是对 RegularPolygon
函数及其参数的详细解释:
函数定义
RegularPolygon(n=6, **kwargs)
参数说明
-
n=6
:- 这是一个必需的参数,用于指定正多边形的边数(即顶点的数量)。默认值为
6
,表示创建一个正六边形。 - 值必须是一个大于等于 3 的整数,因为正多边形至少需要三条边。
- 这是一个必需的参数,用于指定正多边形的边数(即顶点的数量)。默认值为
-
**kwargs
:- 这是一个用于传递其他关键字参数的可变参数,可以根据 Manim 的图形属性来设置多边形的其他样式,如填充颜色、边框颜色、透明度、线条宽度等,例如:
fill_color
:设置多边形的填充颜色。stroke_color
:设置多边形的边框颜色。stroke_width
:设置边框的宽度。opacity
:设置透明度。
- 具体可用参数依赖于多边形对象的实现和你想使用的样式。
- 这是一个用于传递其他关键字参数的可变参数,可以根据 Manim 的图形属性来设置多边形的其他样式,如填充颜色、边框颜色、透明度、线条宽度等,例如:
示例1
from manim import * class RegularPolygonExample(Scene): def construct(self): # 创建一个正五边形,填充颜色为蓝色,边框颜色为红色 polygon = RegularPolygon(n=5, fill_color=BLUE, stroke_color=RED, stroke_width=4) # 添加到场景中 self.add(NumberPlane(),polygon)
运行结果:
示例2:
from manim import *class RegularPolygonExample(Scene):def construct(self):poly_1 = RegularPolygon(n=6)poly_2 = RegularPolygon(n=6, start_angle=30*DEGREES, color=GREEN)poly_3 = RegularPolygon(n=10, color=RED)poly_group = Group(poly_1, poly_2, poly_3).scale(1.5).arrange(buff=1)self.add(poly_group)
运行结果:
总结
RegularPolygon
函数在 Manim 框架中用于创建正多边形,具有高度的灵活性。用户只需指定多边形的边数,其他属性可以通过关键字参数进行细致设置。它在视觉和动画展示时非常实用,特别是在需要几何图形的场景中。