我很难理解sigmas.js,它是如何工作的。有兴趣了解所见证的科学背后。
读取库我理解它在画布上渲染顶点和边缘。
它有一个很棒的代码,可以根据图形的顶点数和边数来重新调整坐标,以显示所有节点。
在applyview方法https://github.com/jacomyal/sigma.js/blob/master/src/classes/sigma.classes.camera.js#L89
中计算视图的数学是什么应用视图的工作原理:
sigma.classes.camera.prototype.applyView = function(read, write, options) {
options = options || {};
write = write !== undefined ? write : this.prefix;
read = read !== undefined ? read : this.readPrefix;
var nodes = options.nodes || this.graph.nodes(),
edges = options.edges || this.graph.edges();
var i,
l,
node,
relCos = Math.cos(this.angle) / this.ratio,
relSin = Math.sin(this.angle) / this.ratio,
nodeRatio = Math.pow(this.ratio, this.settings('nodesPowRatio')),
edgeRatio = Math.pow(this.ratio, this.settings('edgesPowRatio')),
xOffset = (options.width || 0) / 2 - this.x * relCos - this.y * relSin,
yOffset = (options.height || 0) / 2 - this.y * relCos + this.x * relSin;
for (i = 0, l = nodes.length; i < l; i++) {
node = nodes[i];
node[write + 'x'] =
(node[read + 'x'] || 0) * relCos +
(node[read + 'y'] || 0) * relSin +
xOffset;
node[write + 'y'] =
(node[read + 'y'] || 0) * relCos -
(node[read + 'x'] || 0) * relSin +
yOffset;
node[write + 'size'] =
(node[read + 'size'] || 0) /
nodeRatio;
}
for (i = 0, l = edges.length; i < l; i++) {
edges[i][write + 'size'] =
(edges[i][read + 'size'] || 0) /
edgeRatio;
}
return this;
};