Interp check vector from other sample subset

This commit is contained in:
Pitchaya Boonsarngsuk
2018-01-17 09:59:25 +00:00
parent 5ece153651
commit 802402d413

View File

@@ -1,5 +1,4 @@
export default function(sampleSet, remainderSet, sampleSubset, distanceFn) { export default function(sampleSet, remainderSet, sampleSubset, distanceFn) {
var distance = distanceFunction;
// var distance = calculateEuclideanDistance; // var distance = calculateEuclideanDistance;
// console.log("Brute-force"); // console.log("Brute-force");
for (let node of remainderSet) { for (let node of remainderSet) {
@@ -25,12 +24,12 @@ export default function(sampleSet, remainderSet, sampleSubset, distanceFn) {
} }
function placeNearToNearestNeighbour(node, minNode, radius, samples, realDistances) { function placeNearToNearestNeighbour(node, minNode, radius, sampleSubset, realDistances) {
let let
dist0 = sumDistError(pointOnCircle(minNode.x, minNode.y, 0, radius), samples, realDistances), dist0 = sumDistError(pointOnCircle(minNode.x, minNode.y, 0, radius), sampleSubset, realDistances),
dist90 = sumDistError(pointOnCircle(minNode.x, minNode.y, 90, radius), samples, realDistances), dist90 = sumDistError(pointOnCircle(minNode.x, minNode.y, 90, radius), sampleSubset, realDistances),
dist180 = sumDistError(pointOnCircle(minNode.x, minNode.y, 180, radius), samples, realDistances), dist180 = sumDistError(pointOnCircle(minNode.x, minNode.y, 180, radius), sampleSubset, realDistances),
dist270 = sumDistError(pointOnCircle(minNode.x, minNode.y, 270, radius), samples, realDistances), dist270 = sumDistError(pointOnCircle(minNode.x, minNode.y, 270, radius), sampleSubset, realDistances),
lowBound = 0.0, lowBound = 0.0,
highBound = 0.0; highBound = 0.0;
@@ -73,12 +72,12 @@ function placeNearToNearestNeighbour(node, minNode, radius, samples, realDistanc
node.x = newPoint.x; node.x = newPoint.x;
node.y = newPoint.y; node.y = newPoint.y;
// for (var i = 0; i < 20; i++) { for (let i = 0; i < 20; i++) {
// var forces = sumForcesToSample(node, sample, sampleCache); let forces = sumForcesToSample(node, sampleSubset, realDistances);
// // console.log(forces); // console.log(forces);
// node.x += forces.x; node.x += forces.x*0.5;
// node.y += forces.y; node.y += forces.y*0.5;
// } }
} }
@@ -109,44 +108,24 @@ function sumDistError(currentPos, samples, realDistances) {
} }
function sumForcesToSample(node, sample, sampleCache) { function sumForcesToSample(node, samples, sampleCache) {
var x = 0, let nodeVx = 0,
y = 0, nodeVy = 0;
// len = 0,
dist = 0,
force,
SPRING_FORCE = 0.7;
for (var i = 0, unitX, unitY; i < sample.length; i++) { for (let i = 0; i < samples.length; i++) {
var s = sample[i]; var sample = samples[i];
if (s !== node) { if(sample === node) continue;
unitX = s.x - node.x;
unitY = s.y - node.y;
// Normalize coordinates let x = node.x - sample.x,
len = Math.sqrt(unitX * unitX + unitY * unitY); y = node.y - sample.y,
unitX /= len; l = Math.sqrt(x * x + y * y);
unitY /= len;
console.log(unitX, unitY); l = (l - sampleCache[i]) / l;
x *= l, y *= l;
var realDist = Math.sqrt(unitX * unitX + unitY * unitY); nodeVx -= x;
var desDist = sampleCache[i]; nodeVy -= y;
dist += realDist - desDist;
force = (SPRING_FORCE * dist);
x += unitX * force;
y += unitY * force;
}
x *= (1.0 / sample.length);
y *= (1.0 / sample.length);
return {
x: x,
y: y
};
} }
return {x: nodeVx, y: nodeVy};
} }
function binarySearchMin(lb, hb, fn) { function binarySearchMin(lb, hb, fn) {