This commit is contained in:
Mike Bostock 2013-08-22 16:49:57 -07:00
Родитель 14b6231e45
Коммит cc74ee022b
3 изменённых файлов: 28 добавлений и 27 удалений

24
d3.js поставляемый
Просмотреть файл

@ -5579,21 +5579,21 @@ d3 = function() {
return chord;
};
d3.layout.force = function() {
var force = {}, event = d3.dispatch("start", "tick", "end"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance = d3_layout_forceChargeDistance, gravity = .1, theta = .8, nodes = [], links = [], distances, strengths, charges;
var force = {}, event = d3.dispatch("start", "tick", "end"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .8 * .8, nodes = [], links = [], distances, strengths, charges;
function repulse(node) {
return function(quad, x1, _, x2) {
if (quad.point !== node) {
var dx = quad.cx - node.x, dy = quad.cy - node.y, dn = Math.sqrt(dx * dx + dy * dy);
if ((x2 - x1) / dn < theta) {
if (dn < chargeDistance) {
var k = quad.charge / dn / dn;
var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy;
if (dw * dw / theta2 < dn) {
if (dn < chargeDistance2) {
var k = quad.charge / dn;
node.px -= dx * k;
node.py -= dy * k;
}
return true;
}
if (quad.point && dn && dn < chargeDistance) {
var k = quad.pointCharge / dn / dn;
if (quad.point && dn && dn < chargeDistance2) {
var k = quad.pointCharge / dn;
node.px -= dx * k;
node.py -= dy * k;
}
@ -5698,8 +5698,8 @@ d3 = function() {
return force;
};
force.chargeDistance = function(x) {
if (!arguments.length) return chargeDistance;
chargeDistance = +x;
if (!arguments.length) return Math.sqrt(chargeDistance2);
chargeDistance2 = x * x;
return force;
};
force.gravity = function(x) {
@ -5708,8 +5708,8 @@ d3 = function() {
return force;
};
force.theta = function(x) {
if (!arguments.length) return theta;
theta = +x;
if (!arguments.length) return Math.sqrt(theta2);
theta2 = x * x;
return force;
};
force.alpha = function(x) {
@ -5830,7 +5830,7 @@ d3 = function() {
quad.cx = cx / quad.charge;
quad.cy = cy / quad.charge;
}
var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance = Infinity;
var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity;
d3.layout.hierarchy = function() {
var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;
function recurse(node, depth, nodes) {

4
d3.min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -18,9 +18,9 @@ d3.layout.force = function() {
linkDistance = d3_layout_forceLinkDistance,
linkStrength = d3_layout_forceLinkStrength,
charge = -30,
chargeDistance = d3_layout_forceChargeDistance,
chargeDistance2 = d3_layout_forceChargeDistance2,
gravity = .1,
theta = .8,
theta2 = .64,
nodes = [],
links = [],
distances,
@ -32,20 +32,21 @@ d3.layout.force = function() {
if (quad.point !== node) {
var dx = quad.cx - node.x,
dy = quad.cy - node.y,
dn = Math.sqrt(dx * dx + dy * dy);
dw = x2 - x1,
dn = dx * dx + dy * dy;
/* Barnes-Hut criterion. */
if ((x2 - x1) / dn < theta) {
if (dn < chargeDistance) {
var k = quad.charge / dn / dn;
if (dw * dw / theta2 < dn) {
if (dn < chargeDistance2) {
var k = quad.charge / dn;
node.px -= dx * k;
node.py -= dy * k;
}
return true;
}
if (quad.point && dn && dn < chargeDistance) {
var k = quad.pointCharge / dn / dn;
if (quad.point && dn && dn < chargeDistance2) {
var k = quad.pointCharge / dn;
node.px -= dx * k;
node.py -= dy * k;
}
@ -173,8 +174,8 @@ d3.layout.force = function() {
};
force.chargeDistance = function(x) {
if (!arguments.length) return chargeDistance;
chargeDistance = +x;
if (!arguments.length) return Math.sqrt(chargeDistance2);
chargeDistance2 = x * x;
return force;
};
@ -185,8 +186,8 @@ d3.layout.force = function() {
};
force.theta = function(x) {
if (!arguments.length) return theta;
theta = +x;
if (!arguments.length) return Math.sqrt(theta2);
theta2 = x * x;
return force;
};
@ -366,4 +367,4 @@ function d3_layout_forceAccumulate(quad, alpha, charges) {
var d3_layout_forceLinkDistance = 20,
d3_layout_forceLinkStrength = 1,
d3_layout_forceChargeDistance = Infinity;
d3_layout_forceChargeDistance2 = Infinity;