39 lines
1.2 KiB
Lua
39 lines
1.2 KiB
Lua
|
|
---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
|
|
|
|
---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
|
|
|
|
--- 获取圆上一点与圆心连接的线形成 θ 角度的另一个点(顺时针)
|
|
---@param o FVector2D 圆点所在坐标
|
|
---@param r float 圆的半径
|
|
---@param p FVector2D 圆上的一点
|
|
---@param t float 跟 <p> 到 <o> 形成夹角为 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 |