UNPKG

frame.akima

Version:

A package for Akima interpolation

66 lines (65 loc) 3.07 kB
// import { test, expect, describe } from 'vitest'; import { Point } from './Point'; import { createAkimaRadii } from './Akima'; import { Nidek } from './nidek/Nidek'; describe('Akima', () => { test('create an Akima', () => { const universeCenter = new Point(0, 0); const offset = 200; const points = [ new Point(0, offset, universeCenter), new Point(0, -offset, universeCenter), new Point(offset, 0, universeCenter), new Point(-offset, 0, universeCenter), ]; const expectedPoints = [ new Point(200, 0, universeCenter), new Point(184.776, 76.537, universeCenter), new Point(141.421, 141.421, universeCenter), new Point(76.537, 184.776, universeCenter), new Point(0, 200, universeCenter), new Point(-76.537, 184.776, universeCenter), new Point(-141.421, 141.421, universeCenter), new Point(-184.776, 76.537, universeCenter), new Point(-200, 0, universeCenter), new Point(-184.776, -76.537, universeCenter), new Point(-141.421, -141.421, universeCenter), new Point(-76.537, -184.776, universeCenter), new Point(0, -200, universeCenter), new Point(76.537, -184.776, universeCenter), new Point(141.421, -141.421, universeCenter), new Point(184.776, -76.537, universeCenter), ]; createAkimaRadii(points.map((point) => ({ x: point.X, y: point.Y })), { x: universeCenter.X, y: universeCenter.Y }, 16).forEach((point, index) => { // console.log(`new Point(${point.X}, ${point.Y}, universeCenter),`); // console.log(`expect(point.X).toEqual(${point.X});`); expect(point.x).toBeCloseTo(expectedPoints[index].X, 3); expect(point.y).toBeCloseTo(expectedPoints[index].Y, 3); // expect(point.Y).toBeCloseTo(0, 1); }); }); test('create an Akima 2', () => { const universeCenter = new Point(0, 0); const points = [ new Point(200, 0, universeCenter), new Point(0, 200, universeCenter), new Point(-200, 0, universeCenter), new Point(0, -200, universeCenter), new Point(102.515625, 100.203125, universeCenter), ]; const scaleFactor = 10; const akimaKoords = createAkimaRadii(points.map((point) => ({ x: point.X / scaleFactor, y: point.Y / scaleFactor, })), { x: universeCenter.X, y: universeCenter.Y }, 1000); console.log(`universeCenter: [${universeCenter.X}, ${universeCenter.Y}]`); try { const nid = Nidek.createStringFromCoords(akimaKoords); throw new Error('This code path should not be reached because the function Nidek.createStringFromCoords(..) should throw an error'); } catch (e) { expect(e).toBeInstanceOf(Error); console.error(`Error creating Nidek string: ${e}`); } }); });