You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.0 KiB
41 lines
1.0 KiB
import constant from "./constant.js";
|
|
|
|
export default function(z) {
|
|
var strength = constant(0.1),
|
|
nodes,
|
|
strengths,
|
|
zz;
|
|
|
|
if (typeof z !== "function") z = constant(z == null ? 0 : +z);
|
|
|
|
function force(alpha) {
|
|
for (var i = 0, n = nodes.length, node; i < n; ++i) {
|
|
node = nodes[i], node.vz += (zz[i] - node.z) * strengths[i] * alpha;
|
|
}
|
|
}
|
|
|
|
function initialize() {
|
|
if (!nodes) return;
|
|
var i, n = nodes.length;
|
|
strengths = new Array(n);
|
|
zz = new Array(n);
|
|
for (i = 0; i < n; ++i) {
|
|
strengths[i] = isNaN(zz[i] = +z(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
|
|
}
|
|
}
|
|
|
|
force.initialize = function(_) {
|
|
nodes = _;
|
|
initialize();
|
|
};
|
|
|
|
force.strength = function(_) {
|
|
return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength;
|
|
};
|
|
|
|
force.z = function(_) {
|
|
return arguments.length ? (z = typeof _ === "function" ? _ : constant(+_), initialize(), force) : z;
|
|
};
|
|
|
|
return force;
|
|
}
|
|
|