5

我需要做一些图形布局绘图,并且一直在考虑使用这里实现并讨论的 Spring 布局算法之类的东西

但是我的节点都有一个宽度和高度(是一个实体图)。谁能解释我如何将其纳入方程式?

4

2 回答 2

0

Graph JavaScript 框架为起点,您可以执行以下操作。我假设该类Node已通过属性widthheight. 然后,在函数layoutRepulsive中,必须更改计算节点距离的表达式以尊重这些大小:

var dx = Math.max(0, Math.abs(node2.layoutPosX - node1.layoutPosX) - 0.5*(node2.width+node1.width));
var dy = Math.max(0, Math.abs(node2.layoutPosY - node1.layoutPosY) - 0.5*(node2.height+node1.height));

maximum 函数强制将 0 作为距离的最低可能值,即使它们的边界框重叠。

于 2013-06-28T06:16:38.977 回答
0

查看您提供的第一个链接,第 240 行:

var repulsiveForce = this.k * this.k / d;

代表排斥势(那是物理学)。该数字越大,几何状态的可能性就越小。d是两个节点之间的距离,this.k是弹簧刚度。这种潜力对于距离变得无限d = 0

你想把这个潜力翻译成一定的长度(你的盒子的大小),所以dd - length. 这意味着,排斥力在远处变得无限length。仍然存在问题,排斥力会随着距离减小,小于length,这必须由一些条件覆盖:

if (d + 0.0001 < length) repulsiveForce = bigbigNumber;

我补充0.0001说,排斥力永远不会变得无限,而只会变得很大,因为计算机不能很好地处理无限。

于 2014-02-24T00:32:00.900 回答