---@class q4f local q4f = { ---@type number x = 0, ---@type number y = 0, ---@type number z = 0, ---@type number w = 0 } ---@overload fun(): q4f ---@overload fun(q: q4f): q4f ---@overload fun(x: number, y: number, z: number, w: number): q4f ---@overload fun(v: v4f): q4f ---@return q4f function q4f.new() end ---@return q4f function q4f.zero() end ---@return q4f function q4f.identity() end ---@param angle degf | radf ---@param axis v3f ---@return q4f function q4f.make_from_axis_angle(angle, axis) end ---@param roll degf | radf ---@param pitch degf | radf ---@param yaw degf | radf ---@return q4f function q4f.make_from_euler_angles(roll, pitch, yaw) end ---@param l q4f ---@param r q4f ---@return boolean function q4f.approximately(l, r) end ---@param l q4f ---@param r q4f ---@return number function q4f.dot(l, r) end ---@param l q4f ---@param r q4f ---@return number function q4f.abs_dot(l, r) end ---@param q q4f ---@return number function q4f.length_squared(q) end ---@param q q4f ---@return number function q4f.length(q) end ---@param q q4f ---@return q4f function q4f.normalized(q) end ---@param l q4f ---@param r q4f ---@param v number ---@return q4f function q4f.lerp(l, r, v) end ---@param q q4f ---@return q4f function q4f.inversed(q) end ---@param q q4f ---@return q4f function q4f.conjugated(q) end ---@param q q4f ---@return q4f function q4f.contains_nan(q) end ---@type q4f _G.q4f = _G.q4f or q4f