import { invariant } from "../excalidraw/utils"; import { point } from "./point"; import { segment, segmentDistanceToPoint } from "./segment"; import type { GenericPoint, Rectangle } from "./types"; export function rectangle

( topLeft: P, bottomRight: P, ): Rectangle

{ return [topLeft, bottomRight] as Rectangle

; } export function rectangleFromPair

( pair: [a: P, b: P], ): Rectangle

{ return pair as Rectangle

; } export function rectangleFromArray

( pointArray: P[], ): Rectangle

{ invariant( pointArray.length === 4, "Point array contains more or less points to create a rectangle from", ); return pointArray as Rectangle

; } export function rectangleDistanceFromPoint( r: Rectangle, p: Point, ): number { const sides = [ segment(point(r[0][0], r[0][1]), point(r[1][0], r[0][1])), segment(point(r[1][0], r[0][1]), point(r[1][0], r[1][1])), segment(point(r[1][0], r[1][1]), point(r[0][0], r[1][1])), segment(point(r[0][0], r[1][1]), point(r[0][0], r[0][1])), ]; return Math.min(...sides.map((side) => segmentDistanceToPoint(p, side))); }