It was sitting in The Tabletop Simulator.
proc
atan2(x, y)
. = (x||y) && (x>=0?arccos(y/sqrt(x*x+y*y)):-arccos(y/sqrt(x*x+y*y)))
hypot(x, y)
. = sqrt(x*x + y*y)
lerp(a, b, t) // lerp(a, b, t) = c
. = a*(1-t) + b*t
inv_lerp(a, b, c) // inv_lerp(a, b, c) = t
. = (a - c) / (a - b)
randn(a, b)
. = lerp(a, b, rand())
clamp(n, a, b)
. = min(max(n, a), b)
clamp_angle(angle)
. = angle - round(angle, 360)
dir2angle(dir)
var global/dir2angle[] = list(0, 180, null, 90, 45, 135, 90, -90, -45, -135, -90, null, 0, 180, null)
. = (dir in 1 to 15) && dir2angle[dir]
sign(n)
. = n && n / abs(n)
lerp_angle(a, b, c)
. = lerp(a, a + clamp_angle(b - a), c)
hypot is for calculating the hypotenuse of a triangle from opposite and adjacent lengths.
lerp is for interpolating two points between a, b, at distance factor t
clamp() is for sensuring n is between a and b
clamp_angle is for clamping an angle between 0 and 360
dir2angle converts a dir to an angle in degrees.
sign returns positive or negative one depending if the input is positive or negative. Zero if neither.
lerp_angle is linear interpolation for an angle in degrees.
These are common helper functions when doing basic trig work.