From 0b0cd6d5454f9182851f40d5c6fc970ef5cec246 Mon Sep 17 00:00:00 2001 From: Pitchaya Boonsarngsuk <2285135b@student.gla.ac.uk> Date: Wed, 31 Jan 2018 16:04:19 +0000 Subject: [PATCH] Interpolation expose ending refinement interations to othre fn --- src/interpolation/interpBruteForce.js | 3 ++- src/interpolation/interpCommon.js | 13 +++++++------ src/interpolation/interpolationPivots.js | 4 ++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/interpolation/interpBruteForce.js b/src/interpolation/interpBruteForce.js index 7f86837..2b7d481 100644 --- a/src/interpolation/interpBruteForce.js +++ b/src/interpolation/interpBruteForce.js @@ -32,6 +32,7 @@ export default function(sampleSet, remainderSet, distanceFn) { if (index !== -1) sampleSubsetDistanceCache[index] = dist; } - placeNearToNearestNeighbour(node, nearestSample, minDist, sampleSubset, sampleSubsetDistanceCache); + + placeNearToNearestNeighbour(node, nearestSample, minDist, sampleSubset, sampleSubsetDistanceCache, endingIts); } } diff --git a/src/interpolation/interpCommon.js b/src/interpolation/interpCommon.js index 009a4cb..2b12697 100644 --- a/src/interpolation/interpCommon.js +++ b/src/interpolation/interpCommon.js @@ -1,7 +1,7 @@ import {pointOnCircle, sumDistError} from "./helpers"; import jiggle from "../jiggle"; -export function placeNearToNearestNeighbour(node, nearNeighbour, radius, sampleSubset, realDistances) { +export function placeNearToNearestNeighbour(node, nearNeighbour, radius, sampleSubset, realDistances, endingIts) { let dist0 = sumDistError(pointOnCircle(nearNeighbour.x, nearNeighbour.y, 0, radius), sampleSubset, realDistances), dist90 = sumDistError(pointOnCircle(nearNeighbour.x, nearNeighbour.y, 90, radius), sampleSubset, realDistances), @@ -47,12 +47,13 @@ export function placeNearToNearestNeighbour(node, nearNeighbour, radius, sampleS node.x = newPoint.x; node.y = newPoint.y; - let sumForces; // Common temp variables, avoid GC - for (let i = 0; i < 20; i++) { + let + multiplier = 1/sampleSubset.length, + sumForces; + for (let i = 0; i < endingIts; i++) { sumForces = sumForcesToSample(node, sampleSubset, realDistances); - //console.log(forces); - node.x += sumForces.x*0.5; - node.y += sumForces.y*0.5; + node.x += sumForces.x*multiplier; + node.y += sumForces.y*multiplier; } } diff --git a/src/interpolation/interpolationPivots.js b/src/interpolation/interpolationPivots.js index f7af538..ae0ff35 100644 --- a/src/interpolation/interpolationPivots.js +++ b/src/interpolation/interpolationPivots.js @@ -22,7 +22,7 @@ import {placeNearToNearestNeighbour} from "./interpCommon"; * @param {number} endingIts - for phase 3, how many iterations to refine the * placement of each interpolated point */ -export default function(sampleSet, remainderSet, numPivots, distanceFn) { +export default function(sampleSet, remainderSet, numPivots, distanceFn, endingIts) { // Pivot based parent finding let numBuckets = Math.floor(Math.sqrt(sampleSet.length)); let sets = takeSampleFrom(sampleSet, numPivots); @@ -126,6 +126,6 @@ export default function(sampleSet, remainderSet, numPivots, distanceFn) { if (sampleSubsetDistanceCache[k] === undefined) sampleSubsetDistanceCache[k] = distanceFn(node, sampleSubset[k]); } - placeNearToNearestNeighbour(node, nearSample, minDist, sampleSubset, sampleSubsetDistanceCache); + placeNearToNearestNeighbour(node, nearSample, minDist, sampleSubset, sampleSubsetDistanceCache, endingIts); } }