python动画:矢量图形的体系结构演示

news2024/12/23 16:34:25

总体来说,这些类构成了一个支持矢量图形的体系结构,提供了创建、管理和操作数学对象的灵活性。描述使用矢量图形的 Mobject(数学对象)的术语。这些对象在动画和数学绘图领域常用于创建灵活和可扩展的图形。

1.CurvesAsSubmobjects

这个类的作用是将曲线的元素转换为子对象(submobjects)。这样可以更好地管理和操作复杂的曲线结构。

CurvesAsSubmobjects(vmobject, **kwargs)

 CurvesAsSubmobjects(vmobject, **kwargs) 是一个函数或类,用于将一个 VMobject 中的曲线元素转换为子对象(submobjects)。这个过程使得曲线可以更方便地进行进一步的处理、动画或变换。

参数说明:

  1. vmobject:

    • 类型: VMobject
    • 这是输入的矢量化对象,通常是一个包含曲线或路径的对象。该对象中的曲线会被分解为单独的子对象。
  2. kwargs:

    • 类型: 可变关键字参数
    • 这些参数可以是任何其他的配置或设置,具体取决于 CurvesAsSubmobjects 的实现。在很多情况下,这些参数用于控制转换的细节,比如颜色、线条样式、是否添加某些属性等等。

功能简介:

  • CurvesAsSubmobjects 类的主要功能是便于管理复杂的曲线对象。通过将曲线的不同组成部分转变为独立的子对象(submobjects),可以让用户对每一部分进行单独的操作,比如单独动画、颜色变化或是其他样式调整。
  • 这对于需要精细控制或动画效果的场景非常有用,特别是在数学和物理可视化中。

用法示例:

class LineGradientExample(Scene):
    def construct(self):
        curve = ParametricFunction(lambda t: [t, np.sin(t), 0], t_range=[-PI, PI, 0.01], stroke_width=10)
        new_curve = CurvesAsSubmobjects(curve)
        new_curve2 = CurvesAsSubmobjects(curve)
        new_curve.set_color_by_gradient(BLUE, RED)
        new_curve2.set_color_by_gradient(BLUE)
        
        self.add(new_curve.shift(UP), curve,new_curve2.shift(DOWN))

2.DashedVMobject

这是一个由虚线(dashes)组成的 VMobject。相较于常规的线条对象,这种对象使用虚线来表示图形,适合需要突出表达的场景。

DashedVMobject(vmobject, num_dashes=15, dashed_ratio=0.5, dash_offset=0,
 color=ManimColor('#FFFFFF'), equal_lengths=True, **kwargs)

DashedVMobject 是 Manim 中类 VMobject 的一个子类,它用于创建带有虚线效果的路径或图形。这个类允许你将任何 VMobject 转换为虚线,具有一些参数可以定制虚线的外观和行为。以下是每个参数的详细说明:

函数和参数解释

  • vmobject:

    • 要转换为虚线的 VMobject 实例。这个对象通常是你先前创建的路径、曲线或任何其他的 VMobject
  • num_dashes (默认值: 15):

    • 虚线的段数。这个参数决定了虚线中可见的短段数量。如果要控制虚线的整体外观,可以调整此值。
  • dashed_ratio (默认值: 0.5):

    • 这个参数控制虚线段的长度与间隔的比例。具体来说,虚线段的长度相对于间隔的比例为 dashed_ratio,如果 dashed_ratio 设置为 0.5,那么每个虚线段和其后面的间隔长度相同。
  • dash_offset (默认值: 0):

    • 虚线的偏移量。改变这个值会使虚线的起始位置有所移动,通常用于实现动态效果或使得虚线的可视化效果更具有吸引力。
  • color (默认值: ManimColor('#FFFFFF')):

    • 虚线的颜色。这个参数可以使用 Manim 的颜色对象,也可以使用标准的 RGB 颜色表达方式。默认情况下,虚线为白色。
  • equal_lengths (默认值: True):

    • 此参数指示虚线的每个段和间隔是否应该有相等的长度。如果设置为 True,每个虚线段和其间隔的长度会相同;如果设置为 False,你可以根据 dashed_ratio 调整它们的长度。
  • **kwargs:

    • 这是一个可接受额外关键字参数的参数,允许你将其他 VMobject 的参数传递给 DashedVMobject。这为自定义提供了更大的灵活性,比如设置曲线的宽度等属性。

