¿Cómo puedo mover un objeto en una trayectoria de "infinito" o "figura 8"?

28

Cuando quiero mover objetos alrededor del punto, lo hago:

    point.x *= cosf(timer.timeElapsed);
    point.y *= sinf(timer.timeElapsed);

¿Cómo hacer que el punto se mueva en una trayectoria de ocho o signos de infinito?

Yevhen
fuente

Respuestas:

61

Como señala Marton, hay varias curvas de "figura de ocho" que podrían ajustarse a sus necesidades. Quizás el más simple es el lemniscate de Gerono , que tiene la parametrización:

x = cos(t);
y = sin(2*t) / 2;

y se ve así:

Animación Lemniscate de Gerono

Sin embargo, el lemniscate de Bernoulli puede ser visualmente más agradable; tiene una parametrización muy similar al lemniscate de Gerono, excepto que ambos ejes están escalados por un factor de 1/(sin(t)^2 + 1) = 2/(3 - cos(2*t)):

scale = 2 / (3 - cos(2*t));
x = scale * cos(t);
y = scale * sin(2*t) / 2;

Se parece a esto:

Animación de Lemniscate de Bernoulli

(Animaciones hechas con Maple 13, comprimidas con GIFsicle).

Ilmari Karonen
fuente
¡Gracias a todos por su apoyo, que me ha valido mi primera insignia de oro aquí en gamedev! :-)
Ilmari Karonen
1
+1 por no solo publicar los enlaces, sino también las fórmulas y los gráficos (con las fuentes).
rootlocus
2
Como es, esta debería ser la respuesta aceptada.
Brian H.
-1

Al azar encontré otro usando esta fórmula:

x2=y2+0.1x2.8

Como lo trazó Wolfram Alpha :

mitad de un símbolo de infinito

usuario75095
fuente
A diferencia de las otras respuestas, esta actualmente no se presenta en forma paramétrica que nos permite avanzar fácilmente la posición con el tiempo t. Recomiendo incluir una descripción de cómo usaría esta fórmula para colocar un objeto en movimiento a lo largo del tiempo.
DMGregory
-4

((x+1)2+y2)((x1)2+y2)=1

mitad de un símbolo de infinito

El producto de las distancias desde cualquier punto de esa curva a (-1, 0) y a (1,0) es constante e igual a 1.

usuario111508
fuente
44
Esta respuesta proporciona una fórmula que modela dicha curva, pero no un método para "mover un objeto" de tal manera que siga esa curva. Considere elaborar la respuesta para indicar cómo usaría estas matemáticas para mover un objeto en un juego.
DMGregory