2012-09-27 19 views
5

quiero hacer una animación en javascript donde un objeto se mueve en una ruta. Para esto necesito una función que me devuelva coordenadas X/Y en la ruta por un tiempo determinado. La ruta debe ser un triángulo con bordes suaves.Función para obtener coordenadas X/Y para mover en triángulo con bordes suaves

Al comienzo de la animación debe moverse suavemente en la ruta del triángulo, pero esto podría resolverlo quizás en una función diferente ... más importante para mí es la función que puede devolverme las coordenadas X/Y para el movimiento en el triángulo

La animación debe seguir un ciclo sin fin en la ruta del triángulo.

the animation path

¿Hay herramientas (en línea) para crear coordenadas para una animación de este tipo?

¿Alguien me puede ayudar con la función?

+0

probaría una [pursuit curve] (http://en.wikipedia.org/wiki/Pursuit_curve), donde sigue el cursor de su dibujo un punto invisible que se mueve en un camino de triángulo duro a cierta distancia, suavizando así los bordes. Esto también permitiría facilitar en el triángulo. –

+0

Recomiendo un bucle de Beziers al rescate, están bien documentados y se implementan fácilmente, y puede obtener la posición exacta en cualquier momento. Sin embargo, tienen una propiedad molesta de no mantener una velocidad constante a lo largo del camino, y tu animación será mucho más lenta en los extremos redondeados que a lo largo de los bordes. – Lyth

+0

a [superformula] (http://en.wikipedia.org/wiki/Superformula) con a = 3 podría ayudar – Bergi

Respuesta

1

Recomendaría algo como sqrt(x²+y²)=2.5+sin(atan2(y,x)*3)/5 - polar: ρ(θ)=2.5+sin(3θ)/5. Es un sencillo sistema de coordenadas polares, y la adición de una onda sinusoidal comprimido (3 períodos por turno) en un círculo:

θ(t) = t // angle 
ρ(t) = 2.5 + 0.2 * sin (t * 3) // radius 
// of course, you can play with the parameters :-) 

Usted puede fácilmente convert those polar coordinates into cartesion ones.

La animación al principio, moviéndose desde el centro hacia la ruta, necesitaría una función adicional, por supuesto. Sin embargo, podría hacerse con la misma mecánica, omitiendo la parte del círculo: ρ(θ)=2.5*sin(3θ)

+0

Gracias, eso es exactamente lo que necesitaba. Aquí hay un prototipo: http://jsfiddle.net/qgPVn/4/ Todavía estoy trabajando en el comienzo de la animación ... ¡Tan pronto como termine con este problema de la cuenta, aceptaré su respuesta! – Benjamin

Cuestiones relacionadas