首页 > 其他分享 >如何让3D力导向图中具有不同属性的子节点连接长度不同?

如何让3D力导向图中具有不同属性的子节点连接长度不同?

时间:2023-07-07 10:32:10浏览次数:45  
标签:const 不同 value 节点 长度 3D 连接 属性

引用

3D力导向图是一种可视化数据结构的方法,它可以帮助我们更好地理解和分析数据。在3D力导向图中,节点之间的连接长度通常是相等的,但是在某些情况下,我们可能希望连接长度不同,以便更好地展示节点之间的关系。本文将介绍如何在3D力导向图中实现具有不同属性的子节点连接长度不同。

示例

首先,我们需要准备数据。假设我们有一个包含不同属性的子节点的数据集,每个节点都有一个属性值。我们可以使用D3.js库来创建3D力导向图,并使用属性值来确定节点之间的连接长度。以下是一个简单的数据集示例:

const data = {
  nodes: [
    { id: 'A', group: 1 },
    { id: 'B', group: 2 },
    { id: 'C', group: 3 },
    { id: 'D', group: 4 },
    { id: 'E', group: 5 }
  ],
  links: [
    { source: 'A', target: 'B', value: 10 },
    { source: 'B', target: 'C', value: 20 },
    { source: 'C', target: 'D', value: 30 },
    { source: 'D', target: 'E', value: 40 }
  ]
};

在上面的数据集中,每个节点都有一个group属性,表示它所属的组。links数组包含每个节点之间的连接,每个连接都有一个value属性,表示连接的长度。

接下来,我们需要使用D3.js库来创建3D力导向图。以下是一个简单的示例代码:

const width = 800;
const height = 600;

const graph = ForceGraph3D()
  .graphData(data)
  .nodeAutoColorBy('group')
  .linkWidth(2)
  .linkDirectionalArrowLength(3)
  .linkDirectionalArrowRelPos(1)
  .linkCurvature(0.25)
  .linkThreeObjectExtend(true)
  .linkThreeObject(link => {
    const sprite = new SpriteText(`${link.value}`);
    sprite.color = 'lightgrey';
    sprite.textHeight = 3;
    return sprite;
  })
  .linkPositionUpdate((sprite, { start, end }) => {
    const middlePos = Object.assign(...['x', 'y', 'z'].map(c => ({
      [c]: start[c] + (end[c] - start[c]) / 2 // calc middle point
    })));
    Object.assign(sprite.position, middlePos);
  })
  .d3Force('charge', -100)
  .d3Force('link', d3.forceLink().id(d => d.id).distance(d => d.value));

const container = document.getElementById('graph-container');
graph(container);

在上面的代码中,我们使用了D3.js库中的forceLink()函数来确定连接的长度。我们将distance属性设置为每个连接的value属性,这样就可以根据属性值来确定连接的长度。此外,我们还使用了linkThreeObject()函数来添加连接的标签,以便更好地展示连接的长度。

最后,我们可以通过更改数据集中节点的属性值来改变连接的长度。例如,我们可以将节点B的属性值从2更改为5,这样连接AB的长度将增加。

总结

在3D力导向图中,我们可以使用D3.js库来确定节点之间的连接长度。通过使用属性值来确定连接的长度,我们可以更好地展示节点之间的关系。此外,我们还可以使用linkThreeObject()函数来添加连接的标签,以便更好地展示连接的长度。

标签:const,不同,value,节点,长度,3D,连接,属性
From: https://blog.51cto.com/u_15718546/6650026

相关文章

  • 3DCAT实时云渲染助力VR虚拟现实迈向成熟
    近年来,虚拟现实(VirtualReality,VR)技术在市场上的应用越来越广泛,虚拟现实已成为一个热门的科技话题。相关数据显示,2019年至2021年,我国虚拟现实市场规模不断扩大,从2019年的282.8亿元增长至2021年的583.9亿元,市场规模实现翻番。预计未来3年将保持快速增长,到2023年将突破1000亿元大......
  • SpringBoot部署打包成jar和war有什么不同?
    引言你是否发现,在springboot项目中,用mvninstall打包成jar形式,然后换一台拥有jdk的机器,就可以直接通过java-jar项目名.jar的方式运行,没有任何问题并且不需要tomcat打包成war放进tomcat运行,发现端口号变成tomcat默认的8080(我在server.port中设置端口8090)项目名称......
  • 使用docker-compose部署mysql单节点
    前提条件:确保服务器都安装了docker以及docker-compose服务......
  • vue3 安装 3d-force-graph
    1.首先创建vue3的项目2.创建好后通过开发工具打开项目并打开命令行,输入指令npminstall 3d-force-graph安装即可3.在使用的页面中引入 3d-force-graph<!--官网的basic案例--><template><!--ref用于在组件中引用当前的DOM元素。--><divref="container"></div><......
  • Live Home 3D Pro Mac家装设计工具
    LiveHome3DPro是一款功能强大的Mac家装设计工具,它提供了丰富的工具和功能,使用户能够轻松创建逼真的室设计。→→↓↓载LiveHome3DPromac版 首先,LiveHome3DPro具有直观易用的界面。无论您是专业的建筑师还是家庭用户,都可以在不需要任何专业技术的情况下,快速创建自......
  • 3D点云实战案例
    推荐免费3D场景建模工具:NSDT场景编辑器CloudCompare是一个三维点云(网格)编辑和处理软件。最初,它被设计用来对稠密的三维点云进行直接比较。它依赖于一种特定的八叉树结构,在进行点云对比这类任务时具有出色的性能。此外,由于大多数点云都是由地面激光扫描仪(例如LMI)采集的,CloudCompar......
  • FreeCAD 3D绘图教程
    推荐:将 NSDT场景编辑器 加入你的3D开发工具链构建现实世界FreeCAD主要用于为现实世界设计对象。您在FreeCAD中所做的一切都使用现实世界的单位,无论是微米,公里,英寸还是英尺,甚至是单位的任意组合。FreeCAD提供了生成,导出和编辑实体,全精度模型的工具,导出它们以进行3D打印或CNC加......
  • Unreal Engine4 GPU崩溃或3D设备丢失的解决方案
    起因:UnrealEngine4在渲染时报错GPU崩溃或3D设备丢失解决办法:regedit 打开注册表在以下2个路径下新建 DWORD(32-bit)Value命名为  TdrDelay,并修改数值为:60(十进制)Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GraphicsDriversComput......
  • LightDB支持从节点转发DML
    LightDB,是一个EnterprisePostgres,恒生电子生产.它在22.1(2022Q1)版引入一个实验性功能,standby(从节点)可接受写数据请求,转发给主节点处理;如果是只读请求,在standby执行.在ligitdb.conf的shared_preload_libraries选项后面添加lt_standby_forward以加载插件,如:sha......
  • 列表转树结构,获取节点到根的路径
    列表转树结构逻辑上呈树结构的数据,诸如菜单,省市区,在数据库中单表存放,Java程序从数据库中读取出来这些数据时,是列表形式。列表转树结构使用双层for循环实现:/***节点组成树形结构,返回森林**@paramlist节点列表*@parampredicate定义树的根......