示例

下面是一个使用 DashedVMobject 的简单示例:

class DashedVMobjectExample(Scene):
    def construct(self):
        r = 0.5

        top_row = VGroup()  # Increasing num_dashes
        for dashes in range(1, 12):
            circ = DashedVMobject(Circle(radius=r, color=RED), num_dashes=dashes)
            top_row.add(circ)

        middle_row = VGroup()  # Increasing dashed_ratio
        for ratio in np.arange(1 / 11, 1, 1 / 11):
            circ = DashedVMobject(
                Circle(radius=r, color=BLUE), dashed_ratio=ratio
            )
            middle_row.add(circ)

        func1 = FunctionGraph(lambda t: t**5,[-1,1],color=WHITE)
        func_even = DashedVMobject(func1,num_dashes=6,equal_lengths=True)
        func_stretched = DashedVMobject(func1, num_dashes=6, equal_lengths=False)
        bottom_row = VGroup(func_even,func_stretched)

        top_row.arrange(buff=0.3)
        middle_row.arrange()
        bottom_row.arrange(buff=1)
        everything = VGroup(top_row, middle_row, bottom_row).arrange(DOWN, buff=1)
        self.add(everything)

 

3.VDict

这个类类似于 VGroup,也提供通过键(key)访问子对象(submobject)的功能,像 Python 字典(dict)一样。这使得管理和查找子对象变得更加方便。

VDict(mapping_or_iterable={}, show_keys=False, **kwargs)

 函数和参数解释

  • mapping_or_iterable (默认值: {}):

    • 这个参数可以是一个映射(如字典)或一个可迭代对象(如列表),用于初始化 VDict 的内容。如果使用字典,则键值对会用于生成可视化元素。如果使用列表,它会被视为一组键值对。
  • show_keys (默认值: False):

    • 如果设置为 True,在可视化中将会显示字典的键。这对于向观众明确展示哪些是键非常有用。如果设置为 False,只会显示值部分。
  • **kwargs:

    • 这里的 **kwargs 是可接受的其他关键字参数,允许用户为 VDict 提供更多的自定义选项。这些可选项可能包括颜色、字体大小、位置等,具体取决于 VDict 的实现。

示例

下面是一个使用 VDict 的简单示例:

from manim import *  

