跳到主要内容

向量(Vector)

表示最多包含三个分量的向量。2D API 仅使用 x/y; 3D API(例如 Mat4:transformPoint)同时会填充 z

字段(Fields)

x

向量的 x 分量(只读)。

local v = Vector.xy(10, -5)
local xValue = v.x -- 10

y

向量的 y 分量(只读)。

local v = Vector.xy(10, -5)
local yValue = v.y -- -5

z

向量的 z 分量(只读)。通过 Vector.xy 创建的向量此值为零; 由返回 Vector 的 3D API 填充。

local v = m:transformPoint(1, 2, 3)
local zValue = v.z

构造函数(Constructors)

xy

xy(x: number, y: number) -> Vector

使用指定的 x 和 y 分量创建向量。

local v = Vector.xy(5, -2)  -- 5 -2

origin

origin() -> Vector

返回零向量 (0, 0)。

local origin = Vector.origin()  -- 0 0

scaleAndAdd

scaleAndAdd(a: Vector, b: Vector, scale: number) -> Vector

返回 a + b * scale。

local r = Vector.scaleAndAdd(Vector.xy(1,2), Vector.xy(3,4), 2)  -- 7 10

scaleAndSub

scaleAndSub(a: Vector, b: Vector, scale: number) -> Vector

返回 a - b * scale。

local r = Vector.scaleAndSub(Vector.xy(7,10), Vector.xy(3,4), 2)  -- 1 2

lerp

lerp(from: Vector, to: Vector, t: number) -> Vector

返回两个向量之间的线性插值,t=0 返回 from 向量,t=1 返回 to 向量。

local p = Vector.lerp(Vector.xy(0,0), Vector.xy(8,0), 0.25)  -- 2 0

normalized

normalized(v: Vector) -> Vector

返回给定向量的归一化副本。

local n = Vector.normalized(Vector.xy(10, 0))  -- Vector.xy(1, 0)

静态函数(Static Functions)

distance

distance(a: Vector, b: Vector) -> number

返回两个向量之间的距离。

local d = Vector.distance(Vector.xy(3, 4), Vector.xy(0, 0))  -- 5

distanceSquared

distanceSquared(a: Vector, b: Vector) -> number

返回两个向量之间距离的平方。

local d2 = Vector.distanceSquared(Vector.xy(3,4), Vector.xy(0,0))  -- 25

dot

dot(a: Vector, b: Vector) -> number

返回两个向量的点积。

local dp = Vector.dot(Vector.xy(1,2), Vector.xy(3,4))  -- 11 (1*3 + 2*4)

cross

cross(a: Vector, b: Vector) -> number

返回两个向量的叉积(3D 叉积的 z 分量)。

local c = Vector.cross(Vector.xy(1, 0), Vector.xy(0, 1))  -- 1

length

length(v: Vector) -> number

返回给定向量的长度。

local len = Vector.length(Vector.xy(3, 4))  -- 5

lengthSquared

lengthSquared(v: Vector) -> number

返回给定向量长度的平方。

local len2 = Vector.lengthSquared(Vector.xy(3, 4))  -- 25

方法(Methods)

length

length() -> number
⚠️

已弃用 - 请改用 Vector.length

返回向量的长度。

lengthSquared

lengthSquared() -> number
⚠️

已弃用 - 请改用 Vector.lengthSquared

返回向量长度的平方。

local v = Vector.xy(3, 4)
local len2 = v:lengthSquared() -- 25

normalized

normalized() -> Vector
⚠️

已弃用 - 请改用 Vector.normalized

返回向量的归一化副本。如果长度为零,结果为零向量。

local v = Vector.xy(10, 0)
local n = v:normalized() -- 1 0

__eq

__eq(rhs: Vector) -> boolean

如果两个向量的分量相等,返回 true。

local a = Vector.xy(1, 2)
local b = Vector.xy(1, 2)
local c = Vector.xy(2, 1)
print(a == b) -- true
print(a == c) -- false

__unm

__unm() -> Vector

返回取反后的向量。

local v = Vector.xy(2, -3)
local neg = -v -- -2 3

__add

__add(rhs: Vector) -> Vector

返回两个向量之和。

local a = Vector.xy(2, 3)
local b = Vector.xy(-1, 5)
local c = a + b -- 1 8

__sub

__sub(rhs: Vector) -> Vector

返回两个向量之差。

local a = Vector.xy(2, 3)
local b = Vector.xy(-1, 5)
local c = a - b -- 3 -2

__mul

__mul(rhs: number) -> Vector

返回向量按给定数值缩放后的结果。

local v = Vector.xy(3, -2)
local doubled = v * 2 -- 6 -4

__div

__div(rhs: number) -> Vector

返回向量除以给定数值后的结果。

local v = Vector.xy(6, -4)
local half = v / 2 -- 3 -2

distance

distance(other: Vector) -> number
⚠️

已弃用 - 请改用 Vector.distance

返回到另一个向量的距离。

local a = Vector.xy(0, 0)
local b = Vector.xy(3, 4)
print(a:distance(b)) -- 5

distanceSquared

distanceSquared(other: Vector) -> number
⚠️

已弃用 - 请改用 Vector.distanceSquared

返回到另一个向量距离的平方。

local a = Vector.xy(0, 0)
local b = Vector.xy(3, 4)
print(a:distanceSquared(b)) -- 25

dot

dot(other: Vector) -> number
⚠️

已弃用 - 请改用 Vector.dot

返回此向量与另一个向量的点积。

local a = Vector.xy(1, 2)
local b = Vector.xy(3, 4)
print(a:dot(b)) -- 11 (1*3 + 2*4)

lerp

lerp(other: Vector, t: number) -> Vector
⚠️

已弃用 - 请改用 Vector.lerp

返回此向量与另一个向量之间的线性插值,t=0 返回此向量,t=1 返回另一向量。

local a = Vector.xy(0, 0)
local b = Vector.xy(10, 0)
local p = a:lerp(b, 0.5) -- 5 0