/**
 * 当向量以数组的方式出现，一个计算单元库
 * @Description  : 向量数组
 * @Author       : 赵耀圣
 * @QQ           : 549184003
 * @Date         : 2021-08-02 15:09:33
 * @LastEditTime : 2021-08-02 15:50:16
 * @FilePath     : \cga.js\src\math\VecArray.ts
 */
import { Vec2 } from './Vec2';
import { Vec3 } from './Vec3';
import { ArrayList } from '../struct/data/ArrayList';
import { Vec4 } from './Vec4';
/**
 * 矢量几何操作，数字数组/矢量数组，常用工具集合
 */
export default class vector {
    /**
     * 去除相邻的重复向量
     * @param vs 矢量集合
     * @param delta 误差
     * @returns
     */
    static uniqueNeighborVecs(vs: Array<Vec3>, delta?: number): Vec3[];
    /**
     * 去除相邻没有重复点
     */
    static uniqueNeighbor(vs: number[], component?: number, delta?: number): number[];
    /**
     * 去除任意重复点
     * @param vs 向量数组
     * @param component 向量组件数量
     * @returns 无重复向量数组
     */
    static unique(vs: number[], component?: number): number[];
    /**
     *  翻转向量数组
     * @param vecs 向量数组
     * @param component  组件数量
     * @returns
     */
    static reverse(vecs: number[], component?: number): number[];
    /**
     * 点积
     * @param vecs
     * @returns
     */
    static dot(...vecs: number[]): number;
    /**
     * 长度平方
     * @param vecs
     * @returns
     */
    static distanceSq(...vecs: number[]): number;
    /**
     * 长度
     * @param vecs
     * @returns
     */
    static distance(...vecs: number[]): number;
    /**
     * 相加
     * @param vecs
     * @returns
     */
    static add(...vecs: number[]): number[] | (number & any[]);
    /**
     * 相减
     * @param vecs
     * @returns
     */
    static sub(...vecs: number[]): number[];
    /**
     * 相乘
     * @param vecs
     * @returns
     */
    static mul(...vecs: number[]): number[] | (number & any[]);
    /**
     * 获取矢量数组的i个矢量
     * @param vecs
     * @param i
     * @param component
     * @returns
     */
    static getVecAt(vecs: number[], i: number, component?: number): number[];
    /**
     * 在第 i 个位置插入一个向量
     * @param vecs
     * @param i
     * @param vec
     */
    static insertAt(vecs: number[], i: number, ...vec: number[]): void;
    /**
     * 是否逆时针
     * counterclockwise
     */
    static isCCW<T>(shape: Array<T> | ArrayList<T>, component?: number): boolean;
    /**
     * 将向量深度拆解为数字
     * @param {Array} Array<Vec4 | Vec3 | Vec2 | any> | any
     * @param {String} comSort  'x','y','z','w' 按顺序选取后自由组合
     * @returns {Array<Number>} 数字数组
     */
    static verctorToNumbers(vecs: Array<Vec4 | Vec3 | Vec2 | any> | any, comSort?: string): number[];
    static vec(component?: number): Vec3 | Vec4 | Vec2;
    /**
     * 数字数组 转 适量数组
     * @param vss  数字数组
     * @param component 矢量维度，默认为3
     * @returns
     */
    static numbersToVecs(vss: number[], component?: number): Vec2[] | Vec3[] | Vec4[];
}
