Quelles sont certaines méthodes pour représenter les voies ferrées?

21

J'ai étudié la question il y a quelque temps pour un petit projet, mais je ne suis pas allé trop loin. Je voudrais créer un petit programme qui permet à un utilisateur de dessiner une voie ferrée et permet ensuite à un "train" de suivre ladite voie sur un plan 2D. J'aimerais que la piste soit assez libre et donne une belle ligne lisse. J'ai joué avec des splines cubiques et obtenu des résultats décents, mais j'ai eu beaucoup de mal à faire suivre le train à la spline par le train. J'ai également eu beaucoup de mal à créer plusieurs voies et à changer de train d'une voie à l'autre.

Quelqu'un at-il des conseils, des articles ou du code source qui peuvent m'aider à comprendre quelque chose? Merci!

hokiecsgrad
la source
3
Il serait utile que vous décriviez les problèmes que vous rencontrez.
Rachel Blum
1
J'adorerais voir une démo de votre jeu.
ashes999

Réponses:

10

Lorsque je dessine des pistes ou des routes, je veux toujours commencer par les splines. Cependant, la dernière fois que j'ai eu du mal avec les splines (comme le mentionne Rachel Blum , le mouvement fluide sur une spline est dégueulasse à cause du paramétrage et des distances), quelqu'un m'a suggéré que de nombreuses routes réelles utilisent des arcs de cercle au lieu de splines. La courbure constante facilite le calcul des distances et le déplacement à une vitesse constante le long d'elles. De plus, ils ont l'air bien.

J'ai commencé à jouer avec des routes qui alternaient des arcs de cercle et des lignes droites. C'est similaire à l'approche de Will mais les arcs circulaires ont un rayon variable. J'étais assez content de cette approche mais je n'ai finalement rien fait avec. Essayez cette démo (Flash): les commandes à gauche sont pour les splines et les commandes à droite sont pour un arc circulaire (utilisez le curseur pour contrôler la longueur et la poignée de glissement pour contrôler l'angle). Faites une courbe très serrée en faisant glisser l'extrémité de la route pour voir à quel point l'arc circulaire est plus beau.

Alternativement, si vous voulez jouer avec des grilles (suggérées par Iain ), essayez de dessiner bord à bord au lieu de carré en carré. Voici une démo (applet Java).

amitp
la source
7

L'utilisation de cannelures hermite appropriées peut conduire à des virages serrés et ressembler plutôt à une voie sans train:

utilisant des cannelures hermite

J'ai eu des résultats beaucoup plus agréables en traitant le chemin comme des lignes droites joignant des cercles aux articulations:

entrez la description de l'image ici

L'astuce consiste à calculer les tangentes intérieure et extérieure des cercles de joints adjacents et à calculer l'enroulement de chaque joint de sorte que vous passiez sur le côté droit de celui-ci.

Et, dans la logique de pose de voies, évitez les auto-intersections de chemins ou transformez-les en jonctions :)

Voici une vidéo utilisant cette approche: http://www.youtube.com/watch?v=PAVksn4btKU

Volonté
la source
6

Vous pouvez essayer de laisser l'utilisateur créer les pistes à l'aide de spirales Cornu . Vous trouverez pratiquement aucune documentation à ce sujet en ligne, car les splines sont de facto le moyen de représenter les courbes dans un logiciel. Néanmoins, c'est la façon dont les voies ferrées sont empruntées. Raph Levien a fait beaucoup de travail pour les populariser .

munificent
la source
2

Vous pouvez essayer une approche basée sur une grille où chaque carré peut être lié à un ou plusieurs autres carrés. Vous pourriez alors avoir des morceaux qui couvrent plusieurs carrés, pour créer des courbes plus lisses. Fondamentalement modulaire, comme un train.

Iain
la source
1
J'ai essayé quelque chose de similaire à une approche basée sur une grille. J'ai essentiellement créé des morceaux de piste afin que vous puissiez les cliquer ensemble de manière à donner un peu plus de liberté que les simples grilles. Concept très similaire, je pense. Cela a bien fonctionné, mais dessiner les pistes en sélectionnant la pièce appropriée à chaque fois.
hokiecsgrad
2

J'ai essayé diverses techniques pour mettre en place des voies ferrées, et j'ai trouvé que des sections de cercles et de lignes droites donnaient le meilleur résultat et les mathématiques les plus simples pour faire fonctionner le train.

Malheureusement, cela a également rendu la pose de la piste assez compliquée et peu intuitive, car de petits mouvements des points de contrôle enverront la piste dans une direction complètement différente.

Le calcul pour décider de la disposition de la piste devient assez délicat, tout comme l'ajout de points de contrôle.

J'ai une courte démo sur http://www.dailymotion.com/video/xgl2kp_openrailz-tech-demo-3_videogames .

small_duck
la source
-1

Peut-être que cela sera utile:
Comportements de pilotage pour les personnages autonomes: http://www.red3d.com/cwr/steer/

Gregory
la source
les trains ne sont-ils pas captifs de leurs voies?
Will
@ Will: il y a une sous-section (que je n'ai pas lue) sur le chemin suivant red3d.com/cwr/steer/PathFollow.html
'.
oui mais un train sur une voie ne peut que changer de vitesse. Son chemin est dicté par la piste?
Will