MathUtils.ts 2.21 KB
/*
* name;
*/
export default class MathUtils {

    /**
     * 获取从min-max之间的值,包括min max
     * @param min
     * @param max
     */
    static rang(min, max) {
        return Math.random() * (max - min) + min;
    }

    static random(min: number, max: number) {
        min = Math.min(min, max);
        max = Math.max(min, max);
        var range: number = max - min;
        return min + Math.random() * range;
    }

    static randomInt(min: number, max: number) {
        return Math.floor(this.random(min, max + 1));
    }

    /**
     *  概率随机
     * @param arr   
     */
    public static getRandomResult(arr: number[]): number {
        var leng = 0;
        //获取总数
        for (var i = 0; i < arr.length; i++) {
            leng += arr[i]
        }

        for (var i = 0; i < arr.length; i++) {
            //获取 0-总数 之间的一个随随机整数  
            var random = Math.random() * leng

            //如果在当前的概率范围内,得到的就是当前概率 
            if (random < arr[i]) {
                return i
            }
            else {
                //否则减去当前的概率范围,进入下一轮循环
                leng -= arr[i]
            }

        }
    }

    /**
     * 计算两点距离
     */
    public static cacuDis(x1: number, y1: number, x2: number, y2: number): number {
        return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
    }

    static cacuAngle(x1: number, y1: number, x2: number, y2: number) {
        return Math.atan2(y2 - y1, x2 - x1) / Math.PI * 180;
    }

    /**
     * 求余
     * @param value 
     * @param max 
     */
    public static cacuSurplus(value: number, max: number) {
        while (value < 0) {
            value += max;
        }
        while (value >= max) {
            value -= max;
        }
        return value;
    }

    static between(value: number, min: number, max: number) {
        if (min > max) {
            let temp = min;
            min = max;
            max = temp;
        }
        return Math.max(min, Math.min(value, max));
    }

    static subPoint(value: number, cnt: number) {
        let s = Math.pow(10, cnt);
        return Math.round(value * s) / s;
    }
}