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?

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.)


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


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.