export interface Pos { x: number y: number } export const NULL_POS: Pos = { x: 0, y: 0 } /** * Returns position of a relative to b * @param a * @param b */ export function relativeTo(a: Pos, b: Pos): Pos { return { x: a.x - b.x, y: a.y - b.y } } /** * Returns the middle position of the given rectangle * @param rect */ export function middlePos(rect: DOMRect): Pos { return { x: rect.x + rect.width / 2, y: rect.y + rect.height / 2 } } /** * Returns x and y distance between given two pos * @param a * @param b */ export function size(a: Pos, b: Pos): Pos { return { x: Math.abs(a.x - b.x), y: Math.abs(a.y - b.y) } } export function add(a: Pos, b: Pos): Pos { return { x: a.x + b.x, y: a.y + b.y } } export function angle(a: Pos, b: Pos): number { const r = relativeTo(a, b) return Math.atan2(r.x, r.y) }