You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.4 KiB
39 lines
1.4 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getRotatedCurve = getRotatedCurve;
|
|
var distance_square_root_1 = require("./distance-square-root");
|
|
function getRotations(a) {
|
|
var segCount = a.length;
|
|
var pointCount = segCount - 1;
|
|
return a.map(function (f, idx) {
|
|
return a.map(function (p, i) {
|
|
var oldSegIdx = idx + i;
|
|
var seg;
|
|
if (i === 0 || (a[oldSegIdx] && a[oldSegIdx][0] === 'M')) {
|
|
seg = a[oldSegIdx];
|
|
return ['M'].concat(seg.slice(-2));
|
|
}
|
|
if (oldSegIdx >= segCount)
|
|
oldSegIdx -= pointCount;
|
|
return a[oldSegIdx];
|
|
});
|
|
});
|
|
}
|
|
function getRotatedCurve(a, b) {
|
|
var segCount = a.length - 1;
|
|
var lineLengths = [];
|
|
var computedIndex = 0;
|
|
var sumLensSqrd = 0;
|
|
var rotations = getRotations(a);
|
|
rotations.forEach(function (r, i) {
|
|
a.slice(1).forEach(function (s, j) {
|
|
// @ts-ignore
|
|
sumLensSqrd += (0, distance_square_root_1.distanceSquareRoot)(a[(i + j) % segCount].slice(-2), b[j % segCount].slice(-2));
|
|
});
|
|
lineLengths[i] = sumLensSqrd;
|
|
sumLensSqrd = 0;
|
|
});
|
|
computedIndex = lineLengths.indexOf(Math.min.apply(null, lineLengths));
|
|
return rotations[computedIndex];
|
|
}
|
|
//# sourceMappingURL=get-rotated-curve.js.map
|