2021SC@SDUSC
目录
2.(static) constant(constant) → {clay.Value}
3.(static) random1D(min, max) → {clay.Value}
4.(static) random2D(min, max) → {clay.Value}
5.(static) random3D(min, max) → {clay.Value}
6.(static) vector(vector) → {clay.Value}
7.get(out opt) → {number|clay.Vector2|clay.Vector3}
一.clay.Value类概述
clay.Value是一个能够生成常量及随机的一维,二维和三维生成器。
二.clay.Value类的作用
clay.Value能够生成常量的一维,二维和三维值,以及随机的一维,二维和三维值。
三.clay.Value类源码分析
1.new Value()
该函数是Value的构造函数,能够生成随机数或一维,二维或三维的矢量常数。
无参数。
其源代码为:
var Value = function() {};
构造函数并未实现任何方法。
2.(static) constant(constant) → {clay.Value}
该函数能够创建一个常量的一维值。
参数为constant,类型为number,表示生成的常量一维值。
其源代码为:
Value.vector = function(vector) {
return new VectorValue(vector);
};
从源代码中可以看出,该函数返回一个新构造的对象VectorValue,传入的参数为形式参数vector,VectorValue的代码如下:
var VectorValue = function(val) {
var Constructor = val.constructor;
this.get = function(out) {
if (!out) {
out = new Constructor();
}
out.copy(val);
return out;
};
};
该函数提取形式参数val对象的constructor,调用get方法,判断out是否存在,若不存在则创建一个Constructor对象并赋值给out。out调用copy方法,对val进行复制,并返回out。从而通过该方法,生成一个常量一维值。
3.(static) random1D(min, max) → {clay.Value}
该函数能够创建一个随机一维值。
参数有2个,min,类型为number,表示生成一维值的最小值,max,类型为number,表示生成一维值的最大值。
其源代码为:
Value.random1D = function(min, max) {
return new Random1D(min, max);
};
从源代码中可以看出,该函数创建一个Random1D对象,传入参数为形参min和max。Random1D构造方法的代码如下:
var Random1D = function(min, max) {
var range = max - min;
this.get = function() {
return Math.random() * range + min;
};
};
该函数首先计算最大值和最小值之间的范围range,接着,调用Math.random方法生成0到1的数,乘以范围range,再加上最小值min,即可生成min到max之间的随机数。从而生成一个指定范围的一维随机数。
4.(static) random2D(min, max) → {clay.Value}
该函数能够创建一个随机二维值。
参数有2个,min,类型为clay.Vector2,表示生成二维值的最小值,max,类型为clay.Vector2,表示生成二维值的最大值。
其源代码为:
Value.random2D = function(min, max) {
return new Random2D(min, max);
};
从源代码中可以看出,该函数创建一个Random2D对象,传入参数为形参min和max。Random2D构造方法的代码如下:
var Random2D = function(min, max) {
var rangeX = max.x - min.x;
var rangeY = max.y - min.y;
this.get = function(out) {
if (!out) {
out = new Vector2();
}
Vector2.set(
out,
rangeX * Math.random() + min.array[0],
rangeY * Math.random() + min.array[1]
);
return out;
};
};
该函数首先计算x维的范围max.x和min.x的差值rangeX,再计算y维的范围max.y和min.y的差值rangeY,然后判断out是否存在,若不存在则构造一个Vector2并赋值给out,调用Vector2的set方法,与一维一样,设置out的x维为max.x和min.x之间的随机数,设置out的y维为max.y和min.y之间的随机数,最后返回out。从而实现二维随机数的生成。
5.(static) random3D(min, max) → {clay.Value}
该函数能够创建一个随机三维值。
参数有2个,min,类型为clay.Vector3,表示生成三维值的最小值,max,类型为clay.Vector3,表示生成三维值的最大值。
其源代码为:
Value.random3D = function(min, max) {
return new Random3D(min, max);
};
从源代码中可以看出,该函数创建一个Random3D对象,传入参数为形参min和max。Random3D构造方法的代码如下:
var Random3D = function(min, max) {
var rangeX = max.x - min.x;
var rangeY = max.y - min.y;
var rangeZ = max.z - min.z;
this.get = function(out) {
if (!out) {
out = new Vector3();
}
Vector3.set(
out,
rangeX * Math.random() + min.array[0],
rangeY * Math.random() + min.array[1],
rangeZ * Math.random() + min.array[2]
);
return out;
};
};
该函数首先计算x维的范围max.x和min.x的差值rangeX,再计算y维的范围max.y和min.y的差值rangeY,最后计算z维的范围max.z和min.z的差值rangeZ,然后判断out是否存在,若不存在则构造一个Vector3并赋值给out,调用Vector3的set方法,与一维一样,设置out的x维为max.x和min.x之间的随机数,设置out的y维为max.y和min.y之间的随机数,设置out的z维为max.z和min.z之间的随机数,最后返回out。从而实现三维随机数的生成。
6.(static) vector(vector) → {clay.Value}
该函数能够创建二维或三维的常量矢量。
参数为vector,类型为clay.Vector2或clay.Vector3,表示生成的二维或三维的常量矢量。
其源代码为:
Value.vector = function(vector) {
return new VectorValue(vector);
};
从源代码中可以看出,该函数创建一个VectorValue对象,传入参数为形参vector。VectorValue构造方法的代码如下:
var VectorValue = function(val) {
var Constructor = val.constructor;
this.get = function(out) {
if (!out) {
out = new Constructor();
}
out.copy(val);
return out;
};
};
该函数提取形式参数val对象的constructor,调用get方法,判断out是否存在,若不存在则创建一个Constructor对象并赋值给out。out调用copy方法,对val进行复制,并返回out。从而通过该方法,生成一个常量二维值或常量三维值。
7.get(out opt) → {number|clay.Vector2|clay.Vector3}
该函数的作用是获取一个构造的对象,如Construtor,Random1D,Random2D或Random3D。
参数为out,类型为number,clay.Vector2或clay.Vector3,表示构造的Construtor,Random1D,Random2D或Random3D所处在的对象。
其源代码为:
Value.prototype.get = function(out) {};
可自己实现代码。