首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

D3:如何在一组力布局节点上绘制多个凸壳?

D3是一种流行的JavaScript库,用于创建动态、交互式的数据可视化。在D3中,可以使用力布局(force layout)来模拟力的作用,从而实现节点的排列和布局。凸壳(convex hull)是一种凸多边形,可以将一组节点包围在内部。

要在一组力布局节点上绘制多个凸壳,可以按照以下步骤进行操作:

  1. 创建一个力布局对象,并设置节点的初始位置和其他属性。可以使用D3的forceSimulation()函数来创建力布局对象,并使用nodes()方法设置节点的初始位置和其他属性。
  2. 定义力的作用方式。可以使用force()方法来定义力的作用方式,例如引力、斥力等。可以根据需要设置力的大小和方向。
  3. 更新力布局。使用forceSimulation()对象的tick()方法来更新力布局,使节点根据力的作用进行移动。
  4. 创建凸壳生成器。可以使用D3的d3.polygonHull()函数来创建凸壳生成器。
  5. 为每个凸壳生成器绑定节点数据。使用D3的selectAll()data()方法来为每个凸壳生成器绑定节点数据。
  6. 生成凸壳路径。使用凸壳生成器的polygon()方法来生成凸壳的路径。
  7. 绘制凸壳。使用D3的append()attr()方法来创建SVG元素,并设置其属性,例如填充颜色、边框样式等。

以下是一个示例代码,演示如何在一组力布局节点上绘制多个凸壳:

代码语言:txt
复制
// 创建力布局对象
var simulation = d3.forceSimulation()
  .nodes(nodes)
  .force("charge", d3.forceManyBody().strength(-20))
  .force("center", d3.forceCenter(width / 2, height / 2))
  .on("tick", ticked);

// 更新力布局
function ticked() {
  // 更新节点位置
  node.attr("cx", function(d) { return d.x; })
      .attr("cy", function(d) { return d.y; });

  // 更新凸壳路径
  hullPaths.attr("d", function(d) { return "M" + d.join("L") + "Z"; });
}

// 创建凸壳生成器
var hull = d3.polygonHull();

// 为每个凸壳生成器绑定节点数据
var hullPaths = svg.selectAll(".hull")
  .data(groups)
  .enter().append("path")
    .attr("class", "hull");

// 生成凸壳路径
hullPaths.each(function(d) {
  hull.data(d)
    .sort(function(a, b) { return a[0] - b[0]; })
    .sort(function(a, b) { return a[1] - b[1]; });
  d3.select(this).datum(hull).attr("d", function(d) { return "M" + d.join("L") + "Z"; });
});

// 绘制凸壳
hullPaths.attr("fill", "none")
  .attr("stroke", "steelblue")
  .attr("stroke-width", 1);

这是一个简单的示例,演示了如何在一组力布局节点上绘制多个凸壳。根据实际需求,可以根据节点的属性来设置凸壳的样式、填充颜色等。

对于腾讯云相关产品和产品介绍链接地址,可以根据具体需求和场景来选择适合的产品。腾讯云提供了丰富的云计算服务,例如云服务器、云数据库、云存储等,可以根据实际需求选择相应的产品。具体的产品介绍和链接地址可以参考腾讯云官方网站。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

数据可视化工具d3_前端3d可视化

近年来,可视化越来越流行,许多报刊杂志、门户网站、新闻媒体都大量使用可视化技术,使得复杂的数据和文字变得十分容易理解,有一句谚语“一张图片价值于一千个字”。D3 正是数据可视化工具中的佼佼者,基于 JavaScript 开发,项目托管于 GitHub。从 D3诞生以来,不断受到好评,在 GitHub 上的项目仓库排行榜也不断上升。可视化越来越流行,许多报刊杂志、门户网站、新闻、媒体都大量使用可视化技术,使得复杂的数据和文字变得十分容易理解,有一句谚语“一张图片价值于一千个字”,的确是名副其实。各种数据可视化工具也如井喷式地发展,D3 正是其中的佼佼者。D3 的全称是(Data-Driven Documents),顾名思义可以知道是一个被数据驱动的文档。听名字有点抽象,说简单一点,其实就是一个 JavaScript 的函数库,主要是用来做数据可视化。

04

谷歌自锤Attention is all you need:纯注意力并没那么有用,Transformer组件很重要

机器之心报道 编辑:魔王 基于注意力的架构为什么那么有效?近期谷歌等一项研究认为注意力并没有那么有用,它会导致秩崩溃,而网络中的另两个组件则发挥了重要作用:「跳过连接」有效缓解秩崩溃,「多层感知器」能够降低收敛速度。此外,该研究还提出了一种理解自注意力网络的新方式——路径分解。 基于注意力的架构在机器学习领域已经非常普遍,但人们对其有效性原因的理解仍然有限。 最近,来自谷歌和瑞士洛桑联邦理工学院(EPFL)的研究者提出了一种理解自注意力网络的新方式:将网络输出分解为一组较小的项,每个项包括一系列注意力头的跨

01

OpenOrd-面向大规模图布局的开源算法-研读

我们创作了一个用于绘制大型无向图的开源工具箱。 这个工具箱是基于一个以前实现的闭源算法,即VxOrd。 我们的工具箱,我们称之为OpenOrd,通过合并切割incorporating edge-cutting、多级方法multi-level approach、平均链接聚类average-link clustering和并行实现parallel implementation,将VxOrd的功能扩展到大型图形布局。 在每个层次上,顶点都使用力导向布局和平均链接聚类来分组。 分组的顶点会被重新绘制,上述过程不断重复。 When a suitable drawing of the coarsened graph is obtained, the algorithm is reversed to obtain a drawing of the original graph. 在得到粗化图coarsened graph的一幅合适的图时,该算法得到了相反的结果,得到了原始图的图像。 这种方法导致了包含本地和全局结构的大图形的布局。 本文给出了该算法的详细描述。 给出了使用超过600 K个节点的数据集的例子。 代码可在www.cs.sandia.gov/smartin上获得。

01
领券