Jak mogę przenieść obiekt po trajektorii „nieskończoności” lub „figury 8”?

28

Kiedy chcę przesunąć obiekt wokół punktu, robię:

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

Jak sprawić, by punkt poruszał się po trajektorii ósemki lub znaku nieskończoności?

Jewhen
źródło

Odpowiedzi:

61

Jak zauważa Marton, istnieje kilka „ośmiu” krzywych, które mogą pasować do twoich potrzeb. Być może najprostszym jest lemniscate Gerono , który ma parametryzację:

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

i wygląda następująco:

Animacja Lemniscate of Gerono

Jednak liscisate Bernoulliego może być przyjemniejsze wizualnie; ma parametryzację bardzo podobną do lemniscate Gerono, z tym wyjątkiem, że obie osie są skalowane przez współczynnik 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;

To wygląda tak:

Animacja Lemniscate of Bernoulli

(Animacje wykonane przy pomocy Maple 13, skompresowane przy pomocy GIFsicle.)

Ilmari Karonen
źródło
Dziękuję wszystkim za wsparcie, które przyniosło mi moją pierwszą złotą odznakę tutaj na gamedev! :-)
Ilmari Karonen
1
+1 za nie tylko publikowanie linków, ale także formuł i grafiki (ze źródłami).
rootlocus
2
W obecnej formie powinna to być zaakceptowana odpowiedź.
Brian H.,
-1

Losowo znalazłem inny, używając tej formuły:

x2=y2+0.1x2.8

Zgodnie z wykreśleniem Wolfram Alpha :

połowa symbolu nieskończoności

użytkownik75095
źródło
W przeciwieństwie do innych odpowiedzi, ta nie jest obecnie prezentowana w formie parametrycznej, co pozwala nam z łatwością przesuwać pozycję do przodu w czasie t. Polecam dołączenie opisu sposobu wykorzystania tej formuły do ​​pozycjonowania poruszającego się obiektu w czasie.
DMGregory
-4

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

połowa symbolu nieskończoności

Iloczyn odległości od dowolnego punktu na tej krzywej do (-1, 0) i do (1,0) jest stały i wynosi 1.

użytkownik111508
źródło
4
Ta odpowiedź zawiera formułę modelującą taką krzywą, ale nie metodę „przesunięcia obiektu” w taki sposób, aby podążał on za tą krzywą. Rozważ rozwinięcie odpowiedzi, aby wskazać, w jaki sposób użyjesz tej matematyki, aby przenieść obiekt w grze.
DMGregory