Files
BusyRabbit/Content/Lua/Utils/Vector2D.lua
2025-10-08 02:52:32 +08:00

57 lines
1.2 KiB
Lua

local Vector2D = {
Zero = {X = 0, Y = 0}
}
function Vector2D.New(x, y)
return {X = x or 0, Y = y or 0}
end
function Vector2D.Add(a, b)
return Vector2D.New(a.X + b.X, a.Y + b.Y)
end
function Vector2D.Sub(a, b)
return Vector2D.New(a.X - b.X, a.Y - b.Y)
end
function Vector2D.Mul(v, s)
return Vector2D.New(v.X * s, v.Y * s)
end
function Vector2D.Div(v, s)
return Vector2D.New(v.X / s, v.Y / s)
end
function Vector2D.Magnitude(v)
return math.sqrt(v.X * v.X + v.Y * v.Y)
end
function Vector2D.Normalize(v)
local mag = Vector2D.Magnitude(v)
return mag > 0 and Vector2D.Div(v, mag) or Vector2D.New()
end
function Vector2D.Dot(a, b)
return a.X * b.X + a.Y * b.Y
end
-- 2D 叉积(返回标量)
function Vector2D.Cross(a, b)
return a.X * b.Y - a.Y * b.X
end
function Vector2D.ToUnrealEngine3D(vector, z)
local FVector = import("Vector")
local new_vector = FVector()
new_vector.Z = z
new_vector.X = vector.X
new_vector.Y = vector.Y
return new_vector
end
function Vector2D.Equals(a, b, tolerance)
local tol = tolerance or 0.001
print(tol, a.X-b.X, a.Y-b.Y)
return math.abs(a.X - b.X) < tol and math.abs(a.Y - b.Y) < tol
end
return Vector2D