three.js 源码注释(十七)Math/Math.js -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【meiwen.anslib.com - 电脑资料】

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

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

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

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

    以下代码是THREE.JS 源码文件中Math/Math.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 36="" type="Array(">返回uuid,一个36位的数组对象</returns>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 () {			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 	// 限制值x在a,b之间.	/*	///clamp方法用来限制x的值在a和b之间, 如果x小于a,返回a。 如果x大于b,返回b,否则返回x	*/	///<summary>clamp</summary>///<param name="x" type="Number" />数值x	///<param name="a" type="Number" />数值a	///<param name="b" type="Number" />数值b	///<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	},	// Clamp value to range clampBottom	///<param name="x" type="Number" />数值x	///<param name="a" type="Number" />数值a	///<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  to range<b>// 参数x在range到range<b>的线性映射	// TOTO:关于线性映射没有弄清楚,有时间在说吧.	/*	///mapLinear方法用来返回参数x在range到range<b>的线性映射	*/	///<summary>mapLinear</summary>///<param name="x" type="Number" />数值x	///<param name="a1" type="Number" />数值a1	///<param name="a2" type="Number" />数值a2	///<param name="b1" type="Number" />数值b1	///<param name="b2" type="Number" />数值b2	///<returns type="Number">返回线性映射x range到range<b></b1,b2></returns>mapLinear: function ( x, a1, a2, b1, b2 ) {		return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );		//返回参数x在range到range<b>的线性映射 	},	// http://en. .org/wiki/Smoothstep	/*	///smoothstep方法和lerp类似,在最小和最大值之间的插值,并在限制处渐入渐出。三次平滑插值	*/	///<summary>smoothstep</summary>///<param name="x" type="Number" />数值x	///<param name="min" type="Number" />最小值	///<param name="max" type="Number" />最大值	///<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类似,在最小和最大值之间的插值,并在限制处渐入渐出,

电脑资料

three.js 源码注释(十七)Math/Math.js》(http://meiwen.anslib.com)。 }, /* ///smoothstep方法和lerp类似,在最小和最大值之间的插值,并在限制处渐入渐出。五次平滑插值 */ ///<summary>smoothstep</summary>///<param name="x" type="Number" />数值x ///<param name="min" type="Number" />最小值 ///<param name="max" type="Number" />最大值 ///<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。 }};</low,></low,></b1,b2></b1,b2></b1,b2></b1,>

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

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

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

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

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

最新文章