主题
Vector3
三维向量,用于表示位置、方向、速度或缩放等三维量。提供向量运算方法,如点积、叉积、线性插值和归一化,并支持通过只读属性获取长度和单位向量。
概览
三维向量,用于表示位置、方向、速度或缩放等三维量。提供向量运算方法,如点积、叉积、线性插值和归一化,并支持通过只读属性获取长度和单位向量。
可通过
Vector3.New(x, y, z)构造
代码示例
构造 Vector3 并安全归一化
lua
-- @runtime client
local vector = Vector3.New(3, 4, 0)
print('原长度:', vector.Magnitude)
vector:Normalize() -- 原地修改,不依赖返回值形态
print('单位向量:', vector, '长度:', vector.Magnitude)
local other = Vector3.New(1, 2, 3)
print('点积:', vector:Dot(other), '叉积:', vector:Cross(other))函数
Length
签名:Length() -> Float
计算向量的长度(模),返回一个标量。
返回值 Float
计算向量的长度
lua
-- @runtime client
-- 构造一个向量
local v = Vector3(3, 4, 0)
-- 计算长度
local len = v:Length()
-- 输出结果:5
print("Length:", len)Normalize
签名:Normalize() -> Vector3
原地归一化当前向量;调用方应读取修改后的原变量,不依赖返回值。
返回值 Vector3
原地归一化 Vector3
lua
-- @runtime client
local vector = Vector3.New(3, 0, 4)
vector:Normalize() -- 不依赖不同运行包中的返回值形态
print('归一化后的分量:', vector.x, vector.y, vector.z)
print('归一化后的长度:', vector:Length())Dot
签名:Dot(other: Vector3) -> Float
计算当前向量与另一个向量的点积,返回一个标量。
| 参数 | 类型 | 说明 |
|---|---|---|
other | Vector3 |
返回值 Float
计算两个向量的点积
lua
-- @runtime client
-- 构造两个向量
local v1 = Vector3(1, 2, 3)
local v2 = Vector3(4, 5, 6)
-- 计算点积
local dot = v1:Dot(v2)
print("Dot:", dot)Cross
签名:Cross(other: Vector3) -> Vector3
计算当前向量与另一个向量的叉积,返回一个新的 Vector3。
| 参数 | 类型 | 说明 |
|---|---|---|
other | Vector3 |
返回值 Vector3
计算两个向量的叉积
lua
-- @runtime client
-- 构造两个向量
local v1 = Vector3(1, 0, 0)
local v2 = Vector3(0, 1, 0)
-- 计算叉积,结果应为 (0, 0, 1)
local crossV = v1:Cross(v2)
-- 输出结果
print("Cross:", crossV.x, crossV.y, crossV.z)Lerp
签名:Lerp(goal: Vector3, alpha: Float) -> Vector3
在当前向量与目标向量之间进行线性插值,返回一个新的 Vector3。
| 参数 | 类型 | 说明 |
|---|---|---|
goal | Vector3 | |
alpha | Float | 插值因子 [0, 1] |
返回值 Vector3
在两个向量之间进行线性插值
lua
-- @runtime client
-- 构造起始和目标向量
local startV = Vector3(0, 0, 0)
local goalV = Vector3(10, 10, 10)
local lerpV = startV:Lerp(goalV, 0.3)
print("Lerp:", lerpV.x, lerpV.y, lerpV.z)Max
签名:Max(others: Vector3) -> Vector3
返回一个新的 Vector3,其每个分量取当前向量与另一个向量对应分量的最大值。
| 参数 | 类型 | 说明 |
|---|---|---|
others | Vector3 |
返回值 Vector3
取两个向量各分量的最大值
lua
-- @runtime client
-- 构造两个向量
local v1 = Vector3(1, 5, 3)
local v2 = Vector3(4, 2, 6)
-- 取各分量最大值
local maxV = v1:Max(v2)
print("Max:", maxV.x, maxV.y, maxV.z)Min
签名:Min(others: Vector3) -> Vector3
返回一个新的 Vector3,其每个分量取当前向量与另一个向量对应分量的最小值。
| 参数 | 类型 | 说明 |
|---|---|---|
others | Vector3 |
返回值 Vector3
取两个向量各分量的最小值
lua
-- @runtime client
-- 构造两个向量
local v1 = Vector3(1, 5, 3)
local v2 = Vector3(4, 2, 6)
-- 取各分量最小值
local minV = v1:Min(v2)
print("Min:", minV.x, minV.y, minV.z)Abs
签名:Abs() -> Vector3
返回一个新的 Vector3,其每个分量是原向量对应分量的绝对值。
返回值 Vector3
对向量各分量取绝对值
lua
-- @runtime client
-- 构造一个包含负分量的向量
local v = Vector3(-3.5, 2.0, -1.2)
-- 调用 Abs 获取各分量绝对值的新向量
local absV = v:Abs()
print("Abs:", absV.x, absV.y, absV.z)Ceil
签名:Ceil() -> Vector3
返回一个新的 Vector3,其每个分量是原向量对应分量向上取整的结果。
返回值 Vector3
对向量各分量向上取整
lua
-- @runtime client
-- 构造一个带小数的向量
local v = Vector3(1.2, 3.7, -0.5)
-- 调用 Ceil 获取各分量向上取整的新向量
local ceilV = v:Ceil()
print("Ceil:", ceilV.x, ceilV.y, ceilV.z)Floor
签名:Floor() -> Vector3
返回一个新的 Vector3,其每个分量是原向量对应分量向下取整的结果。
返回值 Vector3
对向量各分量向下取整
lua
-- @runtime client
-- 构造一个带小数的向量
local v = Vector3(1.8, -2.3, 3.9)
-- 调用 Floor 获取各分量向下取整的新向量
local floorV = v:Floor()
print("Floor:", floorV.x, floorV.y, floorV.z)Sign
签名:Sign() -> Vector3
返回一个新的 Vector3,其每个分量是原向量对应分量的符号(正为 1,负为 -1,零为 0)。
返回值 Vector3
获取向量各分量的符号
lua
-- @runtime client
-- 构造一个包含正负零的向量
local v = Vector3(-3.5, 0.0, 2.1)
-- 调用 Sign 获取各分量符号
local signV = v:Sign()
print("Sign:", signV.x, signV.y, signV.z)FuzzyEq
签名:FuzzyEq(other: Vector3, epsilon: Float) -> Bool
判断当前向量与另一个向量是否在给定误差范围内近似相等。
| 参数 | 类型 | 说明 |
|---|---|---|
other | Vector3 | |
epsilon | Float | 允许的误差范围 |
返回值 Bool
近似比较两个向量是否相等
lua
-- @runtime client
-- 构造两个非常接近的向量
local v1 = Vector3(1.0001, 2.0001, 3.0001)
local v2 = Vector3(1.0002, 2.0002, 3.0002)
-- 使用 FuzzyEq 判断是否在误差范围内相等
local isEqual = v1:FuzzyEq(v2, 0.001)
-- 输出结果:true(误差小于 0.001)
print("FuzzyEq:", isEqual)Angle
签名:Angle(other: Vector3) -> Float
计算当前向量与另一个向量之间的夹角,返回弧度值。
| 参数 | 类型 | 说明 |
|---|---|---|
other | Vector3 |
返回值 Float
计算两个向量之间的夹角(弧度)
lua
-- @runtime client
-- 构造两个向量
local v1 = Vector3(1, 0, 0)
local v2 = Vector3(0, 1, 0)
-- 计算夹角(弧度)
local angle = v1:Angle(v2)
-- 输出结果:约 1.5708(π/2)
print("Angle:", angle)属性
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
x | Float | - | 向量的 X 坐标分量。 |
y | Float | - | 向量的 Y 坐标分量。 |
z | Float | - | 向量的 Z 坐标分量。 |
Magnitude | Float | - | 返回向量的长度(模),即 sqrt(x^2 + y^2 + z^2)。(只读) |
Unit | Vector3 | - | 返回与原向量方向相同的单位向量,长度为 1。(只读) |
Pitch | Float | - | 返回向量的俯仰角(弧度),由方向向量推算。(只读) |
Yaw | Float | - | 返回向量的偏航角(弧度),由方向向量推算。(只读) |
