用Manim实现【多边形】类的实现——[上]

用Manim实现【多边形】类的实现——[上]

Polygram内容是关于不同几何图形的分类,特别是涉及多边形(Polygon)及其扩展形式,比如多图形(Polygram)。在manim中有10中特征,接下来5种类及其特征的解释:

1.Cutout

         带有小切口的形状。这种形状内部可能有凹洞或空隙,它的构造函数:

Cutout(main_shape, *mobjects, **kwargs)
参数说明:
  1. main_shape:

    • 这是一个必要参数,指定主要的形状。这可以是任何几何形状对象,比如一个多边形(Polygon)或矩形(Rectangle)。main_shape 是在其上进行切口操作的基本形状。
  2. *mobjects:

    • 这是一个可变长度参数(也称为位置参数),表示可以传入多个对象(mobjects)。这些对象可以是想要从 main_shape 中切除的形状或形状的一部分。你可以传入任意数量的这些对象,函数会将它们视为切口的组成部分。
  3. **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):
    • 这个函数用于创建一个由给定顶点构成的多边形。多边形是由一系列点(顶点)连接而成的,可以是任意形状,至少需要三个顶点。

参数说明:

  1. *vertices:

    • 这是一个可变参数,允许你传入任意数量的点(顶点)。
    • 每个点通常是一个二元组,表示点的坐标。例如,(x, y)
    • 如果你想构造一个三角形,你可以传入三个顶点;四边形则需要四个顶点,依此类推。
    • 示例: Polygon((0, 0), (1, 1), (0, 1)) 创建了一个三角形。
  2. **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)

参数说明

  1. *vertex_groups:

    • 这是一个可变参数(variadic argument),允许你传入一个或多个顶点组。
    • 每个顶点组都是一个包含多个顶点坐标的列表或元组。顶点的顺序决定了图形的形状。
    • 例如,可以传入多个多边形��形成重叠的形状。
  2. color=ManimColor('#58C4DD'):

    • 这是一个用于设置多边形边框颜色的参数,默认值是 #58C4DD,表示一种青色。
    • ManimColor 是 Manim 的一个颜色解析类,可以传入十六进制颜色值、RGB 值或其他颜色形式。
  3. **kwargs:

    • 这是一个关键字参数(keyword arguments),允许你传入其他的任意参数以自定义 Polygram 的属性。
    • 这些参数可以包括多边形的填充颜色、透明度、边框粗细等,具体取决于 Manim 中 Polygon 类的实现。

示例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 np

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

参数说明

  1. color=ManimColor('#FFFFFF'):

    • 用于设置矩形的边框颜色,默认值为白色 (#FFFFFF)。
    • ManimColor 是 Manim 的颜色处理类,可以接收十六进制颜色值、RGB 值或颜色名称。
  2. height=2.0:

    • 该参数指定了矩形的高度,单位是 Manim 的标准单位(通常是小数点后的一部分,表示图形在屏幕上的高度)。默认值为 2.0
  3. width=4.0:

    • 该参数指定了矩形的宽度,单位同样是 Manim 的标准单位。默认值为 4.0
  4. grid_xstep=None:

    • 这是一个可选参数,用于在根据网格生成点时指定 x 轴步长。默认为 None,表示不使用网格步长。
  5. grid_ystep=None:

    • 这是一个可选参数,用于在根据网格生成点时指定 y 轴步长。默认为 None,表示不使用网格步长。
  6. mark_paths_closed=True:

    • 这个参数用于设置生成的路径是否需要被视为封闭的,如果为 True,则矩形的起点和终点将被连接。默认值为 True
  7. close_new_points=True:

    • 当为 True 时,任何新的点会被自动连接到路径的末尾。该参数通常用于在动态修改形状或添加新点的时候。默认值为 True
  8. **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)

参数说明

  1. n=6:

    • 这是一个必需的参数,用于指定正多边形的边数(即顶点的数量)。默认值为 6,表示创建一个正六边形。
    • 值必须是一个大于等于 3 的整数,因为正多边形至少需要三条边。
  2. **kwargs:

    • 这是一个用于传递其他关键字参数的可变参数,可以根据 Manim 的图形属性来设置多边形的其他样式,如填充颜色、边框颜色、透明度、线条宽度等,例如:
      • fill_color:设置多边形的填充颜色。
      • stroke_color:设置多边形的边框颜色。
      • stroke_width:设置边框的宽度。
      • opacity:设置透明度。
    • 具体可用参数依赖于多边形对象的实现和你想使用的样式。

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

  • 25
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yasen.M

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值