109 lines
2.9 KiB
Lua
109 lines
2.9 KiB
Lua
VectorHelper = VectorHelper or {}
|
|
|
|
function VectorHelper.Dot(v1, v2)
|
|
return v1.X * v2.X + v1.Y * v2.Y + v1.Z * v2.Z
|
|
end
|
|
|
|
function VectorHelper.Mul(v1, v2)
|
|
return Vector.New(v1.X * v2.X, v1.Y * v2.Y, v1.Z * v2.Z)
|
|
end
|
|
|
|
function VectorHelper.MulNumber(v1, number)
|
|
return Vector.New(v1.X * number, v1.Y * number, v1.Z * number)
|
|
end
|
|
|
|
function VectorHelper.Sub(v1, v2)
|
|
return Vector.New(v1.X - v2.X, v1.Y - v2.Y, v1.Z - v2.Z)
|
|
end
|
|
|
|
function VectorHelper.Add(v1, v2)
|
|
return Vector.New(v1.X + v2.X, v1.Y + v2.Y, v1.Z + v2.Z)
|
|
end
|
|
|
|
function VectorHelper.NewVec(X, Y, Z)
|
|
return Vector.New(X, Y, Z)
|
|
end
|
|
|
|
function VectorHelper.VecToString(v)
|
|
return string.format("(%.2f,%.2f,%.2f)", v.X, v.Y, v.Z)
|
|
end
|
|
|
|
function VectorHelper.RotToString(v)
|
|
return string.format("(Roll = %.2f, Pitch = %.2f, Yaw = %.2f)", v.Roll, v.Pitch, v.Yaw)
|
|
end
|
|
|
|
function VectorHelper.Cross(v1, v2)
|
|
return Vector.New(
|
|
v1.Y * v2.Z - v2.Y * v1.Z,
|
|
v1.Z * v2.X - v2.Z * v1.X,
|
|
v1.X * v2.Y - v2.X * v1.Y)
|
|
end
|
|
|
|
function VectorHelper.GetDistance(vector1, vector2)
|
|
if vector1 == nil or vector2 == nil then return 0 end
|
|
if vector1.X == nil or vector2.X == nil then return 0 end
|
|
if vector1.Y == nil or vector2.Y == nil then return 0 end
|
|
if vector1.Z == nil or vector2.Z == nil then return 0 end
|
|
local disX = vector1.X - vector2.X
|
|
local disY = vector1.Y - vector2.Y
|
|
local disZ = vector1.Z - vector2.Z
|
|
return math.sqrt(disX ^ 2 + disY ^ 2 + disZ ^ 2)
|
|
end
|
|
|
|
function VectorHelper.GetDistance2D(vector1, vector2)
|
|
if vector1 == nil or vector2 == nil then return 0 end
|
|
if vector1.X == nil or vector2.X == nil then return 0 end
|
|
if vector1.Y == nil or vector2.Y == nil then return 0 end
|
|
local disX = vector1.X - vector2.X
|
|
local disY = vector1.Y - vector2.Y
|
|
return math.sqrt(disX ^ 2 + disY ^ 2)
|
|
end
|
|
|
|
function VectorHelper.LengthSquared(v)
|
|
return v.X ^ 2 + v.Y ^ 2 + v.Z ^ 2
|
|
end
|
|
|
|
function VectorHelper.Length(v)
|
|
return math.sqrt(VectorHelper.LengthSquared(v))
|
|
end
|
|
|
|
function VectorHelper.ToLuaTable(v)
|
|
return {X = v.X, Y = v.Y, Z = v.Z}
|
|
end
|
|
|
|
function VectorHelper.RotToLuaTable(v)
|
|
return {Roll = v.Roll, Pitch = v.Pitch, Yaw = v.Yaw}
|
|
end
|
|
|
|
function VectorHelper.RotZero()
|
|
return {Roll = 0, Pitch = 0, Yaw = 0}
|
|
end
|
|
|
|
function VectorHelper.NewRot(Roll, Pitch, Yaw)
|
|
return {Roll = Roll, Pitch = Pitch, Yaw = Yaw}
|
|
end
|
|
|
|
function VectorHelper.VectorZero()
|
|
return {X = 0, Y = 0, Z = 0}
|
|
end
|
|
|
|
function VectorHelper.ScaleOne()
|
|
return {X = 1, Y = 1, Z = 1}
|
|
end
|
|
|
|
function VectorHelper.Scale(InScalar)
|
|
return {X = InScalar, Y = InScalar, Z = InScalar}
|
|
end
|
|
|
|
function VectorHelper.RandomVector(v, radius)
|
|
local rx = math.random(-radius, radius);
|
|
local ry = math.random(-radius, radius);
|
|
return {X = v.X + rx, Y = v.Y + ry, Z = v.Z}
|
|
end
|
|
|
|
function VectorHelper.RandomRotatorYaw(r)
|
|
local rz = math.random(-360, 360);
|
|
return {Roll = r.Roll, Pitch = r.Pitch, Yaw = r.Yaw + rz}
|
|
end
|
|
|
|
return VectorHelper |