2016-06-29 23:07:23 -04:00
|
|
|
function MathUtil () {}
|
|
|
|
|
2016-07-06 14:04:36 -04:00
|
|
|
/**
|
|
|
|
* Convert a value from degrees to radians.
|
|
|
|
* @param {!number} deg Value in degrees.
|
|
|
|
* @return {!number} Equivalent value in radians.
|
|
|
|
*/
|
2016-06-29 23:07:23 -04:00
|
|
|
MathUtil.degToRad = function (deg) {
|
|
|
|
return (Math.PI * (90 - deg)) / 180;
|
|
|
|
};
|
|
|
|
|
2016-07-06 14:04:36 -04:00
|
|
|
/**
|
|
|
|
* Convert a value from radians to degrees.
|
|
|
|
* @param {!number} rad Value in radians.
|
|
|
|
* @return {!number} Equivalent value in degrees.
|
|
|
|
*/
|
2016-06-29 23:07:23 -04:00
|
|
|
MathUtil.radToDeg = function (rad) {
|
|
|
|
return rad * 180 / Math.PI;
|
|
|
|
};
|
|
|
|
|
2016-07-06 14:04:36 -04:00
|
|
|
/**
|
|
|
|
* Clamp a number between two limits.
|
|
|
|
* If n < min, return min. If n > max, return max. Else, return n.
|
|
|
|
* @param {!number} n Number to clamp.
|
|
|
|
* @param {!number} min Minimum limit.
|
|
|
|
* @param {!number} max Maximum limit.
|
|
|
|
* @return {!number} Value of n clamped to min and max.
|
|
|
|
*/
|
2016-06-29 23:07:23 -04:00
|
|
|
MathUtil.clamp = function (n, min, max) {
|
|
|
|
return Math.min(Math.max(n, min), max);
|
|
|
|
};
|
|
|
|
|
2016-07-06 14:04:36 -04:00
|
|
|
/**
|
|
|
|
* Keep a number between two limits, wrapping "extra" into the range.
|
|
|
|
* e.g., wrapClamp(7, 1, 5) == 2
|
|
|
|
* wrapClamp(0, 1, 5) == 5
|
|
|
|
* wrapClamp(-11, -10, 6) == 6, etc.
|
|
|
|
* @param {!number} n Number to wrap.
|
|
|
|
* @param {!number} min Minimum limit.
|
|
|
|
* @param {!number} max Maximum limit.
|
|
|
|
* @return {!number} Value of n wrapped between min and max.
|
|
|
|
*/
|
2016-06-29 23:07:23 -04:00
|
|
|
MathUtil.wrapClamp = function (n, min, max) {
|
|
|
|
var range = (max - min) + 1;
|
|
|
|
return n - Math.floor((n - min) / range) * range;
|
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = MathUtil;
|