gapoints.ts 996 B

12345678910111213141516171819202122232425262728293031323334353637
  1. import * as GA from "./ga";
  2. import * as GALine from "./galines";
  3. import { Point, Line, join } from "./ga";
  4. /**
  5. * TODO: docs
  6. */
  7. export function from([x, y]: readonly [number, number]): Point {
  8. return [0, 0, 0, 0, y, x, 1, 0];
  9. }
  10. export function toTuple(point: Point): [number, number] {
  11. return [point[5], point[4]];
  12. }
  13. export function abs(point: Point): Point {
  14. return [0, 0, 0, 0, Math.abs(point[4]), Math.abs(point[5]), 1, 0];
  15. }
  16. export function intersect(line1: Line, line2: Line): Point {
  17. return GA.normalized(GA.meet(line1, line2));
  18. }
  19. // Projects `point` onto the `line`.
  20. // The returned point is the closest point on the `line` to the `point`.
  21. export function project(point: Point, line: Line): Point {
  22. return intersect(GALine.orthogonal(line, point), line);
  23. }
  24. export function distance(point1: Point, point2: Point): number {
  25. return GA.norm(join(point1, point2));
  26. }
  27. export function distanceToLine(point: Point, line: Line): number {
  28. return GA.joinScalar(point, line);
  29. }