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

参数说明

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/49965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搜维尔科技:Cyber​​glove通过其前所未有的柔性传感器技术,带来了多年的经验、专业知识和可靠性

Cyberglove 概述 新一代数据手套技术 MoCap 手套采用了原始 CyberGlove 产品 20 年经验所建立的技术,产生了改进的和新的特性、能力和设计,非常适合动作捕捉环境。 旧与新相遇, Cyberglove 通过其前所未有的柔性传感器技术,带来…

linux自动化构建工具--make/makefile

目录 1.make/makefile介绍 1.1基本认识 1.2依赖关系、依赖方法 1.3具体操作步骤 1.4进一步理解 1.5默认设置 1.6make二次使用的解释 1.7两个文件的时间问题 1.8总是被执行 1.9特殊符号介绍 1.make/makefile介绍 1.1基本认识 make是一个指令,makefile是一…

mysql面试(六)

前言 本章节详细讲解了一下mysql执行计划相关的属性释义,以及不同sql所出现的不同效果 执行计划 一条查询语句经过mysql查询优化器的各种基于成本和各种规则优化之后,会生成一个所谓的 执行计划,这个执行计划展示了这条查询语句具体查询方…

django 小型超市库存与销售管理系统-计算机毕业设计源码46608

摘 要 随着信息技术的快速发展,超市库存与销售管理面临着前所未有的挑战与机遇。为了提升超市的运营效率,优化库存管理,并增强销售数据的分析能力,我们基于Django框架设计并开发了一套小型超市库存与销售管理系统。该系统充分利用…

运算符的运算顺序

【单目算术位关系,逻辑三目后赋值】 ![在这里插入图片描述] (https://i-blog.csdnimg.cn/direct/e4c8f4e22b5044a48154bf7378e3b3b3.png)

php 做一个mqtt按钮,发布触发信号

在之前博客php 做一个文件下载服务器,得避免跨路径工具,安全很重要 中加了一个按钮,触发物联网设备返回数据。基于mqtt开发,如果想知道mqtt如何搭建,可以看我的博客【MQTT(1)】服务端的搭建 效…

机器学习 | 回归算法原理——多重回归

Hi,大家好,我是半亩花海。接着上次的多项式回归继续更新《白话机器学习的数学》这本书的学习笔记,在此分享多重回归这一回归算法原理。本章的回归算法原理基于《基于广告费预测点击量》项目,欢迎大家交流学习! 目录 一…

Air780EP模块 LuatOS开发-MQTT接入阿里云应用指南

简介 本文简单讲述了利用LuatOS-Air进行二次开发,采用一型一密、一机一密两种方式认证方式连接阿里云。整体结构如图 关联文档和使用工具:LuatOS库阿里云平台 准备工作 Air780EP_全IO开发板一套,包括天线SIM卡,USB线 PC电脑&…

产品经理-​统计数据是如何产生的(20)

在互联网当中,监测一个项目的实际情况,在产品当中,往往需要进行数据的监测,看用户的习惯,进而进行对产品进行优化,比如统计产品用户的一些行为,鼠标点击,鼠标hover,停留时长,进入,进出等 产品经理看到的数据统计一般是经历了下面几个阶段 数据埋点:这个阶段产品经理…

RK3568笔记四十三:MPU6050驱动开发(硬件I2C_3)

若该文为原创文章,转载请注明原文出处。 正点原子提供的I2C有测试ap3216c,SH3001等传感器,根据手册操作可以实现效果。 这里记录使用I2C3驱动MPU6050. 记录原因是前面有模拟I2C,但硬件如何使用,有点不是很清楚&#…

猫头虎分享:GPT-4o Mini VS GPT-3.5 Turbo 新旧对决,谁能拔得头筹?

GPT-4o Mini VS GPT-3.5 Turbo 🌟 新旧对决,谁能拔得头筹? 我们正在进入廉价语言模型的新时代 🚀 阅读时间:6分钟 摘要: 尽管 GPT-4o 功能强大,但我并不经常使用它。如果我正在寻找一个用于复…

【Hec-Ras】案例1:韩国Seung-gi stream稳定流/非稳定流模拟

Hec-Ras案例1:韩国Seung-gi stream 研究区域:Seung-gi stream(韩国)研究数据降水数据(Rainfall data) 步骤1:创建工程文件/打开已有工程文件步骤2:参数调整步骤2.1:数据导…

mysql 数据库空间统计sql

mysql 数据库空间统计 文章目录 mysql 数据库空间统计说明一、数据库存储代码二、查询某个数据库的所有表的 代码总结 说明 INFORMATION_SCHEMA Table Reference 表参考 information_schema是‌MySQL中的一个特殊数据库,它存储了关于所有其他数据库的元数据信息。…

D4.前缀和、差分

前缀和 一维前缀和(区间) 这样的好处是,可以以O(1)的时间复杂度来计算。而不是遍历O(n)。当读入数据非常大(>1000000)的时候,建议使用scanf()来读取数据,会比cin >> 快很多。在全局开…

享元模式(结构型)

目录 一、前言 二、享元模式 三、总结 一、前言 享元模式(Flyweight Pattern)是一种结构型设计模式,用于减少大量细粒度对象的内存占用。它通过共享尽可能多的相同数据来节约内存空间。 享元模式由以下角色组成: Flyweight&…

「JavaEE」Spring MVC:基本操作1

🎇个人主页:Ice_Sugar_7 🎇所属专栏:JavaEE 🎇欢迎点赞收藏加关注哦! 简介 Spring Web MVC 是⼀个 Web 框架,简称为 Spring MVC MVC 是 Model View Controller 的缩写,它是软件工程…

vscode回退不显示了,不方便操作

一、后退前进按钮 顶部显示&#xff0c;方便调试 <—— ——> 文件-> 首选项 -> 设置->commandcenter->勾选 Window: Title Bar Style->custom 将native —>custom

力扣每日一题1186. 删除一次得到子数组最大和【动态规划】

本题的核心在于对于每个元素&#xff0c;我们分别考虑保留和删除两种状态&#xff0c;并根据前面的状态转移来更新当前状态。最后&#xff0c;遍历所有元素&#xff0c;找到最大和即可。 状态定义 dp[i][0] 表示以第 i 个元素结尾且未删除元素的子数组的最大和。dp[i][1] 表示…

Qemu virtio-blk 后端驱动开发 - PureFlash对接

本文以PureFlash为例&#xff0c;介绍了如何将一个新的存储类型对接到qemu虚拟化平台下&#xff0c;为虚机提供存储能力。 关于virtio-blk以及其工作原理这里就不介绍了&#xff0c;网上有很多分析的文章。总之就是如果我们想给虚机提供一种新的存储类型&#xff08;不同于标准…

【日常记录】【JS】对一个数组,按照某个字段的值,进行分组

文章目录 1. 前言2. lodash 的分组3. Object.groupBy()参考链接 1. 前言 在开发中&#xff0c;经常会遇到一组数据&#xff0c;要按照某个字段进行分组&#xff0c;这个时候会有很多种方法&#xff0c;可以使用 forEach、reduce、等其他方法 reduce 方法 function groupBy(arr…