General math (Español)

Esta pagina lista una serie de funciones matematicas utiles para la programación de un juego. Generalmente son cortas, simples y optimas.

-- Hace un promedio entre una cantidad de ángulos arbitraria, en radianes.
function math.averageAngles(...)
	local x,y = 0,0
	for i=1,select('#',...) do local a= select(i,...) x, y = x+math.cos(a), y+math.sin(a) end
	return math.atan2(y, x)
end


-- Devuelve la distancia entre dos puntos.
function math.dist(x1,y1, x2,y2) return ((x2-x1)^2+(y2-y1)^2)^0.5 end
-- Devuelve la distancia entre dos puntos en 3D.
function math.dist(x1,y1,z1, x2,y2,z2) return ((x2-x1)^2+(y2-y1)^2+(z2-z1)^2)^0.5 end


-- Devuelve el ángulo entre dos vectores asumiendo que tienen el mismo origen.
function math.angle(x1,y1, x2,y2) return math.atan2(y2-y1, x2-x1) end


-- Devuelve el multiplo de 'tamaño' más cercano (Si no pones nada, 'tamaño' sera 10).
function math.multiple(n, tamaño) tamaño = tamaño or 10 return math.round(n/tamaño)*tamaño end


-- Fija a un número entre un cierto rango.
function math.clamp(low, n, high) return math.min(math.max(low, n), high) end


-- Hace una interpolación lineal entre dos números.
function lerp(a,b,t) return (1-t)*a + t*b end
function lerp2(a,b,t) return a+(b-a)*t end

-- Have una interpolación del coseno entre dos números.
function cerp(a,b,t) local f=(1-math.cos(t*math.pi))*.5 return a*(1-f)+b*f end


-- Normaliza dos números.
function math.normalize(x,y) local l=(x*x+y*y)^.5 if l==0 then return 0,0,0 else return x/l,y/l,l end end


-- Devuelve 'n' redondeada a el 'deci' más cercano.
function math.round(n, deci) deci = 10^(deci or 0) return math.floor(n*deci+.5)/deci end


-- Alatoriamente devuelve -1 r 1.
function math.rsign() return love.math.random(2) == 2 and 1 or -1 end


-- Devuelve 1 si el número es positivo, -1 si es negativo, o 0 si es 0.
function math.sign(n) return n>0 and 1 or n<0 and -1 or 0 end


Other Languages