Wie kann ich ein Objekt in einer "Unendlichkeit" - oder "Figur 8" -Trajektorie bewegen?


28

Wenn ich ein Objekt um einen Punkt bewegen möchte, mache ich Folgendes:

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

Wie kann man Punkte auf der Flugbahn mit dem Acht- oder Unendlichzeichen bewegen?

Antworten:



61

Wie Marton feststellt, gibt es mehrere "Achterkurven", die Ihren Anforderungen entsprechen könnten. Das vielleicht einfachste ist das Lemniskat von Gerono mit der Parametrisierung:

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

und sieht so aus:

Lemniskate von Gerono Animation

Die Lemniskate von Bernoulli mag jedoch optisch ansprechender sein; Es hat eine Parametrisierung, die der Lemniskate von Gerono sehr ähnlich ist, mit der Ausnahme, dass beide Achsen mit dem folgenden Faktor skaliert sind 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;

Es sieht aus wie das:

Lemniskate der Bernoulli-Animation

(Mit Maple 13 erstellte Animationen, die mit GIFsicle komprimiert wurden.)


Ich danke Ihnen allen für Ihre Unterstützung, die mir mein erstes goldenes Abzeichen hier bei gamedev eingebracht hat! :-)
Ilmari Karonen

1
+1 für das Posten nicht nur der Links, sondern auch der Formeln und Grafiken (mit Quellen).
Rootlocus

2
So wie es ist, sollte dies die akzeptierte Antwort sein.
Brian H.

-1

Ich habe zufällig eine andere gefunden, die diese Formel verwendet:

x2=y2+0.1x2.8

Wie von Wolfram Alpha geplottet :

ein halbes Unendlichkeitssymbol


Im Gegensatz zu den anderen Antworten wird diese derzeit nicht in parametrischer Form dargestellt, sodass wir die Position im Laufe der Zeit leicht nach vorne bringen können t. Ich würde empfehlen, eine Beschreibung hinzuzufügen, wie Sie diese Formel verwenden, um ein sich bewegendes Objekt im Laufe der Zeit zu positionieren.
DMGregory

-4

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

ein halbes Unendlichkeitssymbol

Das Produkt der Abstände von einem beliebigen Punkt auf dieser Kurve zu (-1, 0) und zu (1,0) ist konstant und gleich 1.


4
Diese Antwort enthält eine Formel, die eine solche Kurve modelliert, jedoch keine Methode zum "Bewegen eines Objekts" in der Weise, dass es dieser Kurve folgt. Bitte überlegen Sie sich, wie Sie mit dieser Mathematik ein Objekt in einem Spiel bewegen können.
DMGregory
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.