用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 框架中用于创建正多边形,具有高度的灵活性。用户只需指定多边形的边数,其他属性可以通过关键字参数进行细致设置。它在视觉和动画展示时非常实用,特别是在需要几何图形的场景中。