Remove force.gravityCenter.
Simpler to perform gravity calculations in a custom tick handler.
This commit is contained in:
Родитель
ca8870778a
Коммит
7f8db7fd14
12
d3.layout.js
12
d3.layout.js
|
@ -215,7 +215,6 @@ d3.layout.force = function() {
|
|||
linkStrength = d3_layout_forceLinkStrength,
|
||||
charge = -30,
|
||||
gravity = .1,
|
||||
gravityCenter = null,
|
||||
theta = .8,
|
||||
interval,
|
||||
nodes = [],
|
||||
|
@ -283,11 +282,6 @@ d3.layout.force = function() {
|
|||
y = size[1] / 2;
|
||||
i = -1; while (++i < n) {
|
||||
o = nodes[i];
|
||||
if (gravityCenter != null) {
|
||||
var gxy = gravityCenter.call(this, o, i);
|
||||
x = gxy.x;
|
||||
y = gxy.y;
|
||||
}
|
||||
o.x += (x - o.x) * kg;
|
||||
o.y += (y - o.y) * kg;
|
||||
}
|
||||
|
@ -375,12 +369,6 @@ d3.layout.force = function() {
|
|||
return force;
|
||||
};
|
||||
|
||||
force.gravityCenter = function(x) {
|
||||
if (!arguments.length) return gravityCenter;
|
||||
gravityCenter = x == null ? null : d3.functor(x);
|
||||
return force;
|
||||
};
|
||||
|
||||
force.theta = function(x) {
|
||||
if (!arguments.length) return theta;
|
||||
theta = x;
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -13,9 +13,6 @@ var color = d3.scale.linear()
|
|||
var force = d3.layout.force()
|
||||
.charge(0)
|
||||
.gravity(0)
|
||||
.gravityCenter(function(node) {
|
||||
return node.gravity;
|
||||
})
|
||||
.size([960, 500]);
|
||||
|
||||
var svg = d3.select("#chart").append("svg:svg");
|
||||
|
@ -30,7 +27,7 @@ d3.json("../data/us-state-centroids.json", function(states) {
|
|||
x: xy[0],
|
||||
y: xy[1],
|
||||
gravity: {x: xy[0], y: xy[1]},
|
||||
r: Math.sqrt(data[+d.id] * 5000),
|
||||
r: Math.sqrt(data[+d.id] * 2500),
|
||||
value: data[+d.id]
|
||||
};
|
||||
});
|
||||
|
@ -40,9 +37,13 @@ d3.json("../data/us-state-centroids.json", function(states) {
|
|||
.links(links)
|
||||
.start()
|
||||
.on("tick", function(e) {
|
||||
var k = e.alpha;
|
||||
var k = e.alpha * .5,
|
||||
kg = k * .1;
|
||||
nodes.forEach(function(a, i) {
|
||||
nodes.slice(i + 1).forEach(function(b, i) {
|
||||
// Apply gravity forces.
|
||||
a.x += (a.gravity.x - a.x) * kg;
|
||||
a.y += (a.gravity.y - a.y) * kg;
|
||||
nodes.slice(i + 1).forEach(function(b) {
|
||||
// Check for collision
|
||||
var dx = a.x - b.x,
|
||||
dy = a.y - b.y,
|
||||
|
|
|
@ -13,9 +13,6 @@ var color = d3.scale.linear()
|
|||
var force = d3.layout.force()
|
||||
.charge(0)
|
||||
.gravity(0)
|
||||
.gravityCenter(function(node) {
|
||||
return node.gravity;
|
||||
})
|
||||
.size([960, 500]);
|
||||
|
||||
var svg = d3.select("#chart").append("svg:svg")
|
||||
|
@ -44,9 +41,13 @@ d3.json("../data/us-state-centroids.json", function(states) {
|
|||
.links(links)
|
||||
.start()
|
||||
.on("tick", function(e) {
|
||||
var k = e.alpha;
|
||||
var k = e.alpha,
|
||||
kg = k * .02;
|
||||
nodes.forEach(function(a, i) {
|
||||
nodes.slice(i + 1).forEach(function(b, i) {
|
||||
// Apply gravity forces.
|
||||
a.x += (a.gravity.x - a.x) * kg;
|
||||
a.y += (a.gravity.y - a.y) * kg;
|
||||
nodes.slice(i + 1).forEach(function(b) {
|
||||
// Check for collisions.
|
||||
var dx = a.x - b.x,
|
||||
dy = a.y - b.y,
|
||||
|
|
|
@ -9,7 +9,6 @@ d3.layout.force = function() {
|
|||
linkStrength = d3_layout_forceLinkStrength,
|
||||
charge = -30,
|
||||
gravity = .1,
|
||||
gravityCenter = null,
|
||||
theta = .8,
|
||||
interval,
|
||||
nodes = [],
|
||||
|
@ -77,11 +76,6 @@ d3.layout.force = function() {
|
|||
y = size[1] / 2;
|
||||
i = -1; while (++i < n) {
|
||||
o = nodes[i];
|
||||
if (gravityCenter != null) {
|
||||
var gxy = gravityCenter.call(this, o, i);
|
||||
x = gxy.x;
|
||||
y = gxy.y;
|
||||
}
|
||||
o.x += (x - o.x) * kg;
|
||||
o.y += (y - o.y) * kg;
|
||||
}
|
||||
|
@ -169,12 +163,6 @@ d3.layout.force = function() {
|
|||
return force;
|
||||
};
|
||||
|
||||
force.gravityCenter = function(x) {
|
||||
if (!arguments.length) return gravityCenter;
|
||||
gravityCenter = x == null ? null : d3.functor(x);
|
||||
return force;
|
||||
};
|
||||
|
||||
force.theta = function(x) {
|
||||
if (!arguments.length) return theta;
|
||||
theta = x;
|
||||
|
|
Загрузка…
Ссылка в новой задаче