import { Quaternion } from './base/Quaternion';
import { Vector2 } from './base/Vector2';
import { Vector3 } from './base/Vector3';
declare const MathUtils: {
    DEG2RAD: number;
    RAD2DEG: number;
    generateUUID(): string;
    clamp(value: number, min: number, max: number): number;
    euclideanModulo(n: number, m: number): number;
    mapLinear(x: number, a1: number, a2: number, b1: number, b2: number): number;
    lerp(x: number, y: number, t: number): number;
    damp(x: number, y: number, lambda: number, dt: number): number;
    pingpong(x: number, length?: number): number;
    smoothstep(x: number, min: number, max: number): number;
    smootherstep(x: number, min: number, max: number): number;
    randInt(low: number, high: number): number;
    randFloat(low: number, high: number): number;
    randFloatSpread(range: number): number;
    seededRandom(s: number): number;
    degToRad(degrees: number): number;
    radToDeg(radians: number): number;
    isPowerOfTwo(value: number): boolean;
    ceilPowerOfTwo(value: number): number;
    floorPowerOfTwo(value: number): number;
    setQuaternionFromProperEuler(q: Quaternion, a: number, b: number, c: number, order: string): void;
    isEqual(num1: number, num2: number, tol?: number): boolean;
    isZero(num: number, tol?: number): boolean;
    /**
     * Check wether num1 is smaller than num2 with specified tolerance.
     * Global (default) tolerance will be used if tol is not provided.
     * @param num1
     * @param num2
     * @param tol
     */
    isSmaller(num1: number, num2: number, tol?: number): boolean;
    /**
     * Check whether num1 is bigger than num2 with specified tolerance.
     * Global (default) tolerance will be used if tol is not provided.
     * @param num1
     * @param num2
     * @param tol
     */
    isBigger(num1: number, num2: number, tol?: number): boolean;
    /**
     * Check whether num1 is smaller than or equal to num2 with specified tolerance.
     * Global (default) tolerance will be used if tol is not provided.
     * @param num1
     * @param num2
     * @param tol
     */
    isSmallerOrEqual(num1: number, num2: number, tol?: number): boolean;
    /**
     * Check whether num1 is bigger than or equal to num2 with specified tolerance.
     * Global (default) tolerance will be used if tol is not provided.
     * @param num1
     * @param num2
     * @param tol
     */
    isBiggerOrEqual(num1: number, num2: number, tol?: number): boolean;
    /**
     * Check whether a number is in a range with specified tolerance.
     * Global (default) tolerance will be used if tol is not provided.
     * @param value the value to be checked.
     * @param min the range's lower limit.
     * @param max the range's upper limit.
     * @param minOpen whether the range's lower limit is open, default is false.
     * @param maxOpen whether the range's upper limit is open, default is false.
     * @param tol
     */
    isInRange(value: number, min: number, max: number, minOpen?: boolean, maxOpen?: boolean, tol?: number): boolean;
    /**
     * Compare two numbers:
     * If num1 is fuzzy equal to num2, return 0.
     * If num1 is fuzzy bigger than num2, return 1.
     * If num1 is fuzzy smaller than num2, return -1.
     * If num1 or num2 is a NaN, throw exception.
     * @param num1
     * @param num2
     * @param tol
     */
    compare(num1: number, num2: number, tol?: number): -1 | 0 | 1;
    /**
     * 单向线性插值
     */
    interpolation(start: Vector3, end: Vector3, segments?: number): Vector3[];
    /**
     * 根据四方点生成网格
     * @param quadPositions 四方点，左上角为起点，按照顺时针顺序
     * @param widthSegments 宽度分割段数
     * @param heightSegments 高度分割段数
     */
    generateMeshByQuad(quadPositions: Vector3[], widthSegments?: number, heightSegments?: number): {
        indices: number[];
        vertices: number[];
        normals: number[];
        uvs: number[];
    };
    /** 把无序的点排序成顺逆时针的邻接点，只支持凸多边形 */
    clockwisePoints(points: Vector2[], clockwise?: boolean): Vector2[];
};
export { MathUtils };
