local M = {} function M.copy(t) local c = {} for k,v in pairs(t) do c[k] = v end return c end function M.deepcopy(t) local copied = {} local function dc(t) if not copied[t] then local c = {} copied[t] = c for k,v in pairs(t) do if type(v) == 'table' then v = dc(v) end c[k] = v end end return copied[t] end return dc(t) end function M.rot(a, x, y) return x*math.cos(a) - y*math.sin(a), x*math.sin(a) + y*math.cos(a) end function M.magnitude(v) local s = 0 for _, a in ipairs(v) do s = s + a*a end return math.sqrt(s) end return M