提交 042fce51 编写于 作者: L lang

fix the velocity constraint, add some extra config

上级 d67c94b1
......@@ -71,7 +71,14 @@ define(function(require) {
var temperature;
var k;
//- ----------外部参数
var density;
var coolDown;
var centripetal;
var initializeSize;
var attractiveness;
//- ----------
var stepTime = 1/20;
......@@ -97,7 +104,15 @@ define(function(require) {
var minRadius = self.deepQuery([serie], 'minRadius');
var maxRadius = self.deepQuery([serie], 'maxRadius');
// ----------获取外部参数
attractiveness = self.deepQuery(
[serie], 'attractiveness'
);
density = self.deepQuery([serie], 'density');
initSize = self.deepQuery([serie], 'initSize');
centripetal = self.deepQuery([serie], 'centripetal');
coolDown = self.deepQuery([serie], 'coolDown');
// ----------
categories = self.deepQuery([serie], 'categories');
......@@ -141,9 +156,7 @@ define(function(require) {
linkShapes = [];
var area = viewportWidth * viewportHeight;
var attractiveness = self.deepQuery(
[serie], 'attractiveness'
);
// Formula in 'Graph Drawing by Force-directed Placement'
k = 0.5 / attractiveness
* Math.sqrt( area / nodesRawData.length );
......@@ -208,7 +221,7 @@ define(function(require) {
var r = radius[i];
var random = _randomInSquare(
viewportWidth/2, viewportHeight/2, 300
viewportWidth/2, viewportHeight/2, initSize
);
x = typeof(node.initial) === 'undefined'
? random.x
......@@ -466,7 +479,7 @@ define(function(require) {
var d2 = vec2.lengthSquare(v12);
vec2.normalize(v12, v12);
// 100是可调参数
var forceFactor = d2 / 100;
var forceFactor = d2 / 100 * centripetal;
vec2.scale(v12, v12, forceFactor);
vec2.add(nodeForces[i], nodeForces[i], v12);
......@@ -504,8 +517,8 @@ define(function(require) {
// Damping
vec2.scale(velocity, velocity, temperature);
// 防止速度太大
velocity[0] = Math.min(velocity[0], 100);
velocity[1] = Math.min(velocity[1], 100);
velocity[0] = Math.max(Math.min(velocity[0], 100), -100);
velocity[1] = Math.max(Math.min(velocity[1], 100), -100);
vec2.add(p, p, velocity);
nodeShapes[i].position[0] = p[0];
......@@ -537,7 +550,7 @@ define(function(require) {
zr.refresh();
// Cool Down
temperature *= 0.999;
temperature *= coolDown;
}
var _updating;
......@@ -558,7 +571,7 @@ define(function(require) {
setTimeout(cb, stepTime);
}
}
setTimeout(cb, stepTime);
setTimeout(cb, stepTime * 1000);
}
function refresh() {
......
......@@ -482,6 +482,12 @@ define(function() {
maxRadius : 20,
density : 1.0,
attractiveness : 1.0,
// 初始化的随机大小位置
initSize : 300,
// 向心力因子,越大向心力越大
centripetal : 1,
// 冷却因子
coolDown : 0.99,
// 分类里如果有样式会覆盖节点默认样式
categories : [],
itemStyle: {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册