38 lines
996 B
TypeScript
38 lines
996 B
TypeScript
|
import * as GA from "./ga";
|
||
|
import * as GALine from "./galines";
|
||
|
import { Point, Line, join } from "./ga";
|
||
|
|
||
|
/**
|
||
|
* TODO: docs
|
||
|
*/
|
||
|
|
||
|
export function from([x, y]: readonly [number, number]): Point {
|
||
|
return [0, 0, 0, 0, y, x, 1, 0];
|
||
|
}
|
||
|
|
||
|
export function toTuple(point: Point): [number, number] {
|
||
|
return [point[5], point[4]];
|
||
|
}
|
||
|
|
||
|
export function abs(point: Point): Point {
|
||
|
return [0, 0, 0, 0, Math.abs(point[4]), Math.abs(point[5]), 1, 0];
|
||
|
}
|
||
|
|
||
|
export function intersect(line1: Line, line2: Line): Point {
|
||
|
return GA.normalized(GA.meet(line1, line2));
|
||
|
}
|
||
|
|
||
|
// Projects `point` onto the `line`.
|
||
|
// The returned point is the closest point on the `line` to the `point`.
|
||
|
export function project(point: Point, line: Line): Point {
|
||
|
return intersect(GALine.orthogonal(line, point), line);
|
||
|
}
|
||
|
|
||
|
export function distance(point1: Point, point2: Point): number {
|
||
|
return GA.norm(join(point1, point2));
|
||
|
}
|
||
|
|
||
|
export function distanceToLine(point: Point, line: Line): number {
|
||
|
return GA.joinScalar(point, line);
|
||
|
}
|