用Manim实现Graf的数学动画——【DiGraph】的用法和实际操作

用Manim实现Graf的数学动画——【DiGraph】的详细

        这是表示有向图的类。在有向图中,边有方向,意味着边是从一个顶点指向另一个顶点的。

图【Graph】两层含义:

1.称为顶点的连接点图。


2. 绘制的值,通常显示为具有水平轴和垂直轴的线,如下所示:

 接下来我们介绍一下DiGraph  ,这是DiGraph函数的构造函数:

DiGraph(vertices, edges, labels=False, label_fill_color=ManimColor('#000000'),layout='spring', layout_scale=2, layout_config=None, vertex_type=<class 
'manim.mobject.geometry.arc.Dot'>, vertex_config=None, vertex_mobjects=None,edge_type=<class 'manim.mobject.geometry.line.Line'>, partitions=None, 
root_vertex=None, edge_config=None)[source]

DiGraph 是一个用于在 Manim 中创建有向图的数据结构。下面是对该函数及其参数的解释:

参数说明

  1. vertices:
    • 类型: 列表
    • 描述: 有向图中的顶点(节点)集合。每个顶点可以是任意可哈希的对象,通常是字符串或数字。
  2. edges:
    • 类型: 列表
    • 描述: 有向图中的边(连接)集合。每条边由一个元组表示,元组的两个元素分别是起点和终点。例如,(1, 2) 表示从顶点 1 到顶点 2 的一条有向边。
  3. labels:
    • 类型: 布尔值
    • 默认值: False
    • 描述: 是否为顶点添加标签。如果为 True,则将在图中显示顶点的标签。
  4. label_fill_color:
    • 类型: ManimColor
    • 默认值: ManimColor('#000000')
    • 描述: 顶点标签的填充颜色。
  5. layout:
    • 类型: 字符串
    • 默认值: 'spring'
    • 描述: 图形的布局算法。可以选择不同的布局方式,例如 'spring''circular' 等。
  6. layout_scale:
    • 类型: 数字
    • 默认值: 2
    • 描述: 布局的缩放比例,用于调整图形的大小。
  7. layout_config:
    • 类型: 字典
    • 描述: 与布局相关的额外配置参数,允许用户自定义布局的行为。
  8. vertex_type:
    • 类型: 类
    • 默认值: <class 'manim.mobject.geometry.arc.Dot'>
    • 描述: 定义顶点的类型,可以使用自定义的 Manim 对象来替代默认的 Dot。
  9. vertex_config:
    • 类型: 字典
    • 描述: 用于配置顶点的额外属性,如颜色、大小等。
  10. vertex_mobjects:
    • 类型: 列表
    • 描述: 用户可以直接提供顶点的 Manim 对象,而不是让 DiGraph 创建它们。
  11. edge_type:
    • 类型: 类
    • 默认值: <class 'manim.mobject.geometry.line.Line'>
    • 描述: 定义边的类型,可以使用自定义的 Manim 对象来替代默认的 Line。
  12. partitions:
    • 类型: 列表
    • 描述: 用于定义图的分区(如果需要),可以将顶点分组。
  13. root_root_vertex:
    • 类型: 对象
    • 描述: 指定根点,用于一些特定的布局或绘。
  14. edge_config
    • 类型: 字典
    • 描述: 用于配置边的额外属性,如颜色、宽度等。

示例1: 

from manim import *class MovingDiGraph(Scene):def construct(self):vertices = [1, 2, 3, 4,5]edges = [(1, 2), (2, 3), (3, 4), (1, 3), (1, 4),(5,4)]g = DiGraph(vertices, edges,label_fill_color="#ece6e2")self.add(NumberPlane(),g)self.play(g[1].animate.move_to([1, 1, 1]),g[2].animate.move_to([-1, 1, 2]),g[3].animate.move_to([1, -1, -1]),g[4].animate.move_to([-1, -1, 0]),g[5].animate.move_to([0, 3, 0]),)self.wait()

 运行结果:https://download.csdn.net/download/qq_45449625/89587196icon-default.png?t=N7T8https://download.csdn.net/download/qq_45449625/89587196

 示例2:

from manim import *class CustomDiGraph(Scene):def construct(self):vertices = [i for i in range(5)]edges = [(0, 1),(1, 2),(2, 3),(3, 4),(4, 0)]edge_config = {(0,1):{"color": YELLOW ,"tip_config": {"tip_shape": ArrowTriangleTip , "tip_length": 0.1,}},(1,2):{"color": BLUE ,"tip_config": { "tip_length": 0.15,}},(2,3):{"color": PINK ,"tip_config": {"tip_shape": StealthTip , "tip_length": 0.25,}},(3, 4): { "color": RED,"tip_config": {"tip_length": 0.25, "tip_width": 0.25}},(4, 0): { "color": WHITE,"tip_config": {"tip_shape":ArrowSquareTip ,"tip_length": 0.25, "tip_width": 0.25}},}g = DiGraph(vertices,edges,labels=True,layout="circular",edge_config=edge_config,).scale(1.4)self.play(Create(g))self.wait()

 运行结果:https://download.csdn.net/download/qq_45449625/89587231icon-default.png?t=N7T8https://download.csdn.net/download/qq_45449625/89587231

 

 示例3

from manim import *class UndirectedMovingDiGraph(Scene):def construct(self):vertices = [i for i in range(5)]edges = [(0, 1),(1, 2),(3, 2),(3, 4),]edge_config = {"stroke_width": 2,"tip_config": {"tip_length": 0, "tip_width": 0},(3, 4): {"color": RED},}g = DiGraph(vertices,edges,labels=True,layout="circular",edge_config=edge_config,).scale(1.4)self.play(Create(g))self.wait()self.play(g[1].animate.move_to([1, 1, 1]),g[2].animate.move_to([-1, 1, 2]),g[3].animate.move_to([-1.5, -1.5, -1]),g[4].animate.move_to([1, -2, -1]),)self.wait()

 运行结果:https://download.csdn.net/download/qq_45449625/89588613icon-default.png?t=N7T8https://download.csdn.net/download/qq_45449625/89588613

 

 示例4:

from manim import *  
import networkx as nx  class CustomGraph01(Scene):  def construct(self):  # 创建一个空的有向图  graph = self._empty_networkx_graph()  # 添加顶点  vertices = ["A", "B", "C", "D"]  graph.add_nodes_from(vertices)  # 添加边  edges = [("A", "B"), ("B", "C"), ("C", "D"), ("D", "A"), ("A", "C")]  graph.add_edges_from(edges)  # 使用 ManimGraph 创建图形  manim_graph = Graph(  vertices,  edges,  vertex_type=Dot,  edge_type=Line,  vertex_config={"color": BLUE, "fill_opacity": 0.7},  edge_config={"stroke_width": 2, "color": RED},  layout="spring",  layout_scale=2,  labels=True  )  # 将图形添加到场景中  self.play(Create(manim_graph))  self.wait(2)  @staticmethod  def _empty_networkx_graph():  """创建一个空的 NetworkX 图"""  return nx.Graph()

运行结果:https://download.csdn.net/download/qq_45449625/89588667icon-default.png?t=N7T8https://download.csdn.net/download/qq_45449625/89588667 

 参数解释:

  • vertices:一个包含图中所有顶点(节点)的列表或集合。
  • edges:一个包含顶点之间连接的边的列表或集合。
  • labels:一个布尔值,指示是否为顶点显示标签。
  • label_fill_color:指定标签的填充颜色,默认值为 ManimColor('#000000'),即黑色。
  • layout:图形的布局算法,用于在视觉上排列顶点,默认使用 'spring' 布局,它是一种常用的图形布局方法,可以达到美观的效果。
  • layout_scale:布局的缩放因子,可以调整图形的整体大小。
  • layout_config:布局算法的附加配置选项。
  • vertex_type:指定用于图形中顶点的对象类型,默认为 Dot
  • vertex_config:顶点表示的附加配置选项。
  • vertex_mobjects:如果需要自定义顶点图形对象,可以在这里列出这些对象。
  • edge_type:指定用于图形中边的对象类型,默认为 Line
  • partitions:如果图形要进行视觉上的分区(例如,聚类顶点),这个参数将定义这些分区。
  • root_vertex:可能用于指定某个起始点或根顶点,以便于某些图算法(如树遍历)。
  • edge_config:边的表示的附加配置选项。

总结

