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