/**
 * Простейшая 2D-векторная математика (виртуальные пиксели).
 */
export interface Vec2 {
    x: number;
    y: number;
}

export function vec2(x: number, y: number): Vec2 {
    return { x, y };
}

export function add(a: Vec2, b: Vec2): Vec2 {
    return { x: a.x + b.x, y: a.y + b.y };
}

export function sub(a: Vec2, b: Vec2): Vec2 {
    return { x: a.x - b.x, y: a.y - b.y };
}

export function len(a: Vec2): number {
    return Math.hypot(a.x, a.y);
}

export function dist(a: Vec2, b: Vec2): number {
    return len(sub(a, b));
}

/** Перемещение из a в b не дальше, чем на step. */
export function moveTo(a: Vec2, b: Vec2, step: number): Vec2 {
    const d = dist(a, b);
    if (d <= step || d === 0) {
        return { x: b.x, y: b.y };
    }
    return { x: a.x + (b.x - a.x) * (step / d), y: a.y + (b.y - a.y) * (step / d) };
}