49 lines
1.8 KiB
JavaScript
49 lines
1.8 KiB
JavaScript
var tape = require("tape"),
|
|
force = require("../");
|
|
|
|
require("./nodeEqual.js");
|
|
|
|
tape("forceCollide collides nodes", function(test) {
|
|
const collide = force.forceCollide(1);
|
|
const f = force.forceSimulation().force("collide", collide).stop();
|
|
const a = {}, b = {}, c = {};
|
|
f.nodes([a, b, c]);
|
|
f.tick(10);
|
|
test.nodeEqual(a, { index: 0, x: 7.0710678118654755, y: 0, vy: 0, vx: 0 });
|
|
test.nodeEqual(b, { index: 1, x: -9.03088751750192, y: 8.27303273571596, vy: 0, vx: 0 });
|
|
test.nodeEqual(c, { index: 2, x: 1.3823220809823638, y: -15.750847141167634, vy: 0, vx: 0 });
|
|
collide.radius(100);
|
|
f.tick(10);
|
|
test.nodeEqual(a, { index: 0, x: 174.08616723117228, y: 66.51743051995625, vy: 0.26976816231064354, vx: 0.677346615710878 });
|
|
test.nodeEqual(b, { index: 1, x: -139.73606544743998, y: 95.69860503079263, vy: 0.3545632444404687, vx: -0.5300880593105067 });
|
|
test.nodeEqual(c, { index: 2, x: -34.9275994083864, y: -169.69384995620052, vy: -0.6243314067511122, vx: -0.1472585564003713 });
|
|
test.end();
|
|
});
|
|
|
|
|
|
tape("forceCollide respects fixed positions", function(test) {
|
|
const collide = force.forceCollide(1);
|
|
const f = force.forceSimulation().force("collide", collide).stop();
|
|
const a = { fx: 0, fy:0 }, b = {}, c = {};
|
|
f.nodes([a, b, c]);
|
|
f.tick(10);
|
|
test.nodeEqual(a, { fx: 0, fy: 0, index: 0, x: 0, y: 0, vy: 0, vx: 0 });
|
|
collide.radius(100);
|
|
f.tick(10);
|
|
test.nodeEqual(a, { fx: 0, fy: 0, index: 0, x: 0, y: 0, vy: 0, vx: 0 });
|
|
test.end();
|
|
});
|
|
|
|
tape("forceCollide jiggles equal positions", function(test) {
|
|
const collide = force.forceCollide(1);
|
|
const f = force.forceSimulation().force("collide", collide).stop();
|
|
const a = { x: 0, y:0 }, b = { x:0, y: 0 };
|
|
f.nodes([a, b]);
|
|
f.tick();
|
|
test.assert(a.x !== b.x);
|
|
test.assert(a.y !== b.y);
|
|
test.equal(a.vx, -b.vx);
|
|
test.equal(a.vy, -b.vy);
|
|
test.end();
|
|
});
|