import { Vec3 } from '../../math/Vec3';
import { Point } from './Point';
import { ArrayList } from '../data/ArrayList';
import { Mat4 } from '../../math/Mat4';
export interface IDistanceResut {
    isNode: boolean;
    point: Vec3;
    direction: Vec3;
}
export declare class Path<T extends Vec3> extends ArrayList<T> {
    _closed: boolean;
    _calcNoraml: boolean;
    /**
     *
     * @param vs  假定是没有重复的点集
     * @param closed
     * @param calcNormal
     */
    constructor(vs: Array<T> | ArrayList<T>, closed?: boolean, calcNormal?: boolean);
    init(calcNormal: boolean): void;
    set closed(val: boolean);
    get closed(): boolean;
    get tlen(): number;
    applyMat4(mat4: Mat4): void;
    scale(x: number, y: number, z: number): void;
    /**
     * 截取一段从from到to的path
     * @param {Number} from
     * @param {Number} to
     */
    splitByFromToDistance(from?: number, to?: number): Path<never> | null;
    /**
     * 从起点出发到距离等于distance位置  的坐标 二分查找
     * @param {Number} distance
     */
    getPointByDistance(arg_distance: number, left?: number, right?: number): IDistanceResut | null;
    /**
     * 从起点出发到距离等于distance位置  的坐标 二分查找
     * @param {Number} distance
     */
    getPointByDistancePure(arg_distance: number, left?: number, right?: number): Vec3 | null;
    /**
     * 平均切割为 splitCount 段
     * @param {Number} splitCount
     * @returns {Path} 新的path
     */
    splitAverage(splitCount: number): Path<T>;
    /**
     * 通过测试
    * 平均切割为 splitCount 段
    * @param {Number} splitCount
    * @param {Boolean} integer 是否取整
    * @returns {Path} 新的path
    */
    splitAverageLength(splitLength: number, integer?: boolean): Path<T>;
    /**
     *
     * @param  {...any} ps
     */
    add(...ps: Vec3[] | Point[]): void;
    /**
     * @description : 计算一段线段的总长度
     * @param        {ArrayLike} ps
     * @return       {number}   总长度
     */
    static totalMileages(ps: ArrayLike<Vec3>): number;
    /**
     * @description : 获取没一点的里程  里程是指从第一个点出发的长度
     * @param        {ArrayLike} ps 里程上的点集
     * @param        {boolean} normalize 是否归一化
     * @return       {number[]}  每一个点的里程数组
     * @example     :
     */
    static getPerMileages(ps: ArrayLike<Vec3>, normalize?: boolean, totalMileage?: number): number[];
}
