Ich habe vor einiger Zeit nach einem kleinen Projekt gesucht, bin aber nicht zu weit gekommen. Ich möchte ein kleines Programm erstellen, mit dem ein Benutzer ein Gleis zeichnen und dann einem "Zug" erlauben kann, dem Gleis in einer 2D-Ebene zu folgen. Ich möchte, dass der Track ziemlich frei ist und eine schöne glatte Linie ergibt. Ich spielte mit kubischen Splines herum und hatte gute Ergebnisse, aber ich hatte eine Menge Mühe, den Zug dazu zu bringen, dem Spline zu folgen. Ich hatte auch große Probleme, mehrere Gleise zu erstellen und einen Zug von einem Gleis auf ein anderes umzuschalten.
Hat jemand Ratschläge, Artikel oder Quellcode, die mir helfen können, etwas herauszufinden? Vielen Dank!
mathematics
hokiecsgrad
quelle
quelle
Antworten:
Beim Zeichnen von Tracks oder Straßen möchte ich immer mit Splines beginnen. Als ich das letzte Mal mit Splines kämpfte (wie Rachel Blum erwähnt, ist eine reibungslose Bewegung auf einem Spline sowohl aufgrund der Parametrisierung als auch der Entfernungen schwierig), schlug mir jemand vor, dass viele reale Straßen Kreisbögen anstelle von Splines verwenden. Die konstante Krümmung macht es einfach , Entfernungen zu berechnen und sich mit einer konstanten Geschwindigkeit entlang dieser zu bewegen. Außerdem sehen sie gut aus.
Ich begann mit Straßen zu spielen, die sich zwischen Kreisbögen und geraden Linien abwechselten. Es ähnelt Wills Ansatz, aber die Kreisbögen haben einen variablen Radius. Ich war mit diesem Ansatz sehr zufrieden, habe aber am Ende nichts damit gemacht. Probieren Sie diese Demo (Flash) aus: Die Steuerelemente auf der linken Seite sind für Splines und die Steuerelemente auf der rechten Seite für einen Kreisbogen (verwenden Sie den Schieberegler, um die Länge zu steuern, und den Ziehpunkt, um den Winkel zu steuern). Machen Sie eine sehr enge Kurve, indem Sie das Ende der Straße ziehen, um zu sehen, wie viel schöner der Kreisbogen aussieht.
Wenn Sie alternativ mit Gittern spielen möchten (vorgeschlagen von Iain ), versuchen Sie, von Kante zu Kante anstatt von Quadrat zu Quadrat zu zeichnen. Hier ist eine Demo (Java-Applet).
quelle
Die Verwendung geeigneter Hermite-Splines kann zu engen Ecken führen und sieht eher nicht wie ein Zug aus:
Ich habe viel erfreulichere Ergebnisse erzielt, wenn ich den Pfad als gerade Linien behandele, die Kreise an den Gelenken verbinden:
Der Trick besteht darin, die inneren und äußeren Tangenten benachbarter Gelenkkreise zu berechnen und die Wicklung jedes Gelenks so zu berechnen, dass Sie auf der rechten Seite davon vorbeigehen.
Vermeiden Sie in der Logik für das Verlegen von Pfaden Selbstkreuzungen oder verwandeln Sie sie in Kreuzungen :)
In diesem Video wird dieser Ansatz verwendet: http://www.youtube.com/watch?v=PAVksn4btKU
quelle
Sie können versuchen, den Benutzer die Tracks mit Cornu-Spiralen erstellen zu lassen . Sie finden nahezu keine Literatur dazu im Internet, da Splines de facto die Möglichkeit darstellen, Kurven in Software darzustellen. Nichtsdestotrotz ist dies die Art und Weise, wie die tatsächlichen Eisenbahnschienen befahren werden. Raph Levien hat viel Arbeit geleistet, um sie bekannt zu machen .
quelle
Sie können einen gitterbasierten Ansatz verwenden, bei dem jedes Quadrat mit einem oder mehreren anderen Quadraten verknüpft werden kann. Sie könnten dann einige Teile haben, die mehrere Quadrate abdecken, um glattere Kurven zu erzeugen. Grundsätzlich modular wie ein Zugset.
quelle
Ich habe verschiedene Techniken ausprobiert, um Schienen zu implementieren. Dabei stellte ich fest, dass Abschnitte mit Kreisen und geraden Linien das bestaussehendste Ergebnis und die einfachste Mathematik für den Betrieb des Zuges liefern.
Leider machte es auch das Verlegen der Strecke ziemlich kompliziert und wenig intuitiv, da kleine Bewegungen der Kontrollpunkte die Strecke in eine völlig andere Richtung lenken.
Die Mathematik für die Entscheidung, wie die Spur zu legen ist, wird ziemlich schwierig, ebenso wie das Hinzufügen weiterer Kontrollpunkte.
Ich habe eine kurze Demo auf http://www.dailymotion.com/video/xgl2kp_openrailz-tech-demo-3_videogames .
quelle
Vielleicht ist dies hilfreich:
Lenkverhalten für autonome Charaktere: http://www.red3d.com/cwr/steer/
quelle