import type { IHash, NumericArray } from "@thi.ng/api";
import { type IVector, type ReadonlyVec, type Vec } from "./api.js";
import { AVec } from "./avec.js";
export declare class Vec3 extends AVec implements IHash<number>, IVector<Vec3> {
    /**
     * Returns array of memory mapped {@link Vec3} instances using given
     * backing array and stride settings: The `cstride` is the step size
     * between individual XYZ vector components. `estride` is the step
     * size between successive vectors. This arrangement allows for
     * different storage approaches, incl. SOA, AOS, striped /
     * interleaved etc.
     *
     * @param buf - backing array
     * @param num - num vectors
     * @param start -  start index
     * @param cstride - component stride
     * @param estride - element stride
     */
    static mapBuffer(buf: NumericArray, num?: number, start?: number, cstride?: number, estride?: number): Vec3[];
    /**
     * Merges given `src` iterable of {@link Vec3}s into single array `buf`.
     * Vectors will be arranged according to given component and element
     * strides, starting at `start` index. It's the user's
     * responsibility to ensure the target buffer has sufficient
     * capacity to hold the input vectors. See `Vec3.mapBuffer` for the
     * inverse operation. Returns `buf`.
     *
     * @param buf -
     * @param src -
     * @param start -
     * @param cstride -
     * @param estride -
     */
    static intoBuffer(buf: NumericArray, src: Iterable<Vec3>, start?: number, cstride?: number, estride?: number): NumericArray;
    static iterator(buf: NumericArray, num: number, start?: number, cstride?: number, estride?: number): Generator<Vec3, void, unknown>;
    static readonly X_AXIS: Vec3;
    static readonly Y_AXIS: Vec3;
    static readonly Z_AXIS: Vec3;
    static readonly MIN: Vec3;
    static readonly MAX: Vec3;
    static readonly ZERO: Vec3;
    static readonly ONE: Vec3;
    [id: number]: number;
    constructor(buf?: NumericArray, offset?: number, stride?: number);
    [Symbol.iterator](): Generator<number, void, unknown>;
    get length(): number;
    get [0](): number;
    set [0](x: number);
    get [1](): number;
    set [1](y: number);
    get [2](): number;
    set [2](z: number);
    get x(): number;
    set x(x: number);
    get y(): number;
    set y(y: number);
    get z(): number;
    set z(z: number);
    copy(): Vec3;
    copyView(): Vec3;
    empty(): Vec3;
    eqDelta(v: ReadonlyVec, eps?: number): boolean;
    hash(): number;
    toJSON(): number[];
}
export declare const vec3: (x?: number, y?: number, z?: number) => Vec3;
export declare const vec3n: (n: number) => Vec3;
export declare const asVec3: (x: Vec) => Vec3;
//# sourceMappingURL=vec3.d.ts.map