javascript - d3.js 强制布局具有一些固定节点(在网格中)

标签 javascript d3.js force-layout

我正在使用 d3 和强制布局做一个项目 我有大约 50 个节点,我希望其中 10 个处于固定位置。 我知道如何修复位置并设置坐标,但我在计算其位置时遇到问题。

我想要的是将固定节点放置在以 Canvas 中心为中心的二维网格中。因此,如果只有一个固定节点,则将其放置在 Canvas 的中心,如果有四个节点,则应将它们均匀地放置在中心周围。

我需要在项目的其余部分使用强制布局,因此使用 d3-grid 之类的东西不是一个选项。 我查遍了网络,但没有发现任何有用的东西。

有什么帮助吗?

最佳答案

这显然不是 d3 相关的问题。您需要一个二维定位算法来设置固定节点的默认位置。

如果您有几个节点,并且只有一个圆,那么您可以通过应用简单的三 Angular 学来计算坐标。例如当 0,0 是圆心,r 是圆半径时,那么你可以将圆平均划分,然后将第一个节点旋转到你的位置。最喜欢的位置:

  • 通过 1 个节点
    • x1 = 0,
      y1 = 0
  • 通过 2 个节点
    • x1 = r,
      y1 = 0
    • x2 = r cos(0° + 360°/2) = r,
      y2 = r sin(0° + 360°/2) = 0
  • 通过 3 个节点
    • x1 = 0,
      y1 = r
    • x2 = r cos(90° + 360°/3) = -r cos30° = -0.866r,
      y2 = r sin(90° + 360°/3) = -r sin30° = -0.5r
    • x3 = r cos(90° + 360°2/3) = r cos30° = 0.866r,
      y3 = r sin(90° + 360°2/3) = -r sin30°= -0.5r
  • 由 4 个节点组成
    • x1 = r cos45° = 0.707r,
      y1 = r sin45° = 0.707r
    • x2 = r cos(45° + 360°/4) = -r sin45° = -0.707r,
      y2 = r sin(45° + 360°/4) = r cos45° = 0.707r
    • x3 = r cos(45° + 360°2/4) = -0.707r,
      y3 = r sin(45° + 360°2/4) = -0.707r
    • x4 = r cos(45° + 360°3/4) = 0.707r,
      y4 = r sin(45° + 360°3/4) = -0.707r

等等...另一种计算坐标的方法是使用 rotation matrix .

figure 1

图 1 - 将圆均匀地划分为 2 个(绿色)、3 个(黄色)和 4 个(红色)节点

节点数超过 4 时,您可以使用网格:

figure 2

图 2 - 带有图 1 中的圆圈的网格

还有其他几种方法,例如您可以使用任何类型的 2d latticevoronoi而不是 grid 。您只需复制 d3 网格和 voronoi 布局的定位部分的代码即可。另一种选择是根据节点数等以增加的半径继续划分圆...

off:我认为扩展部队布局太难了。我在应用自定义力时遇到了很多问题,所以我决定编写我的自定义布局...:S 拥有一组适用的力会更好,这样人们就可以更轻松地构建自定义力布局。我想我会就此创建一个问题...

关于javascript - d3.js 强制布局具有一些固定节点(在网格中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25094594/

相关文章:

javascript - Three.js - 创建带有纹理的平面圆..?

javascript - `multiple` 中包含 `bootstrap-select` 的表单提交的值

svg - D3 : Select and alter external SVG?

javascript - 如何限制D3条形图中的最大宽度

svg - 如何使用现有 SVG 元素作为节点的 D3 强制布局

javascript - 服务 worker 获取事件监听器 : what does it catch?

javascript - 将 JSON 转换为数组以在 C3 中绘制时间序列的更好方法?

javascript - 使用 initMouseEvent d3/cola 编程节点拖动

d3.js - 在有向力图中以交互方式固定节点

javascript - jQuery 解析字符串中的 unicode 字符