DiGraph 函数提供了一种灵活的方式来创建和可视化有向图,用户可以通过各种参数自定义图的外观和布局,以满足不同的需求。

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

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

相关文章

昇思25天学习打卡营第2天|基础知识-张量

目录 张量 张量Tensor的介绍 创建张量 张量的属性 张量索引 张量运算 Tensor与NumPy转换 Tensor转换为NumPy NumPy转换为Tensor 稀疏张量 CSRTensor COOTensor 张量 张量Tensor的介绍 张量&#xff08;Tensor&#xff09;是一个可用来表示在一些矢量、标量和其他…

探索 SPL-404 协议标准:NFT 与 DeFi 的融合

在快速发展的数字资产领域中&#xff0c;NFT 协议标准持续演变&#xff0c;改变了我们对数字所有权和互动方式的理解。从 Art 到 Gamefi 等等&#xff0c;NFT 已经演变成数字经济的重要组成部分&#xff0c;吸引了广泛关注。遵循 ERC404 协议&#xff0c;SPL404 概念在 Solana …

掀桌子了!原来是咱们的大屏设计太酷,吓着前端开发老铁了

掀桌子了&#xff01;原来是咱们的大屏设计太酷&#xff0c;吓着前端开发老铁了 艾斯视觉观点认为&#xff1a;在软件开发的世界里&#xff0c;有时候创意和设计的火花会擦得特别亮&#xff0c;以至于让技术实现的伙伴们感到既兴奋又紧张。这不&#xff0c;我们的设计团队刚刚…

for循环计算1~100之间3的倍数的数字之和

你要计算1~100之间的数字先得打印出来1~100之间的数字然后在判断是不是3的倍数然后在打印出数字&#xff0c;代码如下 #include<stdio.h> int main() {int i 0;for (i 1; i < 100; i){if (i % 3 0){printf("%d ", i);}}return 0; }

平面点云三角化边数与点的关系

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 点云三角化定义 原文 说人话&#xff1a; 一个二维平面点集P三角化结果是一个满足以下条件的三角形集合&#xff1a; 1 所有三角形的并集刚好是P的凸包。 2 所有三角…

反向代理和负载均衡

目录 步骤1 代理技术介绍 代理技术常见的类型 正向代理的用途 反向代理的作用 步骤2 反向代理配置 步骤3 负载均衡 1、路由模式&#xff08;推荐&#xff09; 2、桥接模式 3、服务直接返回模式 4、负载均衡算法介绍 1、轮询法 2、随机法 3、最小连接法 步骤4 nginx…

客户在哪儿AI——做真正管用的大客户获客方案

我们的目标是要打造一个真正“管用”的ToB大客户获客方案。以下是两个100%真实的案例&#xff0c;所有数据均为真实经营数据。一个是证明客户在哪儿AI对市场工作的颠覆性提升&#xff0c;另一个是证明客户在哪儿AI对决策层和销售工作的颠覆性提升。 客户在哪儿AI生产的是企业全…

唉~~量化策略越改越差了

最近收到藏经阁群友私信&#xff0c;问能不能在最近发布的轮动策略当中加入持仓时间的限制条件&#xff0c;买入某个ETF后&#xff0c;必须持有够7天才可以卖出。 其目的有二&#xff0c;第一是想减少市场杂音&#xff0c;减少不必要的交易&#xff0c;第二就是如果场外操作的话…

【JavaScript】详解Day.js:轻量级日期处理库的全面指南

文章目录 一、Day.js简介1. 什么是Day.js&#xff1f;2. 安装Day.js 二、Day.js的基本用法1. 创建日期对象2. 格式化日期3. 解析日期字符串4. 操作日期5. 比较日期 三、Day.js的高级功能1. 插件机制2. 国际化支持 四、实际应用案例1. 事件倒计时2. 日历应用 在JavaScript开发中…

Qt背景与环境搭建

目录 ​编辑 一、Qt背景 1.行业岗位介绍 2.什么是Qt 3.Qt的发展史 4.Qt支持的平台 5.Qt的版本和优点 5.1 版本 5.2 优点 6.Qt的应用场景 7.Qt 的成功案例 8.Qt 发展前景 二、环境搭建 1.Qt 的开发工具概述 2.Qt SDK 的下载和安装 2.1 Qt SDK 的下载 ​编辑 2…