class ShapesWithVDict(Scene):  
    def construct(self):  
        # 创建一个红色正方形  
        square = Square().set_color(RED)  
        # 创建一个黄色圆形,并将其放置在正方形的上方  
        circle = Circle().set_color(YELLOW).next_to(square, UP)  

        # 创建一个由键-对象对组成的列表  
        pairs = [("s", square), ("c", circle)]  
        # 使用 VDict 创建一个字典,这里显示键  
        my_dict = VDict(pairs, show_keys=True)  

        # 动画效果,显示 VDict,类似于 VGroup  
        self.play(Create(my_dict))  
        self.wait()  

        # 创建一个绿色文本,并将其放置在正方形的下方  
        text = Tex("Some text").set_color(GREEN).next_to(square, DOWN)  

        # 通过将其包装为单元素列表的元组,向字典添加一个键-值对  
        my_dict.add([("t", text)])  
        self.wait()  

        # 创建一个矩形,并将其放置在文本的下方  
        rect = Rectangle().next_to(text, DOWN)  
        # 也可以像Python字典一样进行键赋值  
        my_dict["r"] = rect  

        # 像访问 Python 字典一样访问子对象  
        my_dict["t"].set_color(PURPLE)  # 设置键 "t" 的颜色  
        self.play(my_dict["t"].animate.scale(3))  # 动画放大  
        self.wait()  

        # 也支持Python字典样式的重新赋值  
        my_dict["t"] = Tex("Some other text").set_color(BLUE)  
        self.wait()  

        # 通过键删除子对象  
        my_dict.remove("t")  
        self.wait()  

        # 逐步消失正方形  
        self.play(Uncreate(my_dict["s"]))  
        self.wait()  

        # 逐步消失圆形  
        self.play(FadeOut(my_dict["c"]))  
        self.wait()  

        # 逐步消失矩形,并向下移动  
        self.play(FadeOut(my_dict["r"], shift=DOWN))  
        self.wait()  

        # 使用现有字典的 mobjects 创建 VDict  
        plain_dict = {  
            1: Integer(1).shift(DOWN),  # 将整数 1 移动到下方  
            2: Integer(2).shift(2 * DOWN),  # 将整数 2 移动到更下方  
            3: Integer(3).shift(3 * DOWN),  # 将整数 3 移动到最下方  
        }  

        # 通过替换现有字典创建 VDict  
        vdict_from_plain_dict = VDict(plain_dict)  
        # 将 vdict 移动到画面左上方  
        vdict_from_plain_dict.shift(1.5 * (UP + LEFT))  
        # 动画效果,显示新创建的 VDict  
        self.play(Create(vdict_from_plain_dict))  

        # 使用 zip 创建 VDict  
        vdict_using_zip = VDict(zip(["s", "c", "r"], [Square(), Circle(), Rectangle()]))  
        # 将这个新的 VDict 移动到画面右侧  
        vdict_using_zip.shift(1.5 * RIGHT)  
        # 动画效果,显示这个新创建的 VDict  
        self.play(Create(vdict_using_zip))  
        self.wait()

4.VGroup

这是一个包含多个矢量化 Mobject 的分组类,允许将多个对象组合在一起,方便进行整体变换或操作。

VGroup(*vmobjects, **kwargs)

 VGroup 是 Manim 中的一个类,用于将多个可视化对象 (VMobjects) 组合在一起,形成一个单一的对象。这使得多个可视化元素可以作为一个整体进行操作,包括平移、缩放、旋转等动画。

函数签名

VGroup(*vmobjects, **kwargs) 

参数说明

  • *vmobjects:可变数量的可视化对象,通常是 Manim 中的图形对象(如 CircleSquareTex 等)。可以将一个或多个 VMobjects 作为参数传递给 VGroup。

  • **kwargs:额外的关键字参数。这些参数可以用来设置 VGroup 的属性,例如:

    • color:设置 VGroup 中所有对象的颜色。
    • stroke_width:设置边界的宽度。
    • fill_color 和 fill_opacity:设置填充颜色和不透明度。
    • 其他参数,如定位、显示等,可以参考 VGroup 或基类 VMobject 的文档。

使用示例1:

from manim import *  

class MyScene(Scene):  
    def construct(self):  
        # 创建几个可视化对象  
        circle = Circle()  
        square = Square()  
        triangle = Triangle()  

        # 使用 VGroup 将这些对象组合在一起  
        groupD = VGroup(circle, square, triangle).arrange(DOWN, buff=1).shift(2*RIGHT)
        self.play(Create(groupD))
        self.wait(1) 
        
        grouprR = VGroup(circle, square, triangle).arrange(RIGHT, buff=0.1).shift(3*LEFT)

        # 显示组合体  
        self.play(Create(grouprR))
        self.wait()  

 示例2:

from manim import *

