Try to preserve pagerank left-to-right flow
This commit is contained in:
@@ -41,6 +41,7 @@ class GraphNode {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: move affinity to LayoutNode
|
||||
setAffinity(nodes) {
|
||||
const INF = 999999;
|
||||
|
||||
@@ -63,6 +64,11 @@ class GraphNode {
|
||||
if (node.label == this.label) {
|
||||
this.addAffinity(node, (d, v) => v[0] == 0 ? 200 : 500);
|
||||
}
|
||||
|
||||
// Try to preserve pagerank left-to-right flow from initial positions
|
||||
let rankSign = Math.sign(node.pageRank - this.pageRank);
|
||||
this.addAffinity(node, (d, v) =>
|
||||
[Math.sign(v[0]) == rankSign ? 0 : -500, 0]);
|
||||
}
|
||||
|
||||
for (let to of this.links) {
|
||||
|
||||
@@ -36,10 +36,17 @@ class LayoutNode {
|
||||
// Avoid calling sqrt(), since the results are used relatively
|
||||
let distanceSquared = vec[0] * vec[0] + vec[1] * vec[1];
|
||||
let weight = aff.distanceToWeight(distanceSquared, vec);
|
||||
for (let i of [0, 1]) {
|
||||
this.vec[i] += (weight * vec[i]) / vecsum;
|
||||
if (weight instanceof Array) {
|
||||
for (let i of [0, 1]) {
|
||||
this.vec[i] += weight[i];
|
||||
this.tension += Math.abs(weight[i]);
|
||||
}
|
||||
} else {
|
||||
for (let i of [0, 1]) {
|
||||
this.vec[i] += (weight * vec[i]) / vecsum;
|
||||
}
|
||||
this.tension += Math.abs(weight);
|
||||
}
|
||||
this.tension += Math.abs(weight);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user