Interp check vector from other sample subset
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user