three.js 源码注释(十七)Math/Math.js

来源:互联网 发布:模考软件 编辑:程序博客网 时间:2024/04/30 08:34

商域无疆 (http://blog.csdn.net/omni360/)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:商域无疆 -  本博客专注于 敏捷开发及移动和物联设备研究:数据可视化、GOLANG、Html5、WEBGL、THREE.JS否则,出自本博客的文章拒绝转载或再转载,谢谢合作。


俺也是刚开始学,好多地儿肯定不对还请见谅.

以下代码是THREE.JS 源码文件中Math/Math.js文件的注释.

更多更新在 : https://github.com/omni360/three.js.sourcecode/blob/master/Three.js


// File:src/math/Math.js/** * @author alteredq / http://alteredqualia.com/ * @author mrdoob / http://mrdoob.com/ *//*///Math对象的构造函数.包含了一些常用的数学方法.//////generateUUID()方法用来生成一个36位的uuid通用唯一识别码 (Universally Unique Identifier).///clamp()方法用来限制x的值在a和b之间, 如果x小于a,返回a。 如果x大于b,返回b,否则返回x.///sign()方法返回参数x的符号,如果大于0返回1,如果小于0返回-1,否则返回0.///isPowerOfTwo()方法是否2的幂,如果该值是2的幂,返回true。///smoothstep()方法和lerp类似,在最小和最大值之间的插值,并在限制处渐入渐出。三次平滑插值///degToRad()方法返回与参数degrees所表示的角度相等的弧度值.///clampBottom()方法用来限制x的值在a和b之间, 如果x小于a,返回a,否则返回x*/THREE.Math = {/********************************************下面是Math对象提供的功能函数.****************************************//*///generateUUID方法用来生成一个36位的uuid通用唯一识别码 (Universally Unique Identifier).*////<summary>generateUUID</summary>///<returns type="Array( 36 )">返回uuid,一个36位的数组对象</returns>generateUUID: function () {// http://www.broofa.com/Tools/Math.uuid.htmvar chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split( '' );var uuid = new Array( 36 );var rnd = 0, r;return function () {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( '' );//返回36位的uuid通用唯一识别码 (Universally Unique Identifier).};}(),// Clamp value to range <a, b>// 限制值x在a,b之间./*///clamp方法用来限制x的值在a和b之间, 如果x小于a,返回a。 如果x大于b,返回b,否则返回x*////<summary>clamp</summary>///<param name ="x" type="Number">数值x</param>///<param name ="a" type="Number">数值a</param>///<param name ="b" type="Number">数值b</param>///<returns type="Number">如果x小于a,返回a。 如果x大于b,返回b,否则返回x</returns>clamp: function ( x, a, b ) {return ( x < a ) ? a : ( ( x > b ) ? b : x );/////<param name ="x" type="Number">数值x</param>},// Clamp value to range <a, inf)// 限制值x<a/*///clampBottom方法用来限制x的值在a和b之间, 如果x小于a,返回a,否则返回x*////<summary>clampBottom</summary>///<param name ="x" type="Number">数值x</param>///<param name ="a" type="Number">数值a</param>///<returns type="Number">如果x小于a,返回a,否则返回x</returns>clampBottom: function ( x, a ) {return x < a ? a : x;//如果x小于a,返回a,否则返回x},// Linear mapping from range <a1, a2> to range <b1, b2>// 参数x在range<a1,a2>到range<b1,b2>的线性映射// TOTO:关于线性映射没有弄清楚,有时间在说吧./*///mapLinear方法用来返回参数x在range<a1,a2>到range<b1,b2>的线性映射*////<summary>mapLinear</summary>///<param name ="x" type="Number">数值x</param>///<param name ="a1" type="Number">数值a1</param>///<param name ="a2" type="Number">数值a2</param>///<param name ="b1" type="Number">数值b1</param>///<param name ="b2" type="Number">数值b2</param>///<returns type="Number">返回线性映射x range<a1,a2>到range<b1,b2></returns>mapLinear: function ( x, a1, a2, b1, b2 ) {return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );//返回参数x在range<a1,a2>到range<b1,b2>的线性映射 },// http://en.wikipedia.org/wiki/Smoothstep/*///smoothstep方法和lerp类似,在最小和最大值之间的插值,并在限制处渐入渐出。三次平滑插值*////<summary>smoothstep</summary>///<param name ="x" type="Number">数值x</param>///<param name ="min" type="Number">最小值</param>///<param name ="max" type="Number">最大值</param>///<returns type="Number">和lerp类似,在最小和最大值之间的插值,并在限制处渐入渐出。</returns>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 );//和lerp类似,在最小和最大值之间的插值,并在限制处渐入渐出。},/*///smoothstep方法和lerp类似,在最小和最大值之间的插值,并在限制处渐入渐出。五次平滑插值*////<summary>smoothstep</summary>///<param name ="x" type="Number">数值x</param>///<param name ="min" type="Number">最小值</param>///<param name ="max" type="Number">最大值</param>///<returns type="Number">和lerp类似,在最小和最大值之间的插值,并在限制处渐入渐出。</returns>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 );//和lerp类似,在最小和最大值之间的插值,并在限制处渐入渐出。},// Random float from <0, 1> with 16 bits of randomness// 生成0,到1的随机浮点数,有16位大小选择范围// (standard Math.random() creates repetitive patterns when applied over larger space)// 使标准的Math.random()方法有更大的取值范围./*///random16方法生成0,到1的随机浮点数,有16位大小选择范围*////<summary>random16</summary>///<returns type="Number">返回随机浮点数</returns>random16: function () {return ( 65280 * Math.random() + 255 * Math.random() ) / 65535;//返回随机浮点数},// Random integer from <low, high> interval// 通过参数low,high定义的取值范围生成随机整数./*///randInt方法通过参数low,high定义的取值范围生成随机整数.*////<summary>randInt</summary>///<returns type="Int">返回随机整数.</returns>randInt: function ( low, high ) {return low + Math.floor( Math.random() * ( high - low + 1 ) );//返回随机整数},// Random float from <low, high> interval// 通过参数low,high定义的取值范围生成随机浮点数/*///randInt方法通过参数low,high定义的取值范围生成随机浮点数.*////<summary>randInt</summary>///<returns type="float">返回随机浮点数.</returns>randFloat: function ( low, high ) {return low + Math.random() * ( high - low );//返回随机浮点数},// Random float from <-range/2, range/2> interval// 生成[-range/2,range/2]区间随机浮点数。/*///randFloatSpread方法生成[-range/2,range/2]区间随机浮点数。*////<summary>randFloatSpread</summary>///<returns type="float">返回随机浮点数.</returns>randFloatSpread: function ( range ) {return range * ( 0.5 - Math.random() );//返回随机浮点数},/*///sign方法返回参数x的符号,如果大于0返回1,如果小于0返回-1,否则返回0.*////<summary>sign</summary>///<returns type="Int">返回符号.</returns>sign: function ( x ) {return ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : 0;//返回参数x的符号,如果大于0返回1,如果小于0返回-1,否则返回0.},/*///degToRad方法返回与参数degrees所表示的角度相等的弧度值.*////<summary>degToRad</summary>///<returns type="Number">返回与参数degrees所表示的角度相等的弧度值.</returns>degToRad: function () {var degreeToRadiansFactor = Math.PI / 180;return function ( degrees ) {return degrees * degreeToRadiansFactor;//返回与参数degrees所表示的角度相等的弧度值.};}(),/*///radToDeg方法返回与参数radians所表示的弧度相等的角度值.*////<summary>radToDeg</summary>///<returns type="Number">返回与参数radians所表示的弧度相等的角度值.</returns>radToDeg: function () {var radianToDegreesFactor = 180 / Math.PI;return function ( radians ) {return radians * radianToDegreesFactor;//返回与参数radians所表示的弧度相等的角度值};}(),/*///isPowerOfTwo方法是否2的幂,如果该值是2的幂,返回true。*////<summary>isPowerOfTwo</summary>///<returns type="Number">如果该值是2的幂,返回true。</returns>isPowerOfTwo: function ( value ) {return ( value & ( value - 1 ) ) === 0 && value !== 0;//如果该值是2的幂,返回true。}};


商域无疆 (http://blog.csdn.net/omni360/)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:商域无疆 -  本博客专注于 敏捷开发及移动和物联设备研究:数据可视化、GOLANG、Html5、WEBGL、THREE.JS否则,出自本博客的文章拒绝转载或再转载,谢谢合作。


以下代码是THREE.JS 源码文件中Math/Math.js文件的注释.

更多更新在 : https://github.com/omni360/three.js.sourcecode/blob/master/Three.js

0 0
原创粉丝点击