Simpler to perform gravity calculations in a custom tick handler.
This commit is contained in:
Jason Davies 2011-07-09 00:24:17 +01:00
Родитель ca8870778a
Коммит 7f8db7fd14
5 изменённых файлов: 14 добавлений и 36 удалений

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

@ -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;

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

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

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

@ -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;