Bon, pour mon simulateur de réseau ferroviaire, j'ai mis au point le système de voie qui servira à afficher les voies ferrées à l'écran.

Pour afficher correctement une voie avec tous les appareils de voie, le ballast et les traverses (ou n'importe quoi d'autre), il ne suffit pas de coller comme un mal propre quelques images en croisant les doigts pour que ça tienne. Et pour pouvoir représenter une traversée jonction double, il faut un petit moment de reflexion pour que tout rentre bien.

Le principe est d'utiliser des images transparentes savamment intercalées afin de produire l'effet recherché. Derrière ce charabia à tendance juridique se cache une idée très simple : on dessine d'abord le ballast, puis les traverses, puis enfin les rails. Pourquoi pas tout d'un coup ? En fait, pour pouvoir correctement dessiner les appareils de voie (les aiguillages), il ne faut pas que le ballast et les traverses soient redessinées par dessus les rails deja dessinés. Le probleme se pose également entre le ballast et les traverses

Une fois le probleme des traverses reglé, il faut voir si le système permet de représenter les appareils de voie complexe, comme les traversées jonctions simples et double, ainsi que les croisements en tout genre. Je suis partit du principe que "qui peut le plus peut le moins" et que si j'arrive a modéliser une traversée, le reste suivrait sans probleme.

Déjà, présentons la bête en taille réelle :

Une traversée jonction double

Deux voies se croisent et l'appareil permet indiferrement d'aller sur l'une ou l'autre des voies de sortie à partir de l'une ou l'autre des deux voies d'entrée.

A partir de mon idée de quadrillage, je me suis dit qu'il pouvait être fait la même chose. Voila deja le schéma de conception :

Schéma d'une traversée jonction double

Les pièces numérotées en noir sont les voies de passages. Les voies 14 et 16 sont des morceaux d'aiguillage simple. La voie 15 est un croisement à 45° de la voie 7. On s'aperçoit que les voies 17 et 18, qui forment la traversée (avec les voies 15 et 7) sont les mêmes que les 14 et 16. Si ça marche sur le schéma de principe, ça devrait fonctionner sur un schéma à l'échelle.

J'ai donc pris comme unité de quadrillage des images de 99 pixels sur 99. Cela permet d'avoir une diagonale mesurant l'équivalent de 140 pixels alignés (en considérant que les pixels sont carrés). Cela dit, en fait, une diagonale d'un carré de 99 pixels de coté comprend... 99 pixels ! C'est le genre de petites subtilités qui fait faire plein d'erreurs si on ne prend pas garde à la façon dont on raisonne... Cela donne, pour une vois simple :

Un tronçon de voie

Cela commence à se corcer lorsque l'on veut faire une vois en diagonale, parce qu'une bête rotation ne suffit pas. Et puis, il fallait que le cadre rose reste à la même position. De plus, il faut faire en sorte que les rails dépassent de ce cadre afin qu'ils soient reliés aux rails situés sur la diagonale. J'ai pensé très brievement à utiliser des hexagones, mais non, beaucoup trop complexe pour modéliser un réseau physique. J'ai donc dû calculer de combien de pixels les rails allaient déborder (Vive Pythagore). Au final, ça donne ça :

Une voie en diagonale

La troisième pièce, la plus dure à réaliser, est la courbe, nécessaire pour décrocher d'une voie verticale vers une voie en diagonale. Le plus chiant a été de bien faire coïncider les morceaux de rails avec des courbes harmonieuses et tengeantes à la droite de sortie.

Une voie en courbe

Une fois les éléments de base fabriqués, il ne reste qu'à les imbriquer les uns dans les autres, en les faisant pivoter si besoin est. Le résultat est particulièrement réussi :

Le résultat avec les voies assemblées

Une fois cette image obtenue, on peut enlever toutes les traces de conception, ce qui donne un résultat qui sera proche de la réalité :

Une traversée jonction double représentée à l'aide de morceaux de voies simples