【JavaScript】Math 工具

module.exports={

 /**
     * 阶乘
     * @param n
     */
    factorial: function (n) {
        if (isNaN(n)) {
            return -1;
        }
        var m = n, i = 2;
        for (; i < n; i++) {
            m *= i;
        }
        return m;
    },

    /**
     * 排列组合
     * @param n 元素的总个数
     * @param m 参与选择的元素个数
     */
    mamp: function (n, m) {
        const self = this;
        if (isNaN(n) || isNaN(m) || m < n) {
            return -1;
        }
        let t = m, i = m - n + 1;
        for (; i < m; i++) {
            t *= i;
        }
        return t / self.factorial(n);
    },
     /**
     * 0 - n 的整数 默认返回 [0, ]
     * @param n = min [0, n]
     * @param max = max [min, max]
     * @returns {number}
     */
    random: function (n, max) {
        let isc=1;
        if(max<=0 && n <0) //小于 0 的随机
        {
            let c = max ;
            max=this.abs(n);
            n = this.abs(c);
            isc=-1;
        }
        let s = 1000000000, v = Math.random();
        switch (arguments.length) {
            case 1:
                v = Math.ceil(v * s) % (n + 1);
                break;
            case 2:
                v = (Math.ceil(v * s) % (max - n + 1)) + n;
                break;
            default :
                v = Math.ceil(v * s);
                break;
        }
        return isc*v;
    },
   /**
     *
     * @param num 数字
     * @param multiple 10000 目标进位
     * @param index 保留位数
     * @returns {number}
     */
    fixedFloor:function( num , multiple=1 , index=1 )
    {
        if(num < multiple)return  num;
        num = (Math.floor(num /multiple * (Math.pow(10,index)).toFixed(index))/ (Math.pow(10,index)));
        return num ;
    },
/***
     * 计算两点的距离
     */
    getDistance (x1,y1,x2,y2){
        return Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
    },

    /***
     * 两点的弧度
     * @returns {number}
     */
    getRadian (x1,y1,x2,y2){
        let x = Math.abs(x2 - x1);
        // let y = Math.abs(y2 - y1);
        let z = this.getDistance(x1,y1,x2,y2);
        if (z === 0){
            return 0;
        }
        let sin = x/z;
        return Math.asin(sin);
    },

    /***
     * 两点的角度
     * @returns {number}
     */
    getAngle (x1,y1,x2,y2){
        //如果其中一个坐标点小于0
        if (x1 === x2 && y1 === y2)
            return 0;

        let angle = 90-Math.atan2(y2-y1,x2-x1)*180/Math.PI;
        return angle;
    },

    /***
     * 角度转弧度
     * @param angle
     * @returns {number}
     * @constructor
     */
    AngletoRadian (angle){
        return Math.PI/180*angle;
    },

    /**
     * 通过距离和角度,计算出x的长度
     * @param z 三角形第三边长度
     * @param angle
     */
    getSinx (z, angle){
        let radian = this.AngletoRadian(angle);
        return Math.sin(radian)*z;
    },

    /**
     * 通过距离和角度,计算出x的长度
     * @param z 三角形第三边长度
     * @param angle
     */
    getCosx (z, angle){
        var radian = this.AngletoRadian(angle);
        return Math.cos(radian)*z;
    },
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值