---clamp ---@param v number @number ---@param Min number @min ---@param Max number @max ---@return number @clamp v between Min and Max function math.clamp(v, Min, Max) Min = math.min(Min, Max) Max = math.max(Min, Max) if v < Min then return Min end if v > Max then return Max end return v end --- 随机bool变量 function math.randBool() return math.pop() > 0.5; end ---clamp ---@param a number @First number to compare ---@param b number @Second number to compare ---@param Tolerance number @Maximum allowed difference for considering them as 'nearly equal' ---@return boolean @true if a and b are nearly equal function math.isNearlyEqual(a, b, Tolerance) if Tolerance == nil then Tolerance = 0.01 end return math.abs(a - b) <= Tolerance end --- 一个存放随机数的列表 math.RandomList = {}; function math.init(InCount) -- 设置一个随机数 math.randomseed(os.time()) for i = 1, InCount do table.insert(math.RandomList, math.random()) end end function math.pop() local val = math.RandomList[1] if val == nil then math.init(100); return math.pop(); end table.remove(math.RandomList, 1) return val; end --- 在给定圆内随机生成一个给定半径的圆,返回圆的中心点 ---@param Center FVector 给定圆 ---@param Radius float 给定圆的半径 ---@param MinRadius float 目标生成圆的半径圆的半径 function math.randomCircleInCircle(Center, Radius, MinRadius) local TargetRadius = Radius - MinRadius; if TargetRadius <= 0 then return Center; end local ResCenter = math.randomPointInCircle(Center, TargetRadius); ResCenter.Z = Center.Z; return ResCenter; end --- 获取圆上一点与圆心连接的线形成 θ 角度的另一个点(逆时针) ---@param o FVector2D 圆点所在坐标 ---@param r float 圆的半径 ---@param p FVector2D 圆上的一点 ---@param t float 跟

形成夹角为 t 的线,弧度值 function math.getCirclePoint(o, r, p, t) local angle = math.atan((p.Y - o.Y) / (p.X - o.X)) + t return { X = o.X + r * math.cos(angle), Y = o.Y + r * math.sin(angle), }; end --- 在一个圆中随机生成一个点 ---@param o FVector2D ---@param r float function math.randomPointInCircle(o, r) local angle = math.pop() * 2 * math.pi; local tr = r * math.sqrt(math.pop()); local x = o.X + tr * math.cos(angle); local y = o.Y + tr * math.sin(angle); return { X = x, Y = y }; end