import { ArrayNumber3, ArrayNumber4 } from "../types";
import { TgdMat4 } from "./mat4";
import { TgdVec3 } from "./vec3";
export declare class TgdVec4 extends Float32Array {
    static X: Readonly<TgdVec4>;
    static Y: Readonly<TgdVec4>;
    static Z: Readonly<TgdVec4>;
    static W: Readonly<TgdVec4>;
    static fromSlerp([x1, y1, z1, w1]: TgdVec3 | TgdVec4 | ArrayNumber3 | ArrayNumber4, [x2, y2, z2, w2]: TgdVec3 | TgdVec4 | ArrayNumber3 | ArrayNumber4, a?: number): TgdVec4;
    constructor();
    constructor(vec4: TgdVec4 | ArrayNumber4);
    constructor(vec3: TgdVec3 | ArrayNumber3, w: number);
    constructor(x: number);
    constructor(x: number, y: number);
    constructor(x: number, y: number, z: number);
    constructor(x: number, y: number, z: number, w: number);
    reset(x?: number, y?: number, z?: number, w?: number): this;
    from(vec: Readonly<TgdVec4 | ArrayNumber4>): this;
    /**
     * Warning! The `w` component will stay unchanged.
     */
    fromVec3(vec: Readonly<TgdVec3 | ArrayNumber3>): this;
    clone(): TgdVec4;
    mix(vec: Readonly<TgdVec4>, alpha?: number): this;
    isEqual(vec: Readonly<TgdVec4 | ArrayNumber4>): boolean;
    isClose({ x, y, z, w }: TgdVec4, epsilon?: number): boolean;
    /**
     * V := M×V
     */
    applyMatrix(mat: TgdMat4): this;
    get x(): number;
    set x(value: number);
    get y(): number;
    set y(value: number);
    get z(): number;
    set z(value: number);
    get w(): number;
    set w(value: number);
    add(...vectors: (TgdVec4 | TgdVec3 | ArrayNumber4 | ArrayNumber3)[]): TgdVec4;
    subtract(vec: TgdVec4 | TgdVec3 | ArrayNumber4 | ArrayNumber3): TgdVec4;
    scale(factor: number): this;
    dot(vec: TgdVec4 | ArrayNumber4): number;
    get size(): number;
    normalize(): this;
    debug(caption?: string): void;
}
//# sourceMappingURL=vec4.d.ts.map