在 Three.js 中,THREE.Vector2
是用来表示二维向量或点的类,它用于处理二维空间中的几何计算和操作。THREE.Vector2
提供了许多方便的方法来进行向量运算、坐标变换以及其他几何操作。
以下是 THREE.Vector2
中常用的一些方法的介绍:
-
构造函数:
constructor(x?: number, y?: number)
构造函数接受两个可选参数
x
和y
,它们分别代表向量或点在二维空间中的 x 和 y 分量。默认创建一个所有分量都为 0 的二维向量。 -
clone():
clone(): THREE.Vector2
返回一个新的
THREE.Vector2
对象,是当前向量的克隆副本。 -
set():
set(x: number, y: number): THREE.Vector2
设置向量的 x 和 y 分量,并返回当前向量。
-
add():
add(v: THREE.Vector2): THREE.Vector2
将当前向量与参数
v
相加,并返回一个新的THREE.Vector2
对象,表示两个向量之和。 -
sub():
sub(v: THREE.Vector2): THREE.Vector2
将当前向量与参数
v
相减,并返回一个新的THREE.Vector2
对象,表示两个向量之差。 -
multiplyScalar():
multiplyScalar(scalar: number): THREE.Vector2
将当前向量的每个分量乘以参数
scalar
,并返回一个新的THREE.Vector2
对象,表示缩放后的向量。 -
dot():
dot(v: THREE.Vector2): number
计算当前向量与参数
v
的点积,并返回一个数字结果。 -
length() / lengthSq():
length(): number lengthSq(): number
length()
方法返回当前向量的长度(模),lengthSq()
方法返回当前向量长度的平方。这两个方法都返回一个数字结果。 -
normalize():
normalize(): THREE.Vector2
将当前向量归一化为单位向量,并返回当前向量。
-
applyMatrix3() / applyMatrix4():
applyMatrix3(matrix: THREE.Matrix3): THREE.Vector2 applyMatrix4(matrix: THREE.Matrix4): THREE.Vector2
分别将当前向量乘以二维矩阵或四维矩阵,并返回一个新的
THREE.Vector2
对象,表示变换后的向量。 -
rotateAround():
rotateAround(center: THREE.Vector2, angle: number): THREE.Vector2
绕
center
点旋转当前向量,angle
参数是旋转的角度(弧度)。返回一个新的THREE.Vector2
对象,表示旋转后的向量。
这些方法只是 THREE.Vector2
类中一部分常用的方法,它还有其他一些方法可以在 Three.js 中进行二维空间的几何计算和操作。使用这些方法,你可以方便地进行二维向量的运算和坐标变换。
使用实例
以下是使用 THREE.Vector2
的几个实例,展示了如何创建向量、进行向量运算和坐标变换:
- 创建向量:
const vec1 = new THREE.Vector2(); // 创建一个二维向量,默认 x、y 分量都为 0
const vec2 = new THREE.Vector2(1, 2); // 创建一个二维向量,x 分量为 1,y 分量为 2
const vec3 = new THREE.Vector2(1.5, -3); // 创建一个二维向量,参数可以是小数和负数
- 向量运算:
const vec1 = new THREE.Vector2(1, 2);
const vec2 = new THREE.Vector2(2, 4);
const resultAdd = vec1.clone().add(vec2); // 向量加法
console.log(resultAdd); // Vector2 { x: 3, y: 6 }
const resultSubtract = vec1.clone().sub(vec2); // 向量减法
console.log(resultSubtract); // Vector2 { x: -1, y: -2 }
const resultMultiplyScalar = vec1.clone().multiplyScalar(2); // 向量标量乘法
console.log(resultMultiplyScalar); // Vector2 { x: 2, y: 4 }
const resultDot = vec1.clone().dot(vec2); // 向量点积
console.log(resultDot); // 10
- 坐标变换:
const position = new THREE.Vector2(1, 2);
const angle = Math.PI / 4; // 旋转角度为 45 度
const rotatedPosition = position.clone().rotateAround(new THREE.Vector2(0, 0), angle);
console.log(rotatedPosition); // Vector2 { x: 0.7071067811865476, y: 2.1213203435596424 }
在这个例子中,我们首先创建了一个原始的二维向量 position
,然后通过 rotateAround
方法绕原点 (0, 0) 旋转向量 position
。rotateAround
方法接受两个参数,第一个参数是旋转中心点,这里我们使用原点作为旋转中心;第二个参数是旋转角度,我们设置为 45 度(弧度表示)。最后,我们将旋转后的向量存储在 rotatedPosition
中。
这些是使用 THREE.Vector2
类的一些基本实例,你可以根据你的项目需求进一步探索 Three.js 中的向量运算和坐标变换功能。
与THREE.Vector3的不同点
THREE.Vector3与THREE.Vector2的相同和不同