/**
 * Vector class
 */
export default class Vector {
    /**
     * @typedef {Object} AbstractVector
     * @prop {PositionDefinition} [start] - Start coordinates
     * @prop {PositionDefinition} [end] - End coordinates
     */
    /**
     * @typedef {Array<PositionDefinition>|AbstractVector} VectorDefinition
     */
    /**
     * Create a Vector from a generic definition
     * @param {VectorDefinition} [vectorDefinition] - Vector definition
     * @return {Vector}
     */
    static from(vectorDefinition?: VectorDefinition): Vector;
    /**
     * Vector constructor
     * @param {PositionDefinition} start - Starting vector's position
     * @param {PositionDefinition} end - Ending vector's position
     */
    constructor(start: any, end: any);
    start: Position;
    end: Position;
    /**
     * Get this vector horizontal component
     * @return {Number}
     */
    get width(): number;
    /**
     * Get this vector vertical component
     * @return {Number}
     */
    get height(): number;
    /**
     * Return this vector's length
     * @return {Number}
     */
    get length(): number;
    /**
     * Create a new copy of this vector
     * @return {Vector}
     */
    clone(): Vector;
    /**
     * Determine if is equal to another vector
     * @param {VectorDefinition} vectorDefinition - Any vector
     * @return {Boolean}
     */
    equals(vectorDefinition: VectorDefinition): boolean;
    /**
     * Get the vector move with start at (0, 0)
     * @return {Position}
     */
    getDelta(): Position;
    /**
     * Add a vector
     * @param {VectorDefinition|PositionDefinition|Number} modification - Any Vector or Position or Number
     * @return {Vector} Itself
     */
    add(modification: VectorDefinition | any | number): Vector;
    /**
     * Move this vector
     * @param {VectorDefinition|PositionDefinition|Number} modification - Any Vector or Position or Number
     * @return {Vector} Itself
     */
    translate(modification: VectorDefinition | any | number): Vector;
    /**
     * Multiply this vector
     * @param {VectorDefinition|PositionDefinition|Number} modification - Any Vector or Position or Number
     * @return {Vector} Itself
     */
    multiply(modification: VectorDefinition | any | number): Vector;
    /**
     * Define if this vector intersect another
     * @param {VectorDefinition} vectorDefinition - Any vector
     * @return {Boolean}
     */
    intersect(vectorDefinition: VectorDefinition): boolean;
    /**
     * Return the intersection point between two vector or null if no intersection happen
     * @param {VectorDefinition} vectorDefinition - Any vector
     * @return {Position}
     */
    getIntersectionPoint(vectorDefinition: VectorDefinition): Position;
    /**
     * Find the closest position to a point on this vector
     * @param {PositionDefinition} positionDefinition - Any position
     * @return {Position}
     */
    getClosestToPoint(positionDefinition: any): Position;
    /**
     * Return a JSON ready Vector definition
     * @return {Array<Array<Number>>}
     */
    toJSON(): Array<Array<number>>;
}
export type AbstractVector = {
    /**
     * - Start coordinates
     */
    start?: any;
    /**
     * - End coordinates
     */
    end?: any;
};
export type VectorDefinition = Array<any> | AbstractVector;
import Position from "@pencil.js/position";
