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