Foro de elhacker.net

Programación => Java => Mensaje iniciado por: WHK en 20 Abril 2015, 22:33 pm



Título: Cómo crear una suma curva?
Publicado por: WHK en 20 Abril 2015, 22:33 pm
Hola, suena extraño pero en la práctica es lo mas común, la idea es que tengo el 0 como valor inicial y debo llegar al 300 de manera curva de mayor a menor, por ejemplo comenzando con 0, 10, 20, 30, 40 y luego 45, 50, 55, 60 y luego 63, 66, 69 y luego 70, 71, 72, 73 y así pero sin pasar a decimales.

Cómo puedo crear esta curva y como puedo personalizar la curva? ya que me gustaría definir por ejemplo que mi texto en una pantalla comienza haciendo un zoom muy rápido y cuando llegue a su tamaño original (mitad de pantalla) comience a bajar la velocidad y mantenerse hasta finalizar, es como en la presentación de una película o juego como cuando un logo aparece rápido y luego se calma mientras hay una imagen de fondo en movimiento, me gustaría aplicar esto mismo pero manualmente en java en una superficie GLES para la presentación de marcas antes de la ejecución principal de las ventanas de navegación de la aplicación.

Cómo hago esto de manera matemática sin utilizar apis y extras? teniendo en cuenta que tengo un integer llamado tick el cual va desde el valor cero hacia adelante aumentando su número por cada frame.

Intenté algo así:

Código:
Float text_size = tick + 0f;
text_size = text_size - ((tick + tick) / 5f);

Pero no resultó, pensé que por cada tick iba a aumentar en un punto el tamaño del texto y al pasar los tickets estos restaba una curva de 0.1, 0.2, 0.3 haciendo que la velocidad disminuyera pero por algún motivo no me resultó y aunque me hubiera resultado la curva sería demasiado pareja y tampoco e sla idea.

Alguien tiene alguna idea?


Título: Re: Cómo crear una suma curva?
Publicado por: WHK en 20 Abril 2015, 22:36 pm
Encontré una referencia de lo que necesito en jQuery (efecto easing) y se ve bastante complicado xD

Código:
$.easing.custom = function (x, t, b, c, d) {
    var s = 1.70158;
    if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
    return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
}


Título: Re: Cómo crear una suma curva?
Publicado por: WHK en 20 Abril 2015, 22:53 pm
Bueno, ya encontré lo que necesitaba :D
https://github.com/jesusgollonet/processing-penner-easing/tree/master/src

Realmente los efectos easing están basados en un trabajo de robert penner:
http://robertpenner.com/easing/

Acá está explicado de manera mas fácil:
http://upshots.org/actionscript/jsas-understanding-easing

Yo usé el de java :)


Título: Re: Cómo crear una suma curva?
Publicado por: r32 en 20 Abril 2015, 23:17 pm
WHK añado este paper que aunque se basa en criptografía algo tiene que ver con el tema y puede resultar de ayuda:

Criptografía con curvas elípticas:

http://www.exabyteinformatica.com/uoc/Informatica/Criptografia_avanzada/Criptografia_avanzada_%28Modulo_4%29.pdf (http://www.exabyteinformatica.com/uoc/Informatica/Criptografia_avanzada/Criptografia_avanzada_%28Modulo_4%29.pdf)

Saludos.