71 lines
2.2 KiB
TypeScript
71 lines
2.2 KiB
TypeScript
|
import * as GA from "../ga";
|
||
|
import { point, toString, direction, offset } from "../ga";
|
||
|
import * as GAPoint from "../gapoints";
|
||
|
import * as GALine from "../galines";
|
||
|
import * as GATransform from "../gatransforms";
|
||
|
|
||
|
describe("geometric algebra", () => {
|
||
|
describe("points", () => {
|
||
|
it("distanceToLine", () => {
|
||
|
const point = GA.point(3, 3);
|
||
|
const line = GALine.equation(0, 1, -1);
|
||
|
expect(GAPoint.distanceToLine(point, line)).toEqual(2);
|
||
|
});
|
||
|
|
||
|
it("distanceToLine neg", () => {
|
||
|
const point = GA.point(-3, -3);
|
||
|
const line = GALine.equation(0, 1, -1);
|
||
|
expect(GAPoint.distanceToLine(point, line)).toEqual(-4);
|
||
|
});
|
||
|
});
|
||
|
describe("lines", () => {
|
||
|
it("through", () => {
|
||
|
const a = GA.point(0, 0);
|
||
|
const b = GA.point(2, 0);
|
||
|
expect(toString(GALine.through(a, b))).toEqual(
|
||
|
toString(GALine.equation(0, 2, 0)),
|
||
|
);
|
||
|
});
|
||
|
it("parallel", () => {
|
||
|
const point = GA.point(3, 3);
|
||
|
const line = GALine.equation(0, 1, -1);
|
||
|
const parallel = GALine.parallel(line, 2);
|
||
|
expect(GAPoint.distanceToLine(point, parallel)).toEqual(0);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("translation", () => {
|
||
|
it("points", () => {
|
||
|
const start = point(2, 2);
|
||
|
const move = GATransform.translation(direction(0, 1));
|
||
|
const end = GATransform.apply(move, start);
|
||
|
expect(toString(end)).toEqual(toString(point(2, 3)));
|
||
|
});
|
||
|
|
||
|
it("points 2", () => {
|
||
|
const start = point(2, 2);
|
||
|
const move = GATransform.translation(offset(3, 4));
|
||
|
const end = GATransform.apply(move, start);
|
||
|
expect(toString(end)).toEqual(toString(point(5, 6)));
|
||
|
});
|
||
|
|
||
|
it("lines", () => {
|
||
|
const original = GALine.through(point(2, 2), point(3, 4));
|
||
|
const move = GATransform.translation(offset(3, 4));
|
||
|
const parallel = GATransform.apply(move, original);
|
||
|
expect(toString(parallel)).toEqual(
|
||
|
toString(GALine.through(point(5, 6), point(6, 8))),
|
||
|
);
|
||
|
});
|
||
|
});
|
||
|
describe("rotation", () => {
|
||
|
it("points", () => {
|
||
|
const start = point(2, 2);
|
||
|
const pivot = point(1, 1);
|
||
|
const rotate = GATransform.rotation(pivot, Math.PI / 2);
|
||
|
const end = GATransform.apply(rotate, start);
|
||
|
expect(toString(end)).toEqual(toString(point(2, 0)));
|
||
|
});
|
||
|
});
|
||
|
});
|