Box3Vector3 / GameVector3 三维向量
这是一个服务端API
该API仅在服务端脚本使用
- 查阅官方文档
查阅官方文档(Arena)
查阅社区文档(Arena) Box3Vector3 (三维向量)是Box3中一个非常常见的类,通常指定一个位置,或者尺寸、方向等
构造函数¶
Box3Vector3 (x:
GameVector3 (x:
新建一个三维向量
示例
常用¶
属性¶
属性 | 类型 | 说明 |
---|---|---|
x | 三维向量的x值 | |
y | 三维向量的y值 | |
z | 三维向量的z值 |
方法¶
说明
下列全部[示例]的代码后面的注释为预期的运行结果,可以不用看“<~”,这只是一个提示符
- set (x:
number , y:number , z:number ):Box3Vector3 set (x:number , y:number , z:number ):GameVector3 - 设置三维向量的值
示例
copy (v:Box3Vector3 ):Box3Vector3 copy (v:GameVector3 ):GameVector3 - 把v的值复制到这个三维向量中
示例
clone ():Box3Vector3 clone ():GameVector3 - 复制该向量
add (v:Box3Vector3 ):Box3Vector3 add (v:GameVector3 ):GameVector3 -
将这个三维向量加上v,返回结果
此方法不会改变原来的向量
sub (v:Box3Vector3 ):Box3Vector3 sub (v:GameVector3 ):GameVector3 -
将这个三维向量减去v,返回结果
此方法不会改变原来的向量
mul (v:Box3Vector3 ):Box3Vector3 mul (v:GameVector3 ):GameVector3 -
将这个向量与v点乘,返回结果
也可理解为,将这个向量的x、y、z分别乘v.x、v.y、v.z此方法不会改变原来的向量
div (v:Box3Vector3 ):Box3Vector3 div (v:GameVector3 ):GameVector3 -
将这个三维向量除以v,返回结果
也可理解为,将这个向量的x、y、z分别除以v.x、v.y、v.z此方法不会改变原来的向量
提示
上面四个方法要注意,填写的不是三个
例如,应该这样写:
而不是这样:
下面四个方法同理
addEq (v:Box3Vector3 ):Box3Vector3 addEq (v:GameVector3 ):GameVector3 -
将这个三维向量加上v,返回结果
此方法会改变原来的向量
subEq (v:Box3Vector3 ):Box3Vector3 subEq (v:GameVector3 ):GameVector3 -
将这个三维向量减去v,返回结果
此方法会改变原来的向量
mulEq (v:Box3Vector3 ):Box3Vector3 mulEq (v:GameVector3 ):GameVector3 -
将这个向量与v点乘,返回结果
也可理解为,将这个向量的x、y、z分别乘v.x、v.y、v.z此方法会改变原来的向量
divEq (v:Box3Vector3 ):Box3Vector3 divEq (v:GameVector3 ):GameVector3 -
将这个三维向量除以v,返回结果
也可理解为,将这个向量的x、y、z分别除以v.x、v.y、v.z此方法会改变原来的向量
dot (v:Box3Vector3 ):number dot (v:GameVector3 ):number - 向量点积
也可理解为,将这个向量与v相乘,返回结果的三个方向的值的和 cross (v:Box3Vector3 ):Box3Vector3 cross (v:GameVector3 ):GameVector3 -
将这个向量与v叉乘,返回结果
也可以理解为,返回与这个向量和v所在的平面垂直的向量提示
无法理解?把下面的示例画个图就好了
示例
new Box3Vector3(1, 1, 1).cross(new Box3Vector3(5, 5, 5)) //<~ { x: 0, y: 0, z: 0 } new Box3Vector3(1, 1, 1).cross(new Box3Vector3(1, 1, 1)) //<~ { x: 0, y: 0, z: 0 } new Box3Vector3(1, 1, 1).cross(new Box3Vector3(1, -1, 1)) //<~ { x:2, y:0, z:-2 } new Box3Vector3(1, 1, -1).cross(new Box3Vector3(1, -1, 1)) //<~ { x:0, y:-2, z:-2 }
new GameVector3(1, 1, 1).cross(new GameVector3(5, 5, 5)) //<~ { x: 0, y: 0, z: 0 } new GameVector3(1, 1, 1).cross(new GameVector3(1, 1, 1)) //<~ { x: 0, y: 0, z: 0 } new GameVector3(1, 1, 1).cross(new GameVector3(1, -1, 1)) //<~ { x:2, y:0, z:-2 } new GameVector3(1, 1, -1).cross(new GameVector3(1, -1, 1)) //<~ { x:0, y:-2, z:-2 }
scale (n:number ):Box3Vector3 scale (n:number ):GameVector3 -
将这个向量与n数乘,返回结果
也可理解为,将这个向量缩放至原来的n倍此方法不会改变原来的向量
lerp (v:Box3Vector3 , n:number ):Box3Vector3 lerp (v:GameVector3 , n:number ):GameVector3 -
插值函数
可以理解为,以该向量的坐标为起点,v的坐标为终点的一段线段,取线段的第n部分的点的位置示例
mag ():number -
求这个向量的大小(也称模)
示例
sqrMag ():number -
求这个向量的大小(也称模)的平方
比你用mag再用pow 函数快 towards (v:Box3Vector3 ):Box3Vector3 towards (v:GameVector3 ):GameVector3 - 返回这个向量面向v的值
示例
distance (v:Box3Vector3 ):number distance (v:GameVector3 ):number - 返回这个向量到v的距离
示例
normalize (): Box3Vector3normalize (): GameVector3- 归一化函数
示例
angle (v:Box3Vector3 ):number angle (v:GameVector3 ):number -
求这个向量与v的弧度
是弧度,不是角度!
弧度
另一种表示角度的方法,单位为\(rad\),\(\pi rad\)相当于\(180°\),\(2\pi rad\)相当于\(360°\)
其定义为:弧长等于圆半径的弧所对应的圆心角为\(1rad\)。示例
max (v:Box3Vector3 ):Box3Vector3 max (v:GameVector3 ):GameVector3 -
分别对v和该向量的每个方向的坐标值取较大值
min (v:Box3Vector3 ):Box3Vector3 min (v:GameVector3 ):GameVector3 -
分别对v和该向量的每个方向的坐标值取较小值
exactEquals (v:Box3Vector3 ):boolean exactEquals (v:GameVector3 ):boolean -
判断两个向量是否完全相等
示例
new Box3Vector3(1, 2, 3).exactEquals(new Box3Vector3(1, 2, 3)) //<~ true new Box3Vector3(1, 2, 3).exactEquals(new Box3Vector3(4, 5, 6)) //<~ false new Box3Vector3(1, 2, 3).exactEquals(new Box3Vector3(1.000001, 2, 3)) //<~ false new Box3Vector3(1, 2, 3).exactEquals(new Box3Vector3(1.000000000000001, 2, 3)) //<~ false
new GameVector3(1, 2, 3).exactEquals(new GameVector3(1, 2, 3)) //<~ true new GameVector3(1, 2, 3).exactEquals(new GameVector3(4, 5, 6)) //<~ false new GameVector3(1, 2, 3).exactEquals(new GameVector3(1.000001, 2, 3)) //<~ false new GameVector3(1, 2, 3).exactEquals(new GameVector3(1.000000000000001, 2, 3)) //<~ false
equals (v:Box3Vector3 ):boolean equals (v:GameVector3 ):boolean -
此处与官方API不符
该文档没有tolerance:
number 参数 -
此处与社区API不符
该文档没有tolerance:
number 参数 -
判断两个向量是否大致相等
容差为0.000001
示例
toString ():string -
将这个三维向量转换成字符串
fromPolar (mag:number , phi:number , theta:number ):Box3Vector3 fromPolar (mag:number , phi:number , theta:number ):GameVector3 -
使用大小和方向创建向量
内容缺失
由于编者的能力有限,无法编写该内容
如果你愿意为此贡献一份力量,请加入我们参数 类型 说明 mag 向量大小 phi \(\phi\) ,磁通量,单位是韦伯Wb
theta \(\theta\) 示例
Box3Vector3.fromPolar(114514, 1919810, 31415926535) //<~ { x:-89551.55210093308, y:71368.36064229338, z:729.9394121558898 } Box3Vector3.fromPolar(1, 0, 0) //<~ { x:0, y:1, z:0 } Box3Vector3.fromPolar(1, 0, Math.PI) //<~ { x:0, y:-1, z:1.2246467991473532e-16 } Box3Vector3.fromPolar(1, 0, Math.PI / 2) //<~ { x:0, y:6.123233995736766e-17, z:1 } Box3Vector3.fromPolar(1, Math.PI / 2, 0) //<~ { x:0, y:1, z:0 } Box3Vector3.fromPolar(2, Math.PI, 0) //<~ { x:0, y:2, z:0 } Box3Vector3.fromPolar(2, -Math.PI, 0) //<~ { x:0, y:2, z:0 } Box3Vector3.fromPolar(1, 0, -Math.PI) //<~ { x:0, y:-1, z:-1.2246467991473532e-16 } Box3Vector3.fromPolar(2, Math.PI / 4, Math.PI / 4) //<~ { x:0.9999999999999998, y:1.4142135623730951, z:1 } Box3Vector3.fromPolar(2, Math.PI / 8 * 7, Math.PI / 8) //<~ { x:0.2928932188134526, y:1.8477590650225735, z:-0.7071067811865476 } Box3Vector3.fromPolar(2, Math.PI / -4, Math.PI / 4) //<~ { x:-0.9999999999999998, y:1.4142135623730951, z:1 } Box3Vector3.fromPolar(2, Math.PI / -4, Math.PI / -4) //<~ { x:0.9999999999999998, y:1.4142135623730951, z:-1 } Box3Vector3.fromPolar(2, Math.PI / 4, Math.PI / -4) //<~ { x:-0.9999999999999998, y:1.4142135623730951, z:-1 } Box3Vector3.fromPolar(100, -Math.PI, Math.PI) //<~ { x:-1.4997597826618577e-30, y:-100, z:-1.2246467991473532e-14 } Box3Vector3.fromPolar(100, -Math.PI, Math.PI / 2) //<~ { x:-1.2246467991473532e-14, y:6.123233995736766e-15, z:-100 }
GameVector3.fromPolar(114514, 1919810, 31415926535) //<~ { x:-89551.55210093308, y:71368.36064229338, z:729.9394121558898 } GameVector3.fromPolar(1, 0, 0) //<~ { x:0, y:1, z:0 } GameVector3.fromPolar(1, 0, Math.PI) //<~ { x:0, y:-1, z:1.2246467991473532e-16 } GameVector3.fromPolar(1, 0, Math.PI / 2) //<~ { x:0, y:6.123233995736766e-17, z:1 } GameVector3.fromPolar(1, Math.PI / 2, 0) //<~ { x:0, y:1, z:0 } GameVector3.fromPolar(2, Math.PI, 0) //<~ { x:0, y:2, z:0 } GameVector3.fromPolar(2, -Math.PI, 0) //<~ { x:0, y:2, z:0 } GameVector3.fromPolar(1, 0, -Math.PI) //<~ { x:0, y:-1, z:-1.2246467991473532e-16 } GameVector3.fromPolar(2, Math.PI / 4, Math.PI / 4) //<~ { x:0.9999999999999998, y:1.4142135623730951, z:1 } GameVector3.fromPolar(2, Math.PI / 8 * 7, Math.PI / 8) //<~ { x:0.2928932188134526, y:1.8477590650225735, z:-0.7071067811865476 } GameVector3.fromPolar(2, Math.PI / -4, Math.PI / 4) //<~ { x:-0.9999999999999998, y:1.4142135623730951, z:1 } GameVector3.fromPolar(2, Math.PI / -4, Math.PI / -4) //<~ { x:0.9999999999999998, y:1.4142135623730951, z:-1 } GameVector3.fromPolar(2, Math.PI / 4, Math.PI / -4) //<~ { x:-0.9999999999999998, y:1.4142135623730951, z:-1 } GameVector3.fromPolar(100, -Math.PI, Math.PI) //<~ { x:-1.4997597826618577e-30, y:-100, z:-1.2246467991473532e-14 } GameVector3.fromPolar(100, -Math.PI, Math.PI / 2) //<~ { x:-1.2246467991473532e-14, y:6.123233995736766e-15, z:-100 }