解释 d3 定心力
interpreting the d3 centering force
D3的力模拟定心力使用以下代码 其中:
n
等于节点数,
x
等于居中x值
y
等于居中y值
sx
和 sy
为 0.
首先力是这样做的:
for (i = 0; i < n; ++i) {
node = nodes[i], sx += node.x, sy += node.y;
}
然后:
for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {
node = nodes[i], node.x -= sx, node.y -= sy;
}
这是怎样的定心力?
第一部分和第二部分分别做什么?
D3的居中力不会将节点推到中心,它移动节点使它们的重心(更接近)指定位置(所有节点具有相等的大量的)。换句话说,它不会对任何单个节点施加引力。相反,如果所有节点都位于指定中心的右侧,则它们均等平移,以便实际重心接近指定重心。通过这种方式,它不会将任何单个节点拉向中心,而是将所有节点均等地拉向指定的中心(即,它将图形作为单个实体拉向中心)。
第一部分总结了节点的x和y值的定位为sx
和sy
(我的猜测是s代表sum)。第二部分使用这些总数找到平均位置(sx/n - x
,其中 n 等于节点数,x 是中心 x 值)并根据效果强度对每个节点应用相同的校正。
如果您希望将节点拉近中心点,此力将无济于事。相反,您可以使用 d3.forceX 和 d3.forceY,这将:
The x- and y-positioning forces push nodes towards a desired position along the given dimension with a configurable strength. (docs)
这里的 x 和 y 值将分别吸引节点到指定的 x 值、y 值或坐标,具体取决于您使用 d3.forceX 和 d3.forceY 中的一个或两个。
D3的力模拟定心力使用以下代码 其中:
n
等于节点数,x
等于居中x值y
等于居中y值sx
和sy
为 0.
首先力是这样做的:
for (i = 0; i < n; ++i) {
node = nodes[i], sx += node.x, sy += node.y;
}
然后:
for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {
node = nodes[i], node.x -= sx, node.y -= sy;
}
这是怎样的定心力?
第一部分和第二部分分别做什么?
D3的居中力不会将节点推到中心,它移动节点使它们的重心(更接近)指定位置(所有节点具有相等的大量的)。换句话说,它不会对任何单个节点施加引力。相反,如果所有节点都位于指定中心的右侧,则它们均等平移,以便实际重心接近指定重心。通过这种方式,它不会将任何单个节点拉向中心,而是将所有节点均等地拉向指定的中心(即,它将图形作为单个实体拉向中心)。
第一部分总结了节点的x和y值的定位为sx
和sy
(我的猜测是s代表sum)。第二部分使用这些总数找到平均位置(sx/n - x
,其中 n 等于节点数,x 是中心 x 值)并根据效果强度对每个节点应用相同的校正。
如果您希望将节点拉近中心点,此力将无济于事。相反,您可以使用 d3.forceX 和 d3.forceY,这将:
The x- and y-positioning forces push nodes towards a desired position along the given dimension with a configurable strength. (docs)
这里的 x 和 y 值将分别吸引节点到指定的 x 值、y 值或坐标,具体取决于您使用 d3.forceX 和 d3.forceY 中的一个或两个。