class ArcShapeIris(Scene):
    def construct(self):
        colors = [DARK_BROWN, BLUE_E, BLUE_D, BLUE_A, TEAL_B, GREEN_B, YELLOW_E]
        radius = [1 + rad * 0.1 for rad in range(len(colors))]

        circles_group = VGroup()

        # zip(radius, color) makes the iterator [(radius[i], color[i]) for i in range(radius)]
        circles_group.add(*[Circle(radius=rad, stroke_width=10, color=col)
                            for rad, col in zip(radius, colors)])
        self.add(circles_group)

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

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

相关文章

中学理化生实验室设备仪器配置及实验应用

中学理化生实验室设备涵盖了物理、化学和生物三个学科所需的多种仪器、设备和材料,实验室设备的种类丰富多样,涵盖了从基础配备到专业配置再到实验应用等各种需求。以下是对这些设备的配置分类和具体实验应用的描述。 中学理化生实验室设备仪器配置 中…

一起学习CAN总线之物理层协议(2)

附:ISO 11898-1:2024和ISO11898-2:2024标准下载 一起学习CAN总线之物理层协议(2) CAN总线物理层主要完成节点间信号的传送,把各种信息转换成可以传输的物理电平,并将信号传输到其他的目标设备上。CAN总线传输介质&…

智慧排水远程监测系统物联网解决方案

智慧排水监测系统是一种集成了现代信息技术、物联网技术、大数据分析及云计算能力的高效城市排水管理解决方案。该系统通过全面、实时地监控城市排水网络的运行状态,旨在预防内涝灾害,优化水资源管理,保障城市安全运行,促进可持续…

零基础如何入门网络安全?网络安全难吗?

零基础如何入门网络安全 我经常会看到这一类的问题: 学习XXX知识没效果;学习XXX技能没方向;学习XXX没办法入门; 给大家一个忠告,如果你完全没有基础的话,前期最好不要盲目去找资料学习,因为大…

windows系统如何走后面之windows系统隐藏账户

系统隐藏账户是一种最为简单有效的权限维持方式,其做法就是让攻击者创建一个新的具有管理员权限的隐藏账户,因为是隐藏账户,所以防守方是无法通过控制面板或命令行看到这个账户的。 自然我们需要一些前提条件,比如说有一个网站&am…

【unity小技巧】获取免费开源的人物模型,并为obj fbx人物模型绑定骨骼、动画——mixamo的使用介绍

文章目录 前言地址上传自己的3D角色下载单动画下载动作包角色模型导入Unity动画导入unity设置动画骨骼动画骨骼不配的问题参考完结 前言 其实前面我已经推荐了几种获取人物模型的方法: 1、【unity小技巧】下载原神模型,在Blender中PMX模型转FBX模型&…

【GitLab】使用 Docker engine安装 GitLab 2: gitlab-ce:17.3.0-ce.0 拉取

ce版本必须配置代理。 极狐版本可以直接pull 社区版GitLab不支持Alibaba Cloud Linux 3,本操作以Ubuntu/Debian系统为例进行说明,其他操作系统安装说明,请参见安装社区版GitLab。 docker 环境重启 sudo systemctl daemon-reload sudo systemctl restart docker脚本安装 安裝…

一文带你打通WSL下的SSH连接

写在文章开头 Windows下Linux子系统即WSL已经成为笔者调试Linux程序的常用方式,默认情况下WSL是没有安装SSH服务的,所以对于常见的SSH客户端我们无法做到连接管理调试(除了笔者最爱的Mobaxterm),所以笔者专门以此文章来分享一下笔者WSL配置S…

GIF压缩专题:gif压缩大小但不改变画质,应该如何操作?

GIF(Graphics Interchange Format/图形互换格式)是一种网络上广泛使用的图像文件格式,特别适用于包含透明度和动画的图像。然而,随着GIF文件内容的丰富、复杂度、高分辨率等因素增加,GIF文件大小也随之增长&#xff0c…

Self-Attention流程的代码实现【python】

