// File:src/math/Vector3.js
/**
* @author mrdoob / http://mrdoob.com/
* @author *kile / http://kile.stravaganza.org/
* @author philogb / http://blog.thejit.org/
* @author mikael emtinger / http://gomo.se/
* @author egraether / http://egraether.com/
* @author WestLangley / http://github.com/WestLangley
*/
/*
///Vector3对象的构造函数.用来创建一个三维向量的对象.Vector3对象的功能函数采用
///定义构造的函数原型对象来实现.
///
/// 用法: var p2d = new Vector3(5,3,2)
/// 创建一个x坐标为5,y坐标为3的向量,z坐标为2的向量.
/// NOTE: 参数(x,y,z)坐标为可选参数,如果不指定参数(x,y,z),将创建一个坐标为(0,0,0)的向量.
*/
///Vector3
///x坐标
///y坐标
///z坐标
THREE.Vector3 = function ( x, y, z ) {
this.x = x || 0;
this.y = y || 0;
this.z = z || 0;
};
/****************************************
****下面是Vector3对象提供的功能函数.
****************************************/
THREE.Vector3.prototype = {
constructor: THREE.Vector3, //构造器
/*
///set方法用来从新设置三维向量的x,y,z坐标值.并返回新的坐标值的三维向量.
*/
///set
///x坐标
///y坐标
///y坐标
///返回新坐标值的三维向量
set: function ( x, y, z ) {
this.x = x;
this.y = y;
this.z = z;
return this; //返回新坐标值的三维向量
},
/*
///setX方法用来从新设置三维向量的x坐标值.并返回新的坐标值的三维向量.
*/
///setX
///x坐标
///返回新坐标值的三维向量
setX: function ( x ) {
this.x = x;
return this; //返回新坐标值的三维向量
},
/*
///setY方法用来从新设置三维向量的y坐标值.并返回新的坐标值的三维向量.
*/
///setY
///y坐标
///返回新坐标值的三维向量
setY: function ( y ) {
this.y = y;
return this; //返回新坐标值的三维向量
},
/*
///setZ方法用来从新设置三维向量的z坐标值.并返回新的坐标值的三维向量.
*/
///setZ
///z坐标
///返回新坐标值的三维向量
setZ: function ( z ) {
this.z = z;
return this; //返回新坐标值的三维向量
},
/*
///setComponent方法用来从新设置三维向量的(x,y)坐标值.并返回新的坐标值的三维向量.
///参数index取值为0,1 或者 2,取值为0,参数value设置x的坐标值,取值为1,参数value设置y的坐标,
///取值为2,参数value设置z的坐标.
*/
///setComponent
///0,1或2
///x, y 或 z坐标
setComponent: function ( index, value ) {
switch ( index ) {
case 0: this.x = value; break;
case 1: this.y = value; break;
case 2: this.z = value; break;
default: throw new Error( 'index is out of range: ' + index );
}
},
/*
///getComponent方法用获得三维向量的(x,y,z)坐标值.
///参数index取值为0,1 或者 2,取值为0,获得x的坐标值,取值为1,获得y的坐标,
///取值为2,获得z的坐标.
*/
///setComponent
///0,1或2
getComponent: function ( index ) {
switch ( index ) {
case 0: return this.x;
case 1: return this.y;
case 2: return this.z;
default: throw new Error( 'index is out of range: ' + index );
}
},
/*
///copy方法用来复制三维向量的(x,y,z)坐标值.并返回新的坐标值的三维向量.
*/
///copy
///三维向量
///返回新坐标值的三维向量
copy: function ( v ) {
this.x = v.x;
this.y = v.y;
this.z = v.z;
return this; //返回新坐标值的三维向量
},
/*
///add方法用来将三维向量的(x,y,z)坐标值与参数v的(x,y,z)相加.并返回新的坐标值的三维向量.
/// NOTE:add()方法虽然有两个参数,但实际上只对参数v做运算,这里的参数w,如果设置的话,调用.addVectors()方法.
*/
///add
///与当前对象(x,y,z)坐标值增加的向量
///判断是否有第二个参数w,如果有的话,调用.addVectors()方法
///返回新坐标值的二维向量
add: function ( v, w ) {
if ( w !== undefined ) { //判断是否有第二个参数w,如果有的话,调用.addVectors()方法.
//THREE.Vector3: .add()方法现在只有一个参数,如果2个参数使用.addVectors( a, b )方法来替代.
console.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );
return this.addVectors( v, w );
}
this.x += v.x;
this.y += v.y;
this.z += v.z;
return this; //返回新坐标值的三维向量
},
/*
///addScalar方法用来将三维向量的(x,y,z)坐标值直接与参数s相加.并返回新的坐标值的三维向量.
/// NOTE:这里与add()方法不同的是,这里传递的参数s是一个标量,而add()方法的参数v是一个三维向量.
*/
///addScalar
///(x,y,z)要增加的数值
///返回新坐标值的三维向量
addScalar: function ( s ) {
this.x += s;
this.y += s;
this.z += s;
return this; //返回新坐标值的三维向量
},
/*
///addVectors方法用来将三维向量的(x,y,z)坐标值等于参数(a,b)的(x,y,z)相加.并返回新的坐标值的三维向量.
/// NOTE:两个矢量组件对应相加。
*/
///addVectors
///三维向量
///三维向量
///返回新坐标值的三维向量
addVectors: function ( a, b ) {
this.x = a.x + b.x;
this.y = a.y + b.y;
this.z = a.z + b.z;
return this; //返回新坐标值的三维向量
},
/*
///sub方法用来将三维向量的(x,y,z)坐标值与参数v的(x,y,z)相减.并返回新的坐标值的三维向量.
/// NOTE:sub()方法虽然有两个参数,但实际上只对参数v做运算,这里的参数w,如果设置的话,调用.subVectors()方法.
*/
///sub
///与当前对象(x,y,z)坐标值增加的三维向量
///判断是否有第二个参数w,如果有的话,调用.subVectors()方法
///返回新坐标值的三维向量
sub: function ( v, w ) {
if ( w !== undefined ) { //判断是否有第二个参数w,如果有的话,调用.subVectors()方法.
//THREE.Vector3: .sub()方法现在只有一个参数,如果2个参数使用.subVectors( a, b )方法来替代.
console.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );
return this.subVectors( v, w );
}
this.x -= v.x;
this.y -= v.y;
this.z -= v.z;
return this; //返回新坐标值的三维向量
},
/*
///subVectors方法用来将三维向量的(x,y,z)坐标值分别于参数(a,b)的(x,y,z)相减.并返回新的坐标值的三维向量.
*/
///subVectors
///三维向量
///三维向量
///返回新坐标值的三维向量
subVectors: function ( a, b ) {
this.x = a.x - b.x;
this.y = a.y - b.y;
this.z = a.z - b.z;
return this; //返回新坐标值的三维向量
},
/*
///multiply方法用来将三维向量的(x,y,z)坐标值与参数v的(x,y,z)相乘.并返回新的坐标值的三维向量.
*/
///multiply
///与当前对象(x,y,z)值相乘的三维向量
///判断是否有第二个参数w,如果有的话,调用.multiplyVectors()方法
///返回新坐标值的三维向量
multiply: function ( v