Skip to content

Vector3(JavaScript)

Vector3

Scripting Name:Insight.Vector3

三维向量,或三维点。

constructor( x?: number, y?: number, z?: number);

Parameters

  • x : number (可选)x 分量,默认为 0
  • y : number (可选)y 分量,默认为 0
  • z : number (可选)z 分量,默认为 0

Properties


x

type :number

x 值。

y

type :number

y 值。

z

type :number

z 值。

Static Properties


forward

type :Insight.Vector3

(只读)(0,0,1)。

back

type :Insight.Vector3

(只读)(0,0,-1)。

down

type :Insight.Vector3

(只读)(0,-1,0)。

left

type :Insight.Vector3

(只读)(-1,0,0)。

negativeInfinity

type :Insight.Vector3

(只读)(-inf,-inf,-inf)。

one

type :Insight.Vector3

(只读)(1,1,1)。

positiveInfinity

type :Insight.Vector3

(只读)(+inf,+inf,+inf)。

type :Insight.Vector3

(只读)(1,0,0)。

up

type :Insight.Vector3

(只读)(0,1,0)。

zero

type :Insight.Vector3

(只读)(0,0,0)。

Methods


set

javascript
set(x: number, y: number, z: number): this;

设置向量各个分量的值,返回值为本身。

Parameters

  • x : number 分量 x
  • y : number 分量 y
  • z : number 分量 z

setScalar

javascript
setScalar(scalar: number): this;

用一个浮点数来设置向量各个分量的值,返回值为本身。

Parameters

  • scalar : number 用来设置 x 和 y 两个分量的浮点数

setX

javascript
setX(x: number): this;

用一个浮点数来设置 x 分量的值,返回值为本身。

Parameters

  • x : number 用来设置 x 分量的浮点数

setY

javascript
setY(y: number): this;

用一个浮点数来设置 y 分量的值,返回值为本身。

Parameters

  • y : number 用来设置 y 分量的浮点数

setZ

javascript
setZ(z: number): this;

用一个浮点数来设置 z 分量的值,返回值为本身。

Parameters

  • z : number 用来设置 z 分量的浮点数

setComponent

javascript
setComponent(index: number, value: number): this;

设置向量中某个分量的值。

Parameters

  • index : number 向量中分量的下标,取值范围为[0,2]
  • value : number 新的值

getComponent

javascript
getComponent(index: number): number;

返回向量中某个分量的值。

Parameters

  • index : number 向量中分量的下标,取值范围为[0,2]

clone

javascript
clone(): Vector3;

克隆一个新向量等于本向量。

copy

javascript
copy(v: Vector3): this;

将另一个向量的值拷贝到本向量中。

Parameters

  • v : Insight.Vector3 另一个向量

applyAxisAngle

javascript
applyAxisAngle(axis: Vector3, angle: number): this;

计算本向量沿着 axis 轴旋转 angle 角度的结果并保存在本向量中,因此本向量的原值可能会被改变。

Parameters

  • axis : Insight.Vector3 旋转轴
  • angle : number 旋转角度

applyMatrix4

javascript
applyMatrix4(m: Matrix4): this;

将本向量与矩阵 m 相乘(向量的 w 位视为 1)并除以齐次坐标,结果保存在本向量中,因此本向量的原值可能会被改变。

Parameters

  • m : Insight.Matrix4 待相乘的矩阵

applyQuaternion

javascript
applyQuaternion(q: Quaternion): this;

