Comunidad Game Maker

Ayuda => Desarrollo de Scripts => Mensaje iniciado por: bygdle en Mayo 08, 2016, 02:39:21 AM

Título: Interpolación lineal en GM8
Publicado por: bygdle en Mayo 08, 2016, 02:39:21 AM
Autor: NiuWeb
Versión de GM utilizada: GM8.0, no he probado si funciona en anteriores, ni tengo cómo.
Descripción: Una emulación sencillísima de la función lerp() de GMS. No me sé la fórmula de la interpolación lineal, ni tengo idea de cómo trabaja la misma en GMS. Pero lo importante es que hace el mismo trabajo xDD
Códigos:
Función lerp(a, b, amt);
[gml]
///lerp(a, b, amt);
var a, b, amt;
a = argument0;
b = argument1;
amt = argument2;
var w, p;
w = b - a;
p = w*amt;
return a + p;
[/gml]
Argumentos:
a: El primer valor a interpolar.
b: El segundo valor a interpolar.
amt: La cantidad a interpolar.

Ejemplo:
[gml]
lerp(10, 15, 0.5); //Devuelve 12.5
lerp(7, 24, 0.2); //Devuelve 11.4 aprox.
lerp(12, 18, 1.5); //Devuelve 21.
lerp(21, 3, 0.5); //Devuelve 12.
[/gml]

Es muy corto, pero qué se le hace, funciona xD. Espero le pueda ser de utilidad a alguien que aún use GM8 xD
Título: Re:Interpolación linear en GM8
Publicado por: kostra en Mayo 14, 2016, 01:43:55 PM
en suiza, cuando me puse a empoyar gml, me trabe con esta funcion, no comprendia que narices es una interpolacion linear (linear o lineal? :S) mire videos y videos y nada, no me empano, pero yo solo haciendo miles de pruebas llegue a la conclusion de que:

lerp(a,b,amt) es igual a (b-a)*amt

lo que no entiendo esa ultima suma de la a... en mis pruebas no me cuadra xd
Título: Re:Interpolación lineaLL en GM8
Publicado por: bygdle en Mayo 14, 2016, 06:27:21 PM
Cita de: kostra en Mayo 14, 2016, 01:43:55 PM
en suiza, cuando me puse a empoyar gml, me trabe con esta funcion, no comprendia que narices es una interpolacion linear (linear o lineal? :S) mire videos y videos y nada, no me empano, pero yo solo haciendo miles de pruebas llegue a la conclusion de que:

lerp(a,b,amt) es igual a (b-a)*amt

lo que no entiendo esa ultima suma de la a... en mis pruebas no me cuadra xd
Lol xD, juro que en algún lugar lo había leído así xD, o quizás el sueño que tenía cuando lo leí xD :-[

La suma es para que la función devuelva un valor entre los otros dos. Con esto me refiero que lerp(5, 15, 0.5), sin la suma, devolvería: 15-5=10, 10*0.5=5. Pero obviamente 5 no es el resultado, ya que está devolviendo el mismo primer valor. Por eso la suma. a+5= 5+5=10, y el "centro", por decirlo así (o promedio, pero sólo si la cantidad a interpolar es 0.5), de los dos números es 10.

E incluso uno más sencillo: lerp(5, 10, 1) debería dar 10. Pero si le quitamos la suma, quedaría 5. ¿Por qué? porque b-a=10-5=5, y 5*1=5  :o