diff --git a/index.js b/index.js index 83f6f66..4c7da95 100644 --- a/index.js +++ b/index.js @@ -18,3 +18,6 @@ export { default as forceLinkTweaked} export { default as hybridSimulation} from "./src/hybridSimulation"; + +export { getStress as calculateStress } + from "./src/stress"; diff --git a/src/stress.js b/src/stress.js index 40e42a5..3739c10 100644 --- a/src/stress.js +++ b/src/stress.js @@ -1,19 +1,20 @@ /** - * Calculates the stress. Basically, it computes the difference between - * high dimensional distance and real distance. The lower the stress is, - * the better layout. + * 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 totalDiffSq = 0, totalHighDistSq = 0; - for (let j = 0; j < nodes.length; j++) { + let sumDiffSq = 0 + let sumHighDistSq = 0; + for (let j = nodes.length-1; j >= 1; j++) { for (let i = 0; i < j; i++) { let source = nodes[i], target = nodes[j]; let lowDDist = Math.hypot(target.x - source.x, target.y - source.y); let highDDist = distance(source, target); - totalDiffSq += Math.pow(highDDist - lowDDist, 2); - totalLowDDistSq += lowDDist * lowDDist; + sumDiffSq += Math.pow(highDDist - lowDDist, 2); + sumLowDDistSq += lowDDist * lowDDist; } } - return Math.sqrt(totalDiffSq / totalLowDDistSq); + return Math.sqrt(sumDiffSq / sumLowDDistSq); }