文章目录 1、知识回顾2、Self-attetion实现步骤3、准备输入4、初始化参数5、获取Q,K,V6、计算attention scores7、计算softmax8、给values乘上scores9、完整代码10、总结 🍃作者介绍:双非本科大四网络工程专业在读,阿里云专家博主&#xff0c…

OOP篇(Java - 抽象类、类、对象、构造器、接口、内部类、 代码块、枚举)(doing)

目录 一、抽象类 1. 简介 2. 什么时候定义抽象类? 3. 什么是抽象方法? 4. 抽象类的作用是什么? 5. 继承抽象类需要做什么? 6. 抽象类为什么不能创建对象?自己干什么, 创建对象毫无意义 7. final和abstract是什…

【备战蓝桥杯青少组】第三天 放苹果

题 OpenJudge - 666:放苹果 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。 输入 第一行…

Linux驱动入门实验班——DHT11、DS18B20模块驱动(附百问网视频链接)

目录 前言 一、DHT11模块 1.通信协议 2.数据格式 3.编程思路 ①入口函数 ②实现read函数 ③编写中断处理函数 ④***编写数据解析函数 ⑤应用程序 二、DS18B20模块 1. 通信时序 ① 初始化时序 ② 写时序 ③ 读时序 2. 常用命令 3. 编程思路 1.启动温度转换 2…

Dragonfly S 5MP工业相机量产 机器视觉应用的新选择

近日,51camera的合作厂商Teledyne FLIR IIS宣布Dragonfly️ S USB 5MP模块化、紧凑型相机现已全面投产,Dragonfly S 5MP是新Dragonfly S系列中首款迈入量产阶段的相机。 作为机器视觉应用领域的入门级产品,Dragonfly S不仅简化了成像系统的快…

实战Kubernetes之快速部署 K8s 集群 v1.28.0

文章目录 一、前言二、主机准备三、系统配置3.1. 关闭防火墙及相关配置3.2. 修改主机名3.3. 主机名DNS解析3.4. 时间同步3.5. 配置网络3.6. 重启服务器 四、安装软件4.1. 安装 Docker4.2. 安装 cri-dockerd4.3. 添加国内YUM源4.4. 安装 kubeadm、kubelet 和 kubectl 五、Master…

docker部署MySQL5.7.43并使用python脚本插入数据——实施案例

目录 一、配置docker环境 1. 阿里云镜像站配置docker环境 1. 安装必要的一些系统工具 ​编辑 2. 添加软件源信息 ​编辑 3. 修改 Docker 的 YUM 仓库配置文件,将 Docker 官方仓库的地址替换为阿里云的镜像源,以提高下载速度。 4. 更新并安装Dock…

【Qt】Qt窗口 | QDockWidget 浮动窗口

文章目录 一. 浮动窗口二. 代码创建&使用浮动窗口1. 创建浮动窗口2. 设置可停靠位置3. 添加控件 一. 浮动窗口 浮动窗口(也称为“停靠窗口”或“工具窗口”),是一个可以在主窗口内或主窗口外部悬浮的窗口。它通常用于显示工具栏、面板或其他附加信息。浮动窗口…

AScript 的UI asui模板的导入

两种方案: 第一种直接在web端,右击UI文件夹 第二种在pycharm,也是右击UI文件夹 调用UI,在init类中直接调用即可

Jupyter安装指南:最简便最详细的步骤

一.介绍 JupyterNotebook 是一个款以网页为基础的交互计算环境,可以创建Jupyter的文档,支持多种语言,包括Python, Julia, R等等。一般来说,如果是使用R语言的话,使用Rstudio居多,使用Python的话&#xff0…

高防服务器租用多少钱

高防服务器租用的具体价格受多种因素影响。通常情况下,高防服务器的租用费用可能从数百元到数万元不等,具体取决于服务提供商、服务器配置、防护级别等因素。下面将详细探讨决定高防服务器租用价格的几个主要因素,rak小编为您整理发布高防服务…