/** * By definition one radian is the angle subtended at the centre * of a circle by an arc that is equal in length to the radius. */ export type Radians = number & { _brand: "excalimath__radian"; }; /** * An angle measurement of a plane angle in which one full * rotation is 360 degrees. */ export type Degrees = number & { _brand: "excalimath_degree"; }; /** * A number range which includes the start and end numbers in the range. */ export type InclusiveRange = [number, number] & { _brand: "excalimath_degree"; }; /** * Represents a 2D position in world/canvas/scene space. A * global coordinate. */ export type GlobalPoint = [x: number, y: number] & { _brand: "excalimath__globalpoint"; }; /** * Represents a 2D position in world/canvas/scene space. A * global coordinate. * * TODO remove this once we migrate the codebase to use Point tuples everywhere */ export type GlobalCoord = { x: number; y: number; } & { _brand: "excalimath__globalcoord"; }; /** * Represents a 2D position in whatever local space it's * needed. A local coordinate. */ export type LocalPoint = [x: number, y: number] & { _brand: "excalimath__localpoint"; }; /** * Represents a 2D position in whatever local space it's needed. * A local coordinate. * * TODO remove this once we migrate the codebase to use Point tuples everywhere */ export type LocalCoord = { x: number; y: number; } & { _brand: "excalimath__localcoord"; }; /** * A line is an infinitely long object with no width, depth, or curvature. */ export type Line
= [p: P, q: P] & { _brand: "excalimath_line"; }; /** * In geometry, a line segment is a part of a straight * line that is bounded by two distinct end points, and * contains every point on the line that is between its endpoints. */ export type LineSegment
= [a: P, b: P] & { _brand: "excalimath_linesegment"; }; /** * Represents a 2D vector */ export type Vector = [u: number, v: number] & { _brand: "excalimath__vector"; }; /** * A triangle represented by 3 points */ export type Triangle
= [ a: P, b: P, c: P ] & { _brand: "excalimath__triangle"; }; /** * A rectangular shape represented by 4 points at its corners */ export type Rectangle
= [a: P, b: P] & {
_brand: "excalimath__rectangle";
};
/**
* A polygon is a closed shape by connecting the given points
* rectangles and diamonds are modelled by polygons
*/
export type Polygon