123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- /**
- * @author alteredq / http://alteredqualia.com/
- * @author mrdoob / http://mrdoob.com/
- */
- THREE.Math = {
- DEG2RAD: Math.PI / 180,
- RAD2DEG: 180 / Math.PI,
- generateUUID: function () {
- // http://www.broofa.com/Tools/Math.uuid.htm
- var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split( '' );
- var uuid = new Array( 36 );
- var rnd = 0, r;
- return function generateUUID() {
- for ( var i = 0; i < 36; i ++ ) {
- if ( i === 8 || i === 13 || i === 18 || i === 23 ) {
- uuid[ i ] = '-';
- } else if ( i === 14 ) {
- uuid[ i ] = '4';
- } else {
- if ( rnd <= 0x02 ) rnd = 0x2000000 + ( Math.random() * 0x1000000 ) | 0;
- r = rnd & 0xf;
- rnd = rnd >> 4;
- uuid[ i ] = chars[ ( i === 19 ) ? ( r & 0x3 ) | 0x8 : r ];
- }
- }
- return uuid.join( '' );
- };
- }(),
- clamp: function ( value, min, max ) {
- return Math.max( min, Math.min( max, value ) );
- },
- // compute euclidian modulo of m % n
- // https://en.wikipedia.org/wiki/Modulo_operation
- euclideanModulo: function ( n, m ) {
- return ( ( n % m ) + m ) % m;
- },
- // Linear mapping from range <a1, a2> to range <b1, b2>
- mapLinear: function ( x, a1, a2, b1, b2 ) {
- return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );
- },
- // http://en.wikipedia.org/wiki/Smoothstep
- smoothstep: function ( x, min, max ) {
- if ( x <= min ) return 0;
- if ( x >= max ) return 1;
- x = ( x - min ) / ( max - min );
- return x * x * ( 3 - 2 * x );
- },
- smootherstep: function ( x, min, max ) {
- if ( x <= min ) return 0;
- if ( x >= max ) return 1;
- x = ( x - min ) / ( max - min );
- return x * x * x * ( x * ( x * 6 - 15 ) + 10 );
- },
- random16: function () {
- console.warn( 'THREE.Math.random16() has been deprecated. Use Math.random() instead.' );
- return Math.random();
- },
- // Random integer from <low, high> interval
- randInt: function ( low, high ) {
- return low + Math.floor( Math.random() * ( high - low + 1 ) );
- },
- // Random float from <low, high> interval
- randFloat: function ( low, high ) {
- return low + Math.random() * ( high - low );
- },
- // Random float from <-range/2, range/2> interval
- randFloatSpread: function ( range ) {
- return range * ( 0.5 - Math.random() );
- },
- degToRad: function ( degrees ) {
- return degrees * THREE.Math.DEG2RAD;
- },
- radToDeg: function ( radians ) {
- return radians * THREE.Math.RAD2DEG;
- },
- isPowerOfTwo: function ( value ) {
- return ( value & ( value - 1 ) ) === 0 && value !== 0;
- },
- nearestPowerOfTwo: function ( value ) {
- return Math.pow( 2, Math.round( Math.log( value ) / Math.LN2 ) );
- },
- nextPowerOfTwo: function ( value ) {
- value --;
- value |= value >> 1;
- value |= value >> 2;
- value |= value >> 4;
- value |= value >> 8;
- value |= value >> 16;
- value ++;
- return value;
- }
- };
|