Vector3
该类表示的是一个三维向量(3D vector)。 一个三维向量表示的是一个有顺序的、三个为一组的数字组合(标记为x、y和z), 可被用来表示很多事物,例如:
- 一个位于三维空间中的点。
- 一个在三维空间中的方向与长度的定义。在three.js中,长度总是从(0, 0, 0)到(x, y, z)的 Euclidean distance(欧几里德距离,即直线距离), 方向也是从(0, 0, 0)到(x, y, z)的方向。
- 任意的、有顺序的、三个为一组的数字组合。
其他的一些事物也可以使用二维向量进行表示,比如说动量矢量等等; 但以上这些是它在three.js中的常用用途。
对 Vector3 实例进行遍历将按相应的顺序生成它的分量 (x, y, z)。
1.构造函数
Vector3(x: Float, y: Float, z: Float)参数:
- x - 向量的x值,默认为0。
- y - 向量的y值,默认为0。
- z - 向量的z值,默认为0。
const a = new THREE.Vector3(0, 1, 0);
const b = new THREE.Vector3();
const d = a.distanceTo(b); // 返回两个向量的距离2.属性
isVector3
类型:Boolean
只读,检查一个对象是否为Vector3
x
类型:Float
向量的x值
y
类型:Float
向量的y值
z
类型:Float
向量的z值
3.方法
add()
将传入的向量v和这个向量相加。
add(v: Vector3): this参数:
- v:需要相加的向量
返回值:返回调用对象本身
addScalar()
向量的每个分量的值都加上标量s
addScalar(s: Float): this参数:
- s:需要相加的标量
返回值:返回调用对象本身
addScaledVector()
将所传入的向量v与标量s相乘,所得的乘积和这个向量相加。
addScaledVector(v: Vector3, s: Float): this参数:
- v:需要传入的向量
- s:需要传入的标量
返回值:返回调用对象本身
addVectors()
将该向量设置为a + b。
addVectors(a: Vector3, b: Vector3): this参数:
- a:第一个需要相加的向量
- b:第二个需要相加的向量
返回值:返回调用对象本身
applyAxisAngle()
将轴和角度所指定的旋转应用到该向量上。
applyAxisAngle(axis: Vector3, angle: Float): this参数:
- axis:一个被归一化的Vector3。
- angle:以弧度表示的角度。
返回值:返回调用对象本身
applyEuler()
通过将Euler(欧拉)对象转换为Quaternion(四元数)并应用, 将欧拉变换应用到这一向量上。
applyEuler(euler: Euler): this参数:
- euler:需要转换的欧拉对象
返回值:返回调用对象本身
applyMatrix3()
将该向量乘以三阶矩阵m。
applyMatrix3(m: Matrix3): this参数:
- m:需要相乘的三阶矩阵
返回值:返回调用对象本身
applyMatrix4()
将该向量乘以四阶矩阵m(第四个维度隐式地为1),并按角度进行划分。
applyMatrix3(m: Matrix4): this参数:
- m:需要相乘的四阶矩阵
返回值:返回调用对象本身
applyNormalMatrix()
将该向量乘以正规矩阵 m,并将结果进行归一化。
applyNormalMatrix(m: Matrix3): this参数:
- m:需要相乘的正规矩阵
返回值:返回调用对象本身
applyQuaternion()
将Quaternion变换应用到该向量。
applyQuaternion(quaternion: Quaternion): this参数:
- quaternion:需要应用在该向量上的四元数
返回值:返回调用对象本身
angleTo()
以弧度返回该向量与向量v之间的角度。
angleTo(v: Vector3): Float参数:
- v:一个向量
返回值:返回一个Float类型的弧度
ceil()
将该向量x分量、 y分量以及z分量向上取整为最接近的整数。
ceil(): this返回值:返回调用对象本身
clamp()
设置该向量中x、y、z三个值的最大最小值
- 如果该向量的x值、y值或z值大于限制范围内最大x值、y值或z值,则该值将会被所对应的值取代。
- 如果该向量的x值、y值或z值小于限制范围内最小x值、y值或z值,则该值将会被所对应的值取代。
clamp(min: Vector3, max: Vector3): this参数:
- min:在限制范围内,x值、y值和z的最小值。
- max:在限制范围内,x值、y值和z的最大值。
返回值:返回调用对象本身
clampLength()
限制向量的长度
- 如果向量长度大于最大值,则它将会被最大值所取代。
- 如果向量长度小于最小值,则它将会被最小值所取代。
clampLength(min: Float, max: Float ): this参数:
- min:长度将被限制为的最小值
- max:长度将被限制为的最大值
返回值:返回调用对象本身
clampScalar()
限制向量的分量
- 如果该向量的x值、y值或z值大于最大值,则它们将被最大值所取代。
- 如果该向量的x值、y值或z值小于最小值,则它们将被最小值所取代。
clampScalar(min: Float, max: Float): this参数:
- min:分量将被限制为的最小值
- max:分量将被限制为的最大值
返回值:返回调用对象本身
clone()
克隆一个新的Vector3,其具有和当前这个向量相同的x、y和z。
clone(): Vector3返回值:返回克隆的新向量
copy()
将所传入Vector3的x、y和z属性复制给这一Vector3。
copy(v : Vector3): this参数:
- v:需要被复制的向量
返回值:返回调用对象本身
cross()
将该向量设置为它本身与传入的v的叉积(cross product)。
cross(v: Vector3): this参数:
- v:需要计算的向量
返回值:返回调用对象本身
crossVectors()
将该向量设置为传入的a与b的叉积(cross product)。
crossVectors(a: Vector3, b: Vector3): this参数:
- a:需要计算叉积的向量
- b:需要计算叉积的向量
返回值:返回调用对象本身
distanceTo()
计算该向量到所传入的v间的距离。
distanceTo(v: Vector3): Float参数:
- v:需要计算距离的向量
返回值:返回两个向量直接的距离
manhattanDistanceTo()
计算该向量到所传入的v之间的曼哈顿距离(Manhattan distance)。
manhattanDistanceTo(v: Vector3): Float参数:
- v:需要计算曼哈顿距离的向量
返回值:返回两个向量的曼哈顿距离
distanceToSquared()
计算该向量到传入的v的平方距离。 如果你只是将该距离和另一个距离进行比较,则应当比较的是距离的平方, 因为它的计算效率会更高一些。
distanceToSquared(v: Vector3): Float参数:
- v:需要计算距离的向量
返回值:返回两个向量距离的平方
divide()
将该向量除以向量v。
divide(v : Vector3): this参数:
- v:需要被除的向量
返回值:返回调用对象本身
divideScalar()
将该向量除以标量s。
divideScalar(s : Float): this参数:
- s:需要被除的标量
返回值:返回调用对象本身
dot()
计算该vector和所传入v的点积(dot product)。
dot(v: Vector3): Float参数:
- v:需要计算点积的向量
返回值:返回两个向量的点积
equals()
检查该向量和v的严格相等性。
equals (v: Vector3): Boolean参数:
- v:需要被比较的向量
返回值:返回两个向量是否严格相等,相等为true,否则false
floor()
向量的分量向下取整为最接近的整数值。
floor(): this返回值:返回调用对象本身
fromArray()
设置向量中的x值为array[ offset + 0 ],y值为array[ offset + 1 ], z值为array[ offset + 2 ]。
fromArray(array: Array, offset: Integer): this参数:
- array:来源矩阵。
- offset:(可选)在数组中的元素偏移量,默认值为0。
返回值:返回调用对象本身
fromBufferAttribute()
fromBufferAttribute(attribute: BufferAttribute, index: Integer): this参数:
- attribute:来源的attribute。
- index:在attribute中的索引。
返回值:返回调用对象本身
getComponent()
获取向量的分量
getComponent(index: Integer): Float参数:
- index: 0, 1 or 2.
返回值:如果index值为0返回x值。 如果index值为1返回y值。 如果index值为2返回z值。
length()
计算从(0, 0, 0) 到 (x, y, z)的欧几里得长度 (Euclidean length,即直线长度)
length(): Float返回值:返回向量的长度
manhattanLength()
计算该向量的曼哈顿长度(Manhattan length)。
manhattanLength(): Float返回值:返回向量的曼哈顿长度
lengthSq()
计算从(0, 0, 0)到(x, y, z)的欧几里得长度,也就是直线长度的平方。
如果你正在比较向量的长度,应当比较的是长度的平方,因为它的计算效率更高一些。
lengthSq(): Float返回值:返回向量的欧几里得长度,也就是直线长度的平方。
lerp()
在该向量与传入的向量v之间的线性插值,alpha是沿着线的长度的百分比 —— alpha = 0 时表示的是当前向量,alpha = 1 时表示的是所传入的向量v。
lerp(v: Vector3, alpha: Float): this参数:
- v:朝着进行插值的Vector3。
- alpha:插值因数,其范围通常在[0, 1]闭区间。
返回值:返回该向量与传入的向量v之间的线性插值
lerpVectors()
将此向量设置为在v1和v2之间进行线性插值的向量, 其中alpha为两个向量之间连线的长度的百分比 —— alpha = 0 时表示的是v1,alpha = 1 时表示的是v2。
lerpVectors(v1: Vector3, v2: Vector3, alpha: Float): this参数:
- v1:起始的Vector3。
- v2:朝着进行插值的Vector3。
- alpha:插值因数,其范围通常在[0, 1]闭区间。
返回值:返回此向量设置为在v1和v2之间进行线性插值的向量
max()
如果该向量的x值、y值或z值小于所传入v的x值、y值或z值, 则将该值替换为对应的最大值。
max(v: Vector3): this参数:
- v:界限向量
返回值:返回调用对象本身
min()
如果该向量的x值、y值或z值大于所传入v的x值、y值或z值, 则将该值替换为对应的最小值。
min(v: Vector3): this参数:
- v:界限向量
返回值:返回调用对象本身
multiply()
将该向量与所传入的向量v进行相乘。
multiply(v: Vector3): this参数:
- v:需要相乘的向量
返回值:返回调用对象本身
multiplyScalar()
将该向量与所传入的标量s进行相乘。
multiplyScalar(s: Float): this参数:
- s:需要相乘的标量
返回值:返回调用对象本身
multiplyVectors()
按照分量顺序,将该向量设置为和a * b相等。
multiplyVectors(a: Vector3, b: Vector3): this参数:
- a:需要相乘的向量
- b:需要相乘的向量
返回值:返回调用对象本身
negate()
向量取反,即: x = -x, y = -y , z = -z。
negate(): this返回值:返回调用对象本身
normalize()
将该向量转换为单位向量(unit vector), 也就是说,将该向量的方向设置为和原向量相同,但是其长度(length)为1。
normalize(): this返回值:返回调用对象本身
project()
将此向量(坐标)从世界空间投影到相机的标准化设备坐标 (NDC) 空间。
project(camera: Camera): this参数:
- camera:在投影中使用的摄像机。
返回值:返回调用对象本身
projectOnPlane()
Projects 通过从该向量减去投影到平面法线上的向量,将该向量投影到平面上。
projectOnPlane(planeNormal: Vector3): this参数:
- planeNormal:表示平面法线的向量
返回值:返回调用对象本身
projectOnVector()
投影(Projects)该向量到向量v上。
projectOnVector(v: Vector3): this参数:
- v:被投影的向量
返回值:返回调用对象本身
reflect()
将该向量设置为对指定 normal 法线的表面的反射向量。假设法线具有单位长度。
reflect(normal: Vector3): this参数:
- normal:反射面法线
返回值:返回调用对象本身
round()
向量中的分量四舍五入取整为最接近的整数值。
round(): this返回值:返回调用对象本身
roundToZero()
向量中的分量朝向0取整数(若分量为负数则向上取整,若为正数则向下取整)。
roundToZero(): this返回值:返回调用对象本身
set()
设置该向量的x、y、z分量。
set(x: Float, y: Float, z: Float): this参数:
- x:分量x的新值
- y:分量y的新值
- z:分量z的新值
返回值:返回调用对象本身
setComponent()
单独设置向量的分量
若index为 0 则设置 x 值为 value。 若index为 1 则设置 y 值为 value。 若index为 2 则设置 z 值为 value。
setComponent(index: Integer, value: Float): this参数:
- index:0、1 或 2。
- value:分量的新值
返回值:返回调用对象本身
setFromCylindrical()
从圆柱坐标c中设置该向量。
setFromCylindrical(c: Cylindrical): this参数:
- c:圆柱坐标
返回值:返回调用对象本身
setFromCylindricalCoords()
从圆柱坐标中的radius、theta和y设置该向量。
setFromCylindricalCoords(radius: Float, theta: Float, y: Float): this参数:
- radius:从原点到x-z平面上一点的距离
- theta:在x-z平面内的逆时针角度,以z轴正方向的计算弧度
- y:x-z平面以上的高度
返回值:返回调用对象本身
setFromEuler()
根据指定的Euler Angle的x、y、z分量来设置该向量的x、y、z分量。
setFromEuler(euler: Euler ): this参数:
- euler:欧拉角
返回值:返回调用对象本身
setFromMatrixColumn()
从传入的四阶矩阵matrix由index指定的列中, 设置该向量的x值、y值和z值。
setFromMatrixColumn(matrix: Matrix4, index: Integer): this参数:
- matrix:四阶矩阵
- index:下标
返回值:返回调用对象本身
setFromMatrix3Column()
从传入的三阶矩阵 matrix 由 index 指定的列中,设置该向量的 x 值、y 值和 z 值。
setFromMatrix3Column(matrix: Matrix3, index: Integer): this参数:
- matrix:三阶矩阵
- index:下标
setFromMatrixPosition()
从变换矩阵(transformation matrix)m中, 设置该向量为其中与位置相关的元素。
setFromMatrixPosition(m: Matrix4): this参数:
- m:变换矩阵
返回值:返回调用对象本身
setFromMatrixScale()
从变换矩阵(transformation matrix)m中, 设置该向量为其中与缩放相关的元素。
setFromMatrixScale(m: Matrix4): this参数:
- m:变换矩阵
返回值:返回调用对象本身
setFromSpherical()
从球坐标s中设置该向量。
setFromSpherical(s: Spherical): this参数:
- s:球坐标
返回值:返回调用对象本身
setFromSphericalCoords()
从球坐标中的radius、phi和theta设置该向量。
setFromSphericalCoords(radius: Float, phi: Float, theta: Float): this参数:
- radius:半径值,或者说从该点到原点的 Euclidean distance(欧几里得距离,即直线距离)
- phi:与 y (up) 轴的极角(以弧度为单位)
- theta:绕 y (up) 轴的赤道角(方位角)(以弧度为单位)
返回值:返回调用对象本身
setLength()
设置原向量的长度
setLength(l: Float): this参数:
- l:修改的新长度
返回值:返回调用对象本身
setScalar()
将该向量的x、y和z值同时设置为等于传入的标量scalar。
setScalar(scalar : Float): this参数:
- scalar:一个标量,会同时赋值给向量的三个分量
返回值:返回调用对象本身
setX()
修改向量的分量x
setX(x: Float): this参数:
- x:分量x的新值
返回值:返回调用对象本身
setY()
修改向量的分量y
setX(y: Float): this参数:
- y:分量y的新值
返回值:返回调用对象本身
setZ()
修改向量的分量z
setX(z: Float): this参数:
- z:分量z的新值
返回值:返回调用对象本身
sub()
从该向量减去向量v。
sub(v: Vector3): this参数:
- v:需要被减的向量
返回值:返回调用对象本身
subScalar()
向量的每个分量的值都减去标量s
subScalar(s: Float): this参数:
- s:需要被减的标量
返回值:返回调用对象本身
subVectors()
将该向量设置为a - b。
subVectors(a: Vector3, b: Vector3): this参数:
- a:减数向量
- b:被减数向量
返回值:返回调用对象本身
toArray()
将向量转化为数组
toArray(array: Array, offset: Integer): Array参数:
- array:(可选)被用于存储向量的数组。如果这个值没有传入,则将创建一个新的数组。
- offset:(可选) 数组中元素的偏移量。
返回值:返回一个数组[x, y ,z],或者将x、y和z复制到所传入的array中。
transformDirection()
通过传入的矩阵(m的左上角3 x 3子矩阵)变换向量的方向, 并将结果进行normalizes(归一化)。
transformDirection(m: Matrix4): this参数:
- m:四维矩阵
返回值:返回调用对象本身
unproject()
将此向量(坐标)从相机的标准化设备坐标 (NDC) 空间投影到世界空间。
unproject(camera: Camera ): this参数:
- camera:在投影中使用的摄像机。
返回值:返回调用对象本身
random()
将该向量的每个分量(x、y、z)设置为介于 0 和 1 之间的伪随机数,不包括 1。
random(): this返回值:返回调用对象本身