将本向量与四元数 q 相乘,结果保存在本向量中,因此本向量的原值可能会被改变。(等价于 (q * this * q_inv)

Parameters

  • q : Insight.Quaternion 待相乘的四元数

project

javascript
project(camera: Camera): this;

将本向量从世界空间投影到相机的 NDC 空间中,结果保存在本向量中,因此本向量的原值可能会被改变。

Parameters

  • camera : Insight.Camera 用来投影的相机实例指针

unproject

javascript
unproject(camera: Camera): this;

将本向量从相机的 NDC 空间反投影到世界空间中,结果保存在本向量中,因此本向量的原值可能会被改变。

Parameters

  • camera : Insight.Camera 用来投影的相机实例指针

transformDirection

javascript
transformDirection(m: Matrix4): this;

将本向量视作一个方向向量,用矩阵对其进行变换(只用左上 3x3 矩阵元素),并把结果保存在本向量中,因此本向量的原值可能会被改变。

Parameters

  • m : Insight.Matrix4 用来变换的矩阵

add

javascript
add(v: Vector3): this;

将另一个向量 v 的值累加到本向量中,相当于 x = x + v。

Parameters

  • v : Insight.Vector3 另一个向量
javascript
// 提示:可以进行连续计算,如:
var a = Insight.Vector3(1, 1);var b = Insight.Vector3(2, 3);a.add(b).add(b); // 相当于a=a+b+b

addScalar

javascript
addScalar(s: number): this;

将一个浮点数 s 的值累加到本向量的各个分量中,相当于 x = x + s。

Parameters

  • s : number 待累加的浮点数

addVectors

javascript
addVectors(a: Vector3, b: Vector3): this;

将两个向量 a 和 b 相加,结果放入本向量中,本向量原来的值将被丢弃,相当于 x = a + b。

Parameters

  • a : Insight.Vector3 向量 a
  • b : Insight.Vector3 向量 b

addScaledVector

javascript
addScaledVector(v: Vector3, s: number): this;

将另一个向量 v 与浮点数 s 相乘后,再累加到本向量中,相当于 x = x + v * s。

Parameters

  • v : Insight.Vector3 向量 v
  • s : number 浮点数

sub

javascript
sub(v: Vector3): this;

将另一个向量 v 的值从本向量中减去,相当于 x = x - v。

Parameters

  • v : Insight.Vector3 另一个向量
javascript
// 提示:可以进行连续计算,如:
var a = Insight.Vector3(1, 1);var b = Insight.Vector3(2, 3);a.sub(b).add(b.setY(10)); // 相当于a=a-b+(2, 10)

subScalar

javascript
subScalar(s: number): this;

将一个浮点数 s 的值从本向量中减去,相当于 x = x - s。

Parameters

  • s : number 待减去的浮点数

subVectors

javascript
subVectors(a: Vector3, b: Vector3): this;

将两个向量 a 和 b 相减,结果放入本向量中,本向量原来的值将被丢弃,相当于 x = a - b。

Parameters

  • a : Insight.Vector3 向量 a
  • b : Insight.Vector3 向量 b

multiply

javascript
multiply(v: Vector3): this;

将另一个向量 v 的值与本向量相乘,相当于 x = x * v。

Parameters

  • v : Insight.Vector3 另一个向量
javascript
// 提示:可以进行连续计算,如:
var a = Insight.Vector3(1, 1);var b = Insight.Vector3(2, 3);a.add(b).multiply(b); // 相当于a=(a+b)*b

multiplyScalar

javascript
multiplyScalar(s: number): this;

将一个浮点数 s 的值与本向量相乘,相当于 x = x * s。

Parameters

  • s : number 待相乘的浮点数

multiplyVectors

javascript
multiplyVectors(a: Vector3, b: Vector3): this;

将两个向量 a 和 b 相乘,结果放入本向量中,本向量原来的值将被丢弃,相当于 x = a * b。

Parameters

  • a : Insight.Vector3 向量 a
  • b : Insight.Vector3 向量 b

divide

javascript
divide(v: Vector3): this;

将另一个向量 v 的值与本向量相除,相当于 x = x / v。

Parameters

  • v : Insight.Vector3 另一个向量
javascript
// 提示:可以进行连续计算,如:
var a = Insight.Vector3(1, 1);var b = Insight.Vector3(2, 3);a.add(b).divide(b); // 相当于a=(a+b)/b

divideScalar

javascript
divideScalar(s: number): this;

将一个浮点数 s 的值与本向量相除,相当于 x = x / s。

Parameters

  • s : number 待相除的浮点数

divideVectors

javascript
divideVectors(a: Vector3, b: Vector3): this;

将两个向量 a 和 b 相除,结果放入本向量中,本向量原来的值将被丢弃,相当于 x = a / b。

Parameters

  • a : Insight.Vector3 向量 a
  • b : Insight.Vector3 向量 b

min

javascript
min(v: Vector3): this;

将本向量与另一个向量 v 中较小的一个的值保存在本向量中,因此本向量的原值可能会被改变。

Parameters

  • v : Insight.Vector3 另一个向量

max

javascript
max(v: Vector3): this;

将本向量与另一个向量 v 中较大的一个的值保存在本向量中,因此本向量的原值可能会被改变。

Parameters

  • v : Insight.Vector3 另一个向量

clamp

javascript
clamp(min: Vector3, max: Vector3): this;

将本向量夹持到向量 min 和向量 max 之间,并把夹持结果保存在本向量中,因此本向量的原值可能会被改变。

Parameters

  • min : Insight.Vector3 向量 min
  • max : Insight.Vector3 向量 max

clampScalar

javascript
clampScalar(min: number, max: number): this;

将本向量夹持到浮点数 min 和浮点数 max 之间,并把夹持结果保存在本向量中,因此本向量的原值可能会被改变。

Parameters

  • min : number 浮点数 min
  • max : number 浮点数 max

clampLength

javascript
clampLength(min: number, max: number): this;

将本向量的长度夹持到浮点数 min 和浮点数 max 之间,并把计算后的新的向量值保存在本向量中,因此本向量的原值可能会被改变。

Parameters

  • min : number 浮点数 min
  • max : number 浮点数 max

floor

javascript
floor(): this;

将本向量的各个分量进行向下取整,因此本向量的原值可能会被改变。

ceil

javascript
ceil(): this;

将本向量的各个分量进行向上取整,因此本向量的原值可能会被改变。

round

javascript
round(): this;

将本向量的各个分量进行四舍五入,因此本向量的原值可能会被改变。

roundToZero

javascript
roundToZero(): this;

将本向量的各个分量进行向零取整(正数为向下取整,负数为向上取整),因此本向量的原值可能会被改变。

negate

javascript
negate(): this;

将本向量的各个分量取反,因此本向量的原值可能会被改变。

dot

javascript
dot(v: Vector3): number;

将本向量与另一个向量 v 进行点乘操作,返回点乘结果。

Parameters

  • v : Insight.Vector3 另一个向量

lengthSq

javascript
lengthSq(): number;

计算本向量的长度的平方。

length

javascript
length(): number;

计算本向量的长度。

manhattanLength

javascript
manhattanLength(): number;

计算本向量的曼哈顿长度。

manhattanDistanceTo

javascript
manhattanDistanceTo(v: Vector3): number;

计算本向量与另一个向量 v 之间的曼哈顿距离。

Parameters

  • v : Insight.Vector3 另一个向量

normalize

javascript
normalize(): this;

对向量归一化,因此本向量的原值可能会被改变。

setLength

javascript
setLength(length: number): this;

将本向量设置为一个与原先向量方向相同的、但长度等于 length 的新向量,因此本向量的原值可能会被改变。

Parameters

  • length : number 新长度

lerp

javascript
lerp(v: Vector3, alpha: number): this;

将本向量与向量 v 进行线性插值操作,并把结果保存在本向量中,因此本向量的原值可能会被改变。

Parameters

  • v : Insight.Vector2 另一个向量 v
  • alpha : number 线性插值的取值,范围在[0,1]之间。

lerpVectors

javascript
lerpVectors(v1: Vector3, v2: Vector3, alpha: number): this;

将向量 v1 与向量 v2 进行线性插值操作,并把结果保存在本向量中,因此本向量的原值将被丢弃。

Parameters

  • v1 : Insight.Vector2 向量 v1
  • v2 : Insight.Vector2 向量 v2
  • alpha : number 线性插值的取值,范围在[0,1]之间。

cross

javascript
cross(v: Vector3): number;

将本向量与另一个向量 v 进行叉乘操作,并把结果保存在本向量中,因此本向量的原值可能会被改变。

Parameters

  • v : Insight.Vector3 另一个向量

crossVectors

javascript
crossVectors(a: Vector3, b: Vector3): this;

将向量 v1 与向量 v2 进行叉乘操作,并把结果保存在本向量中,因此本向量的原值将被丢弃。

Parameters

  • v1 : Insight.Vector3 向量 v1
  • v2 : Insight.Vector3 向量 v2

projectOnVector

javascript
projectOnVector(v: Vector3): this;

将本向量投影在向量 v 上,并把结果保存在本向量中,因此本向量的原值可能会被改变。

Parameters

  • v : Insight.Vector3 另一个向量

projectOnPlane

javascript
projectOnPlane(planeNormal: Vector3): this;

将本向量投影在平面法线 planeNormal 上,并把本向量与投影向量的差保存在本向量中,因此本向量的原值可能会被改变。相当于 this = this - this.projectOnVector(planeNormal)。

Parameters

  • planeNormal : Insight.Vector3 平面法线向量

reflect

javascript
reflect(v: Vector3): this;

计算本向量与另一个向量 v 的反射镜像向量,反射平面与 v 正交,并把结果保存在本向量中,因此本向量的原值可能会被改变。(Reflect this vector off of plane orthogonal tonormal. Normal is assumed to have unit length.)

Parameters

  • v : Insight.Vector3 另一个向量

angleTo

javascript
angleTo(v: Vector3): number;

计算该向量与另一个向量 v 之间的夹角。

Parameters

  • v : Insight.Vector3 另一个向量

distanceTo

javascript
distanceTo(v: Vector3): number;

计算本向量与另一个向量 v 之间的距离长度。

Parameters

  • v : Insight.Vector3 另一个向量

distanceToSquared

javascript
distanceToSquared(v: Vector3): number;

计算本向量与另一个向量 v 之间的距离长度的平方。如果你只是想比较两个距离的大小,那么用平方值的效率更高。

Parameters

  • v : Insight.Vector3 另一个向量

setFromSphericalCoords

javascript
setFromSphericalCoords(radius: number, phi: number, theta: number): this;

使用球面坐标 radius、phi、theta 来设置本向量的值,因此本向量的原值将被丢弃。

Parameters

  • radius : number 球坐标半径
  • phi : number 球坐标方位角
  • theta : number 球坐标天顶角

setFromCylindricalCoords

javascript
setFromCylindricalCoords(radius: number, theta: number, y: number): this;

使用圆柱坐标 radius、phi、theta 来设置本向量的值,因此本向量的原值将被丢弃。

Parameters

  • radius : number 圆柱坐标半径
  • theta : number 圆柱坐标夹角角
  • y : number 圆柱坐标距离

setFromMatrixPosition

javascript
setFromMatrixPosition(m: Matrix4): this;

使用矩阵 m 中的表示平移的向量值来设置本向量的值,因此本向量的原值将被丢弃。

Parameters

  • m: Matrix4 要使用的矩阵

setFromMatrixScale

javascript
setFromMatrixScale(m: Matrix4): this;

使用矩阵 m 中的表示缩放的向量值来设置本向量的值,因此本向量的原值将被丢弃。

Parameters

  • m: Matrix4 要使用的矩阵

setFromMatrixColumn

javascript
setFromMatrixColumn(matrix: Matrix4, index: number): this;

使用矩阵 matrix 中第 index 列来设置本向量的 x、y、z 值,因此本向量的原值将被丢弃。

Parameters

  • m: Matrix4 要使用的矩阵

equals

javascript
equals(v: Vector3): boolean;

判断是否等于另一个向量 v。

Parameters

  • v : Insight.Vector3 另一个向量

toString

javascript
toString(): string;

按照(x, y, z)的格式输出。

fromArray

javascript
fromArray(array: number[], offset?: number): this;

从一个数组 array 中获取向量的每个分量的值,并填充到本向量中,因此本向量的原值可能会被丢弃。

Parameters

  • array : number[] 带有 16 个分量值的数组
  • offset?: number 可选参数,表示从数组的第 offset 个下标开始获取值,如不填则默认 0

toArray

javascript
toArray(array?: number[], offset?: number): number[];

将本向量中的所有分量值填充到 array 数组中。返回值为填充好的 array 数组(与参数中的 array 是同一个)。如 array 数组为空,则返回一个全新的数组。

Parameters

  • array : number[] 可选参数,待填充的数组,如不填则返回一个全新的数组
  • offset?: number 可选参数,表示从数组的第 offset 个下标开始填充值,offset 的值不能超过数组长度,否则会抛出异常。如不填则默认 0

Static Methods


Angle

javascript
static Angle(a: Vector3, b: Vector3): number;

计算两个向量之间的夹角,夹角与方向无关,区间在[0,180]。

Parameters

  • a : Insight.Vector3 向量 a
  • b : Insight.Vector3 向量 b

⚠️ 根据数学定义,零向量与任何非零向量同向,所以如果其中一个或者两个为零向量,应该返回 0。但为了与 Unity 保持一致,这里返回 90。

ClampMagnitude

javascript
static ClampMagnitude(vector: Vector3, maxLength: number): Vector3;

返回一个与 vector 同向,长度最大不超过 maxLength 的向量。此方法会返回一个全新的向量,而不会修改 vector 的值。

Parameters

  • vector : Insight.Vector3 指定向量方向
  • maxLength : number 指定向量长度

Cross

javascript
static Cross(a: Vector3, b: Vector3): Vector3;

计算两个向量之间的叉乘。此方法会返回一个全新的向量,而不会修改 a、b 的值。

Parameters

  • a : Insight.Vector3 点 a 坐标
  • b : Insight.Vector3 点 b 坐标

Distance

javascript
static Distance(a: Vector3, b: Vector3): number;

计算两个二维点之间的距离。此方法会返回一个全新的向量,而不会修改 a、b 的值。

Parameters

  • a : Insight.Vector3 点 a 坐标
  • b : Insight.Vector3 点 b 坐标

Dot

javascript
static Dot(a: Vector3, b: Vector3): number;

计算两个向量的点积。此方法会返回一个全新的向量,而不会修改 a、b 的值。

Parameters a : Insight.Vector3 向量 a b : Insight.Vector3 向量 b

Lerp

javascript
static Lerp(a: Vector3, b: Vector3, t: number): Vector3;

两个向量做插值,t 在[0, 1]之间。当 t=0 时,返回 a,当 t=1 时,返回 b。此方法会返回一个全新的向量,而不会修改 a、b 的值。

Parameters

  • a : Insight.Vector3 向量 a
  • b : Insight.Vector3 向量 b
  • t : number 在 a 到 b 之间做插值

LerpUnclamped

javascript
static LerpUnclamped(a: Vector3, b: Vector3, t: number): Vector3;

两个向量做插值,t 的取值范围不做限制。此方法会返回一个全新的向量,而不会修改 a、b 的值。

Parameters

  • a : Insight.Vector3 向量 a
  • b : Insight.Vector3 向量 b
  • t : number 在 a 到 b 之间做插值

Slerp

javascript
static Slerp(a: Vector3, b: Vector3, t: number): Vector3;

两个向量做插值,t 在[0, 1]之间。当 t=0 时,返回 a,当 t=1 时,返回 b。此方法会返回一个全新的向量,而不会修改 a、b 的值。

Parameters

  • a : Insight.Vector3 向量 a
  • b : Insight.Vector3 向量 b
  • t : number 在 a 到 b 之间做插值

SlerpUnclamped

javascript
static SlerpUnclamped(a: Vector3, b: Vector3, t: number): Vector3;

两个向量做插值,t 的取值范围不做限制。此方法会返回一个全新的向量,而不会修改 a、b 的值。

Parameters

  • a : Insight.Vector3 向量 a
  • b : Insight.Vector3 向量 b
  • t : number 在 a 到 b 之间做插值

Max

javascript
static Max(a: Vector3, b: Vector3): Vector3;

返回两个向量每个分量中较大的值组成的新向量。此方法会返回一个全新的向量,而不会修改 a、b 的值。

Parameters

  • a : Insight.Vector3 向量 a
  • b : Insight.Vector3 向量 b

Min

javascript
static Min(a: Vector3, b: Vector3): Vector3;

返回两个向量每个分量中较小的值组成的新向量。此方法会返回一个全新的向量,而不会修改 a、b 的值。

Parameters

  • a : Insight.Vector3 向量 a
  • b : Insight.Vector3 向量 b

MoveTowards

javascript
static MoveTowards(current: Vector3, target: Vector3, maxDistanceDelta: number): Vector3;

返回从 current 出发,朝向 target,到达与 current 最大距离为 maxDistanceDelta 的点。此方法会返回一个全新的向量,而不会修改 current、target 的值。

Parameters

  • current : Insight.Vector3 起点
  • target : Insight.Vector3 终点
  • maxDistanceDelta : number 与的 current 最大距离

Project

javascript
static Project(vector: Vector3, onNormal: Vector3): Vector3;

计算 vector 在 onNormal 上的投影。此方法会返回一个全新的向量,而不会修改 vector、onNormal 的值。

Parameters

  • vector : Insight.Vector3 待计算向量
  • onNormal : Insight.Vector3 投影向量

ProjectOnPlane

javascript
static ProjectOnPlane(vector: Vector3, planeNormal: Vector3): Vector3;

返回 vector 在以 planeNormal 为法线的平面上的投影。此方法会返回一个全新的向量,而不会修改 vector、planeNormal 的值。

Parameters

  • vector : Insight.Vector3 待计算向量
  • planeNormal : Insight.Vector3 投影平面的法线

Reflect

javascript
static Reflect(inDirection: Vector3, inNormal: Vector3): Vector3;

计算入射向量 inDirection 的反射向量。此方法会返回一个全新的向量,而不会修改 inDirection、inNormal 的值。

Parameters

  • inDirection : Insight.Vector3 入射向量
  • inNormal : Insight.Vector3 法线向量

OrthoNormalize

javascript
static OrthoNormalize(normal: Vector3, tangent: Vector3, binormal: Vector3): void;

将三个向量都归一化,并使他们相互正交。

Parameters

  • normal : Insight.Vector3 法线向量
  • tangent : Insight.Vector3 切线向量
  • binormal : Insight.Vector3 副切线向量

RotateTowards

javascript
static RotateTowards(current: Vector3, target: Vector3, maxRadiansDelta: number, maxMagnitudeDelta: number): Vector3;

返回一个从 current 转向 target 的向量。

Parameters

  • current : Insight.Vector3 当前方向
  • target : Insight.Vector3 目标方向
  • maxRadiansDelta : number 最大可旋转的弧度
  • maxMagnitudeDelta : number 向量最大长度差(在 current 和 target 的长度不一致的时候有意义) 返回的向量的长度与 current 向量长度的差值不大于 maxMagnitudeDelta。

Scale

javascript
static Scale(a: Vector3, b: Vector3): Vector3;

返回 a 与 b 相乘的结果,a 与 b 对应分量相乘。此方法会返回一个全新的向量,而不会修改 a、b 的值。

Parameters

  • a : Insight.Vector3 向量 a
  • b : Insight.Vector3 向量 b

SignedAngle

javascript
static SignedAngle(from: Vector3, to: Vector3, axis: Vector3): number;

计算从向量 from 旋转到向量 to 的夹角,夹角为[-180,180],以 axis 为旋转轴,以顺时针为正方向。

Parameters

  • from : Insight.Vector3 旋转起始向量
  • to : Insight.Vector3 旋转结束向量
  • axis : Insight.Vector3 旋转轴

⚠️ 根据数学定义,零向量与任何非零向量同向,所以如果其中一个或者两个为零向量,应该返回 0。但为了与 Unity 保持一致,这里返回 90。

SmoothDamp

javascript
static SmoothDamp(current: Vector3, target: Vector3, currentVelocity: Vector3, smoothTime: number, maxSpeed: number, deltaTime: number): Vector3;

将一个点平滑地移动到另一个点。需要在脚本的 Update 函数中手动调用。此方法会返回一个全新的向量,而不会修改 current、target、currentVelocity 的值。

Parameters

  • current : Insight.Vector3 当前位置
  • target : Insight.Vector3 目标位置
  • currentVelocity : Insight.Vector3 当前速度向量
  • smoothTime : number 约等于到达目标位置所需的时间
  • maxSpeed : number 最大速度值
  • deltaTime : number 距离上一次调用该函数的间隔时间,一般为 Insight.Time.deltaTime