Ascend算子开发

Device侧 1. 存储API 1.1 GlobalTensor 1.2 LocalTensor 可获取、设置值、获取大小。页可以通过[]获取 1.3 数据类型 2. Add样例 数据搬入&#xff1a;DataCopy调用计算接口&#xff1a;Add数据搬出&#xff1a;LocalTensor、EnQue、DeQue 2.1 核函数定义 x、y输入&#xff…

『 Linux 』线程概念

文章目录 什么是线程执行流线程与进程的关系页表构造及线程资源分配线程的轻量化线程的特点 什么是线程 线程本质上是进程的一个执行分支,用于处理进程中的代码和数据; 每个线程都可以执行独立不同的代码片段,这意味着在一个进程中可以同时执行多个任务; 同一个进程中的所有线程…

基于微信小程序+SpringBoot+Vue的社区超市管理系统(带1w+文档)

基于微信小程序SpringBootVue的社区超市管理系统(带1w文档) 基于微信小程序SpringBootVue的社区超市管理系统(带1w文档) 为了让商品信息的管理模式进行升级&#xff0c;也为了更好的维护商品信息&#xff0c;社区超市管理系统的开发运用就显得很有必要&#xff0c;因为它不仅可…

全球奈拉滨市场规模预测:未来六年年复合增长率CAGR为1.1%

据恒州诚思研究&#xff0c;2023年全球奈拉滨市场规模大约为3.8亿元&#xff0c;预计未来六年年复合增长率CAGR为1.1%&#xff0c;到2030年市场规模将接近4.2亿元。这一增长反映了奈拉滨在全球医药行业中的重要性及其在未来发展中的潜在机会。随着科学的进一步发展和市场的扩展…

全网最详细Gradio教程系列5——Gradio Client: curl

全网最详细Gradio教程系列5——Gradio Client: curl 前言本篇摘要5. Gradio Client的三种使用方式5.3 Curl查询Gradio Apps5.3.1 安装5.3.2 获取Gradio程序的URL5.3.3 HF_TOKEN和身份认证1. POST/GET示例2. 整合命令&#xff1a;awk和read3. HF_TOKEN4. 身份认证 5.3.4 POST&am…

21 Python常用内置函数——zip()

zip() 函数用来把多个可迭代对象中的元素压缩到一起&#xff0c;返回一个可迭代的 zip 对象&#xff0c;其中每个元素都是包含原来的多个可迭代对象对应位置上元素的元组&#xff0c;最终结果中包含的元素个数取决于所有参数序列或可迭代对象中最短的那个。 可以这样理解这个函…

WPF启动失败报System.Windows.Automation.Peers.AutomationPeer.Initialize()错误解决

问题描述 win10系统上WPF程序启动后就崩溃&#xff0c;通过查看崩溃日志如下&#xff1a; 应用程序: xxx.exe Framework 版本: v4.0.30319 说明: 由于未经处理的异常&#xff0c;进程终止。 异常信息: System.TypeLoadException 在 System.Windows.Automation.Peers.Automatio…

强者具备的三个思维

强者具备的三个思维&#xff0c;看看你占了几条&#xff1f; 一、不看自己需要什么&#xff0c;而是看环境和别人需要什么。满足他们&#xff0c;你就能把事情做成。 二、不追求稳定&#xff0c;而是享受不稳定。稳定的工作和生活&#xff0c;并不意味着你的技能已经娴熟。而…

SpringBoot上传超大文件导致Cannot read more than 2,147,483,647 into a byte array,问题解决办法

问题描述 报错: java.lang.IllegalArgumentException: Cannot read more than 2,147,483,647 into a byte array at org.apache.commons.io.IOUtils.lambda$toByteArray$0(IOUtils.java:2403) ~[commons-io-2.11.0.jar:2.11.0] at org.apache.commons.io.output.Thre…

C++学习日记 | LAB 10 运算符重载与友元函数

资料来源&#xff1a;南科大 于仕琪 C/C Program Design LINK&#xff1a;CPP/week10 at main ShiqiYu/CPP GitHub 一、本节内容 本节首先以一个例子具体演示和回顾操作符重载、友元函数以及重载<<操作符。习题部分则为各种运算符重载以及输入输出重载 1.1 Operator o…