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?

Yevhen
quelle

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

Ilmari Karonen
quelle
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

user75095
quelle
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.

user111508
quelle
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