local Vector2D = {} 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 return Vector2D