UNPKG

@antv/util

Version:

> AntV 底层依赖的工具库,不建议在自己业务中使用。

43 lines (35 loc) 1.14 kB
import type { CurveArray } from '../types'; import { distanceSquareRoot } from './distance-square-root'; function getRotations(a: CurveArray) { const segCount = a.length; const pointCount = segCount - 1; return a.map((f, idx) => a.map((p, i) => { let oldSegIdx = idx + i; let 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]; }), ); } export function getRotatedCurve(a: CurveArray, b: CurveArray) { const segCount = a.length - 1; const lineLengths: number[] = []; let computedIndex = 0; let sumLensSqrd = 0; const rotations = getRotations(a); rotations.forEach((r, i) => { a.slice(1).forEach((s, j) => { // @ts-ignore sumLensSqrd += 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]; }