/**
* @namespace math
* @type {Object}
*/
const math = {
/**
* 角度值转弧度值
* @type {Number}
*/
DEG2RAD: Math.PI / 180,
/**
* 弧度值转角度值
* @type {Number}
*/
RAD2DEG: 180 / Math.PI,
/**
* 生成唯一ID
* @function
* @param {String} [prefix=''] ID前缀
* @return {String} ID
*/
generateUUID: (() => {
let uid = 0;
return (prefix) => {
let id = ++uid;
if (prefix) {
id = prefix + '_' + id;
} else {
id += '';
}
return id;
};
})(),
/**
* 截取
* @param {Number} value 值
* @param {Number} min 最小值
* @param {Number} max 最大值
* @return {Number}
*/
clamp(value, min, max) {
return Math.max(min, Math.min(max, value));
},
/**
* 角度值转换成弧度值
* @param {Number} deg 角度值
* @return {Number} 弧度值
*/
degToRad(deg) {
return deg * this.DEG2RAD;
},
/**
* 弧度值转换成角度值
* @param {Number} rad 弧度值
* @return {Number} 角度值
*/
radToDeg(rad) {
return rad * this.RAD2DEG;
},
/**
* 是否是 2 的指数值
* @param {Number} value
* @return {Boolean}
*/
isPowerOfTwo(value) {
return (value & (value - 1)) === 0 && value !== 0;
},
/**
* 最近的 2 的指数值
* @param {Number} value
* @return {Number}
*/
nearestPowerOfTwo(value) {
return 2 ** Math.round(Math.log(value) / Math.LN2);
},
/**
* 下一个的 2 的指数值
* @param {Number} value
* @return {Number}
*/
nextPowerOfTwo(value) {
value--;
value |= value >> 1;
value |= value >> 2;
value |= value >> 4;
value |= value >> 8;
value |= value >> 16;
value++;
return value;
}
};
export default math;