So lassen Sie ein Objekt reibungslos entlang einer gekrümmten Linie bewegen

7

Ich frage mich, wie man Objekte unter Berücksichtigung der Drehung bewegt, um einer gekrümmten Linie zu folgen

Ein Beispiel finden Sie unter: http://www.youtube.com/watch?v=iPpO24FeAX4

Insbesondere frage ich mich:

  1. wie man die Punkte speichert, wie viele Punkte man für eine glatte Linie wie diese speichert
  2. wie man die Kurven interpoliert
  3. wie man zwischen dem Objekt und dem ersten "Wegpunkt" entlang der Linie interpoliert
user2530
quelle

Antworten:

6

Schauen Sie sich Bezier-Kurven und Hermite-Kurven an , die Sie beide zu Splines zusammensetzen können. Beide haben normalerweise die Form einer parametrischen Gleichung, in der Sie eine Zeit tzwischen 0 und 1 eingeben. Zeit 0 wäre der Anfang des Splines, Zeit 1 wäre das Ende.

Bei der Drehung wird die Tangente an die Kurve berechnet.

4 Kontrollpunkte für das erste Segment, gefolgt von 3 zusätzlichen Punkten pro zusätzlichem Segment, sind für diese Art von Spline üblich, obwohl einige Typen möglicherweise mehr Punkte wünschen.

Beachten Sie, dass Sie bei parametrischen Splines häufig Schwierigkeiten haben, die Position auf dem Spline als Funktion der Entfernung anstelle der Zeit zu berechnen. Wenn Sie also die Frage "Ich habe die X-Entfernung verschoben, wo würde ich mich entlang der Kurve befinden" beantworten möchten, sind Sie Ich bin bereit für etwas Integration. In ähnlicher Weise kann die momentane Geschwindigkeit in Abhängigkeit von der Dichte und Position der Kontrollpunkte variieren.

schlanker
quelle
1

Ich habe dies in meinem Line-Drawing Game Starterkit implementiert und die Verwendung der überentwickelten Lösungen vermieden. Sie benötigen wahrscheinlich alle 10 Pixel einen Punkt, damit Sie eine anständig glatte Linie erhalten, ohne zu viel Speicher zu verwenden oder Anrufe zu zeichnen. Dann müssen Sie die Objekte einfach von Punkt A nach B bewegen. Damit sie sich reibungslos auf dem Weg bewegen, drehen Sie sie einfach in die Bewegungsrichtung. Dies geschieht im Laufe der Zeit und nicht sofort, sodass Sie nach einer gekrümmten Linienbewegung glatt werden, ohne Bezier-Kurven oder ähnliches verwenden zu müssen.

Die Punkte werden in einem einfachen Array in einer Path-Klasse gespeichert, die auch weiß, wie der Pfad mit OpenGL gezeichnet wird. Sie können eine beliebige Anzahl von Pfadpunkten haben, aber ich würde sie je nach Gerät und erforderlicher Glätte auf 50 bis 300 beschränken.

Um die Linie zu interpolieren, sollten Sie den Slide Averaging-Algorithmus (Theorie) von McMaster nachschlagen .

Das Objekt bewegt sich nur dann zum ersten Punkt, wenn der Benutzer mindestens zwei Punkte gezeichnet hat, um zu vermeiden, dass sich das Objekt wild dreht. Sobald Sie sich dem ersten Punkt nähern, entspricht dies dem Code des zweiten, dritten, vierten usw.

LearnCocos2D
quelle
-1

Die Antwort auf alle 3 ist normalerweise Splines oder eine andere ähnliche Kurve.

Codierer
quelle