Files
d3-spring-model/src/stress.js
2018-03-22 16:22:43 +00:00

22 lines
750 B
JavaScript

/**
* Calculates the stress of a system by comparing the difference between the
* high dimensional distance and 2D distance. The lower the stress contributes
* to the better layout.
* @return {number} - stress of the layout.
*/
export function getStress (nodes, distance) {
let sumDiffSq = 0;
let sumLowDDistSq = 0;
for (let j = nodes.length - 1; j >= 1; j--) {
for (let i = 0; i < j; i++) {
let source = nodes[i];
let target = nodes[j];
let lowDDist = Math.hypot(target.x - source.x, target.y - source.y);
let highDDist = distance(source, target);
sumDiffSq += Math.pow(highDDist - lowDDist, 2);
sumLowDDistSq += lowDDist * lowDDist;
}
}
return Math.sqrt(sumDiffSq / sumLowDDistSq);
}