L`une des difficultés de la création de routes avec

Transcription

L`une des difficultés de la création de routes avec
Loop : making of
© JL Coste 2004
LOOP : LE MAKING OF
J’ai découvert BVE par hasard il y a quelques années, en cherchant des fichiers de routes pour
Mekanicks, un grand ancien. A cette époque, ni Trainz ni MSTS n’étaient sortis, ce qui plaçait BVE
comme LE simulateur de train par excellence.
D’emblée, j’ai été séduit par trois grandes routes, qui restent parmi mes préférées : Sandymill,
HeavyCoal, et Desert Freight USA. Elles dégagent une atmosphère particulière, à la fois de train réel,
d’exotisme, de mystère, de rêve, bref tout ce qui fait que l’on aime le train, et ce qui fait pour moi la
réussite d’une route.
Lors de la sortie de l’extension de Balfearn à Invernay, la présence d’un raccordement à la sortie de
Balfearn permettait de supposer l’existence d’une boucle possible partant de Sandymill par le tunnel
de droite. Comme Alice, j’ai toujours voulu savoir ce qu’il y avait derrière le miroir, alors découvrir
les paysages derrière ce tunnel…..
La tâche ne fut pas simple, car j’avais tout à apprendre, les commandes, la syntaxe, les astuces, comme
tout débutant. Mais peu à peu, en lisant les forums, en examinant les routes des autres auteurs, en
expérimentant une idée ou une autre, en mettant bout à bout tous les essais réalisés, Loop est née.
C’est devant le nombre de problèmes résolus parfois simples, parfois plus complexes, mais toujours
récurrents dans les forums, que je me suis décidé à écrire ce texte, afin que chacun puisse échanger ses
trouvailles.
Tout d'abord, il ne faut pas oublier que le tracé des voies de chemin de fer nécessite quelques notions
de mathématiques assez simples. D'autre part, BVE est un simulateur. Ce qui veut dire que c'est le
monde qui voyage autour du train, et non l'inverse. Il faudra donc toujours apprendre à BVE comment
faire pour que l'illusion à l'écran soit la plus parfaite possible.
Dans la mesure du possible, j’essaierai d’aller du plus simple au plus complexe, tout en conservant
l’ordre chronologique de réalisation.
1
Loop : making of
© JL Coste 2004
Le Tracé de la route.
Toute route devant raconter une histoire, le script fut facile à réaliser. Il y a deux rivières et un
raccordement entre Sandymill et Balfearn. Donc, au moins deux viaducs, et une grande gare de
bifurcation dans Loop. Celle-ci devant aller d’un point à un autre déjà fixés par Robert Glass dans
Sandymill, la première étape fut la réalisation du tracé de telle manière que les deux routes
parviennent au même point..
Pour ce faire, un tableur type Excel est l’outil idéal. Un peu de triangulation, donc de trigonométrie,
beaucoup de couper coller, quelques données à entrer, et hop, une belle carte facilement.
Comment faire ? C’est simple à partir de quelques notions de trigonométrie :
Prenons le triangle rectangle ABC. Nous avons un angle droit ABC et deux autres angles tels que la
somme:
Angle ABC + angle BAC + angle BCA = 180°.
Donc, angle BAC + angle BCA = 90°.
Le sinus de l'angle BAC, noté sin(BAC) est égal à BC / AC.
Le cosinus de l'angle BAC, noté cos(BAC) est égal à BA / AC.
C'est tout ce dont nous avons besoin.
2
Loop : making of
© JL Coste 2004
Le principe de calcul est simple. Tous les 25 m, nous calculons les nouvelles coordonnées de la voie, à
partir de la direction suivie par les rails. En pratique, cela revient à calculer tous les 25 m les
coordonnées du point C par rapport au point A. Pour cela, nous avons besoin de connaître l’angle
BAC, qui modifie la direction suivie jusqu’à présent par le train.
Nous avons donc:
Un cercle de centre O, de rayon OA=OC, et quelques angles droits: OAB, ODA, ODC, ABC.
Le train va tourner d'un angle BAC, en jaune sur la figure.
Nous avons: Angle BAC + Angle CAO = 90°.
Comme, on l'a vu, la somme Angle BAC + Angle BCA = 90°, on obtient:
Angle BAC + Angle CAO = Angle BAC + Angle BCA = 90°.
Donc, Angle CAO = Angle BCA.
Comme les deux triangles rectangles ADO et CDO sont symétriques par rapport à OD, on en tire:
⇒ Angle DAO = Angle DCO, et Angle AOD = Angle DOC.
⇒ Angle AOC = 2 * Angle AOD = 2 * Angle BAC.
⇒ C'est à dire: Angle BAC = Angle AOC / 2.
Pour rappel: Angle AOC = 360° * arcAC / Circonférence du cercle = 360° * arcAC / (2 * ∏ * rayon)
= 2 * ∏ * arcAC / (2 * ∏ * rayon) = arcAC/ rayon (en radian, puisque 360° = 2 * ∏ radian).
Comme les rayons utilisés sont très grands, on peut considérer que l’arcAC est égal à AC, donc 25 m.
Donc, Angle BAC en degré = 360° * arcAC / (2 * ∏ * rayon de la courbe) = 180° * AC / (∏ * rayon
de la courbe).
Les nouvelles coordonnées du point C sont égales aux coordonnées du point A + AB ou + BC :
xB = xA + BC = xA + (AC * sin(BAC))
yB = yA + AB = yA + (AC * cos(BAC))
Ce qui s’implémente facilement dans Excel:
Nous avons besoin de la distance parcourue, de la courbe suivie, des angles de déviation ponctuel et
total, des coordonnées ponctuelles xB et yB, pour calculer les coordonnées réelles xN et yN nous
permettant d’obtenir le tracé de la voie.
Pour des raisons de lisibilité du tableau et de facilité de calcul, une colonne supplémentaire est
réservée à la description de points remarquables, et une autre aux courbes de la voie.
Ce qui nous donne à partir de la seconde ligne, la première ne contenant que des 0 par défaut.
Col 1 : Distance parcourue, 1° ligne = point de départ (souvent 0), lignes suivantes = ligne précédente
+ 25.
Col 2 : Texte libre (points remarquables).
Col 3 :
Command CURVE ( = @/.Curve(NNN) indiquée dans le fichier de route..
Col 4 :
Rayon réel de la courbe parcourue = NNN ou 0.
Col 5 :
Angle de déviation local = 360 * 25 / ( 2* PI() * Col 4)
Col 6 :
Angle de déviation total depuis le départ = Col 5 + dernière valeur = Col 5 + (Col 4, ligne -1)
Col 7 :
xB = 25 * Sin ( Col 6 * PI() / 180 ).
Col 8 :
yB = 25 * Cos ( Col 6 * PI() / 180 ).
Col 9 :
xN = Col 7 + dernière valeur = Col 7 + (Col 9, ligne – 1).
Col 10 :
yN = Col 8 + dernière valeur = Col 8 + (Col 10, ligne – 1).
3
Loop : making of
© JL Coste 2004
La création du tracé est fort simple : Il suffit de sélectionner les données des colonnes I et J, et de
créer un graphique, nuage de points avec lignes arrondies.
Voici le résultat pour Loop :
(NB : les deux routes Sandymill- Balfearn et Loop ont été réalisées côte à côte sur la même feuille, chaque
tracé correspondant à une série xN yN distincte. Le carré central en jaune sert simplement à corriger la
distorsion de la figure)..
4
Loop : making of
© JL Coste 2004
Une astuce très pratique : en utilisant certaines fonctions logiques d’Excel, le tableau peut
s’autonomiser, et on peut voir la courbe se modifier en temps réel en changeant simplement un rayon
ou la longueur de la courbe :
Col 4 = SI (ESTVIDE( Col 3 );[Col 4,ligne-1];Col 3) : si la colonne 3 est vide, c’est la valeur
précédente, sinon c’est la même. Cela permet de rentrer uniquement les modifications induites par la
commande CURVE.
Col 5 = SI([Col 4,ligne-1] <>0;360*25/(2*PI()*D4);0) : si le rayon de la ligne précédente n’est pas
nul, on calcule l’angle, sinon on met 0.
Ce qui nous donne (en français) :
A
B
C
D
E
F
G
H
I
J
1
Distance
Points
Courbe
Courbe
Angle
Cumul
xB
yB
xN
yN
2
0
Sandymill
0
0
0
0
0
0
0
0
3
25
657.8
657.8
0
0
0.00
25.00
0.00
25.00
4
50
657.8
2.177553189
2.1776
0.95
24.98
0.95
49.98
5
6
75
100
-657.8
-657.8
2.177553189
-2.177553189
4.3551
2.1776
1.90
0.95
24.93
24.98
2.85
3.80
74.91
99.89
-657.8
C'est-à-dire :
A
1 Distance
2
0
3
A2+25
4
A3+25
5
A4+25
6
A5+25
B
C
D
E
F
G
H
I
J
Points
Courbe
Courbe
Angle
Cumul
xB
yB
xN
yN
Sandymill
0
0
0
0
0
0
0
0
657.8
SI(ESTVIDE(C3);D2;C3) SI(D2<>0;360*25/(2*PI()*D2);0) F2+E3 25*SIN(F3*PI()/180) 25*COS(F3*PI()/180) I2+G3 J2+H3
SI(ESTVIDE(C4);D3;C4) SI(D3<>0;360*25/(2*PI()*D3);0) F3+E4 25*SIN(F4*PI()/180) 25*COS(F4*PI()/180) I3+G4 J3+H4
-657.8
SI(ESTVIDE(C5);D4;C5) SI(D4<>0;360*25/(2*PI()*D4);0) F4+E5 25*SIN(F5*PI()/180) 25*COS(F5*PI()/180) I4+G5 J4+H5
SI(ESTVIDE(C6);D5;C6) SI(D5<>0;360*25/(2*PI()*D5);0) F5+E6 25*SIN(F6*PI()/180) 25*COS(F6*PI()/180) I5+G6 J5+H6
Il suffit donc de créer les 3 premières lignes (vertes), puis de couper coller la troisième (vert foncé) sur
les suivantes (jaunes) à volonté.
Puis, d’inscrire simplement chaque modification de courbe dans la colonne C ( Bleu) .
La même méthode peut être utilisée pour marquer des points remarquables, ici, les gares sont en jaune.
On prend les coordonnées du STOP, et on y ajoute +/- 150m :
A
53
54
55
56
57
B
1275
1300 Docks
1325
1350
1375
C
D
0
0
-2000 -2000
-2000
-2000
0
0
E
1.432
0
-0.72
-0.72
-0.72
F
G
80.96
80.96
80.24
79.53
78.81
5
24.69
24.69
24.64
24.58
24.52
H
3.93
3.93
4.24
4.54
4.85
I
J
593.43
618.12
642.76
667.35
691.87
927.63
931.56
935.80
940.34
945.19
K
L
I53+150
J53+150
I53-150
J53+150
I53-150
J53-150
I53+150
J53-150
I53+150
J53+150
Loop : making of
© JL Coste 2004
Une fois votre tracé terminé, il est facile d’y insérer les rivières, les autres lignes etc.
L’erreur relative de Loop par rapport à la route d’origine (carré jaune et carré bleu de Balfearn) est
inférieure à 0,5 pour mille (+/- 20 m pour 38 Km), ce qui est très satisfaisant.
Vous remarquerez le petit prolongement entre le Dépôt et Sandymill, créé secondairement pour
répondre à un « 3 miles challenge » sur le forum. Cette ligne de 4,8 km entre Depot et Docks (Boot),
partie intégrante de Loop, n’est plus disponible seule, le challenge ayant disparu.
6
Loop : making of
© JL Coste 2004
Les outils indispensables.
Mackoy ayant visiblement décidé d'abandonner les anciens formats de fichiers de route rw (sans doute
pour route writing(?) ), ou d'objets B3D (pour Boso 3D(?)), pour ne plus utiliser que le format csv,
Excel © ou tout tableur compatible est de fait devenu un outil indispensable pour la création des
fichiers de route ou d'objets.
Si cette option rend ces fichiers plus volumineux et surtout moins lisibles, certaines facilités que cela
procure rend ce choix judicieux. De toute façon, si la dernière version 2.6.3 de BVE lit indiférement
les fichiers csv rw, et B3D, il n'en est plus de même à partir de la version 3 compatible .Net©. Les
commandes rw et B3D ont récemment disparues de son site, signe que développer un objet ou une
route pour BVE doit se faire en csv, et que les anciens fichiers devront être converti dans le nouveau
format.
Pour les objets, aucun souci, Mackoy fournit un utilitaire sur son site:
- B3D > CSV converter, disponible à http://mackoy.cool.ne.jp/archives/objconv.zip
- Structure viewer pour visualiser un objet : http://mackoy.cool.ne.jp/archives/sv1_5_9.zip
- Mirror, pour inverser un objet : http://mackoy.cool.ne.jp/archives/mirror.zip
Pour les routes, c'est plus compliqué, une correction manuelle restant indispensable.
Si vous désirez créer des routes facilement, Route Buider est fait pour vous :
http://routebuilder.bve-routes.com/
Mais cet outil très puissant ne peut pas relire des routes déjà créées, ni créer des objets.
Enfin, vous devez posséder deux outils très puissants:
Pour la visualisation des routes : Track viewer : http://mackoy.cool.ne.jp/archives/track1_2_5.zip
Et pour la création des courbes, croisements et aiguillages, l'indispensable SWITCH15 créé par
Rüdiger Hülsmann: http://home.t-online.de/home/r.hulsmann
Cette petite liste n’est pas exhaustive, mais suffira pour le moment.
7
Loop : making of
© JL Coste 2004
Le tracé de la voie.
Les commandes BVE pour le tracé des voies sont peu nombreuses :
-
Curve pour les courbes.
Turn pour les virages, que nous n’avons pas employé.
Pitch pour les montées et descentes.
Rail, avec railstart, railend, pour l’affectation d’un objet au dessin de la voie.
Freeobj, pour l'utilisation d'un objet particulier à la place d'un rail.
I ) La principale difficulté du traçage de voie avec BVE est le calcul des déviations de
voies, courbes, aiguillages et croisements.
A) En d'autres termes, comment calculer la distance entre les différentes voies dans ces cas de
figures.
Reprenons notre figure :
On a déjà vu que :
Angle BAC en degré = 180° * AC / (∏ * rayon de la courbe).
8
Loop : making of
© JL Coste 2004
Cela nous donne :
1) ⇒ Angle BAC = 360° * AC / (2 * ∏ * rayon) = 180° * AC / (∏ * rayon).
⇒ AC = (2 * ∏ * rayon) * Angle AOC / 360 °
⇒ Sin(Angle BAC) = BC/AC.
⇒ BC = AC * sin( Angle BAC) = AC * sin(180° * AC/ 2*∏ * rayon)
⇒ Comme 360° = 2 * ∏ en radian, on a: AC = rayon * Angle AOC = 2 * rayon * Angle BAC..
⇒ BC = AC * Sin( AC/2*rayon) (en radian)
2) ⇒ AngleBAC = Angle AOD, donc Sin(AngleBAC) = Sin(AngleAOD).
⇒ BC/AC = AD/AO
=> BC = AD * AC / AO = (AC/2) * AC / Rayon = AC*AC / (2 * Rayon) = AC2 / ( 2 * rayon).
Ce résultat est très intéressant, car il permet de calculer très rapidement BC en fonction du rayon et
réciproquement :
=> BC = AC2 / ( 2 * Rayon).
Rayon = AC2 / (2 * BC )
D'où: Déviation = (distance parcourue)2 / (2 * rayon) et Rayon = (distance parcourue)2 / (2 *
Déviation)
Si la courbe continue, nous pouvons facilement en déduire la déviation suivante, car, n’oublions pas,
BVE fonctionne par pas de 25 m :
Nouvelle Déviation = (distance parcourue)2 / (2 * rayon) = (N* distance d'origine)2 / (2 * rayon) =
N 2 * déviation d'origine.
Les calculs sont donc simplifiés. Par exemple, soit un rayon de courbure de 1000 m.
On a:
25 m
50 m
75 m
100 m
Déviation = (25*25)/2000 = 0,3125 m
Déviation = 4 * 0,3125 = 1,25 m
Déviation = 9 * 0,3125 = 2,8125 m
Déviation = 16* 0,3125= 5 m.
Et ainsi de suite…
9
Loop : making of
© JL Coste 2004
Cela se vérifie aisément sur la figure suivante :
Avec AG = GC,
Première déviation : HG
Seconde déviation : BC
=> BC = 4* HG
10
Loop : making of
© JL Coste 2004
B) Autre problème important. Comment calculer la déviation lorsque la courbe se finit et la voie
continue tout droit ?
Nous avons une courbe AG – GC, puis une droite CF.
Nous voulons calculer EF.
On a : EF = BC + JF et CF = AG = GC = 25m.
AngleAOC = Angle BIC = AngleJCF (BIC + 90° = AOC + 90°)
⇒ JF = AG * sin(Angle AOC).
AngleAOC = AngleAOG + AngleGOC.
=2*(360*AG/(2πRayon)) (en degrés) = 4πAG/2πRayon = 2 AG Rayon.
⇒ JF = AG * sin(2 AG Rayon).en radian.
Ici, nous avons 2 déviations avant la ligne droite.
Dans le cas général, l’angle de déviation global JCF est égal à N fois l’angle élémentaire AOD.
D’où : JF = AG * sin(N AG Rayon) et EF = BC + AG*sin(N*AG*Rayon).
En résumé: Tant que le train tourne, la distance de déviation croît de façon géométrique, puis lorsqu'il
roule de nouveau en ligne droite, de façon arithmétique.
Sur la courbe, on a:
Déviation = (distance parcourue)2 / (2 * rayon)
Rayon = (distance parcourue)2 / (2 * Déviation).
Nouvelle Déviation = (distance parcourue)2 / (2 * rayon) = (N* distance d'origine)2 / (2 * rayon)
= N2 * première déviation.
A la fin de la courbe:
Nouvelle distance = N2 * première déviation + AG*sin(N*AG/Rayon).
11
Loop : making of
© JL Coste 2004
Exemple:
Un train arrive à un aiguillage, tourne en suivant pendant 125 m une courbe de 1000m, puis poursuit
tout droit.
On a:
N
Distance
Déviation
Résultat
1
25 m
(25*25)/2000
0,3125 m
2
50 m
4 * 0,3125
1,25 m
3
75 m
9 * 0,3125
2,8125 m
4
100 m
16 * 0,3125
5 m.
5 (Fin de la courbe)
125 m
25 * 0,3125
7,8125 m.
6
150 m
7,8125 +
10,9293 m
25*sin(5*25/1000)
7
175 m
10,9293 + 3,1168
14,04625m.
8
200 m
14,04625+ 3,1168
17,163 m
C) En réalité, dans BVE, toute distance d’un rail par rapport au rail (0) est toujours mesurée
perpendiculairement à ce dernier.
Si le train suit AB, la déviation est BC.
Si le train suit la courbe AC, c'est CX, la perpendiculaire à la tangente au cercle de centre O, donc
segment poursuivant le rayon AC.
Or, AO et BC sont parallèles. Donc, AngleAOC = AngleBCX.
Et BC/CX = Cos(AngleBCY).
D’où :
CX = BC / Cos(Angle AOC)
CX = AC2 / ( 2 * rayon * Cos(AC/Rayon).
12
Loop : making of
© JL Coste 2004
Exemple : la bifurcation entre les voies de Balfearn et des docks à la sortie de Sandymill.
Dans les tunnels, à l‘entrée de la courbe vers les docks, les voies vers Balfearn sont à 7,125m, avec
une petite divergence de 0,95m tous les 25 m.
Le calcul est simple :
Distance = [7,125 + (N*0,95) + ((n*25)2/(2*rayon)) ] / cos[(N*25)-12.5]/rayon)
Le rayon est de 350m
Ce qui donne :
AC
Angle
BC
CX
25 m
0,071
8,96785
8,9990775903
50 m
0,14
12,5964
12,72603682
75 m
0,214
18,01071
18.4322833
100 m
0,28
25,21071
26,27592055
125 m
0,357
34,196428
36,49956905
150 m
0,428
44,967857
49,43911299
175 m
0,498
57,25
65,23602734
Les vues suivantes montrent que le résultat est très satisfaisant:
Vue depuis le train.
13
Loop : making of
© JL Coste 2004
Vue en zoomant.
Vue latérale en zoomant. On voit la courbe que va suivre le train sur la droite.
14
Loop : making of
© JL Coste 2004
Vue d'avion
La légère distorsion dans la double ligne droite provient des arrondis de calcul, en particulier de la
pente de la voie sous le tunnel. Mais elle est en pratique invisible dans le simulateur.
15
Loop : making of
© JL Coste 2004
II ) Abordons maintenant un autre problème fréquent: L’utilisation des objets et quelles
courbes employer ?
Les trains devant éviter les obstacles naturels et limiter les pentes à gravir, les voies ont très souvent
recours à des courbes, qui doivent cependant rester praticables à des vitesses correctes.
A ) Quelles sont donc les vitesses limites induites par les courbes ?
Rayon Vitesse i+
i+
i+
i+
i+
i+
i+
i+
i+
minimal (Km/h) d (30) d (50) d (70) d (80) d (90) d (100) d (110) d (120) d (130)
82
30
66
59
53
51
48
46
44
42
41
145
40
118
105
94
90
86
82
79
76
73
227
50
184
164
148
140
134
128
123
118
113
327
60
266
236
212
202
193
185
177
170
163
445
70
361
321
289
275
263
251
241
231
222
581
80
472
420
378
360
343
328
315
302
290
735
90
597
531
478
455
434
416
398
382
368
908
100
738
656
590
562
536
513
492
472
454
1098
110
892
793
714
680
649
621
595
571
549
1307
120 1062
944
850
809
772
739
708
680
654
1534
130 1246 1108
997
950
906
867
831
798
767
1779
140 1446 1285 1156 1101 1051
1006
964
925
890
2042
150 1659 1475 1328 1264 1207
1154
1106
1062
1021
2324
160 1888 1678 1510 1438 1373
1313
1259
1208
1162
2623
170 2131 1895 1705 1624 1550
1483
1421
1364
1312
2941
180 2390 2124 1912 1821 1738
1662
1593
1529
1470
3277
190 2662 2367 2130 2028 1936
1852
1775
1704
1638
3631
200 2950 2622 2360 2248 2145
2052
1967
1888
1815
4003
210 3252 2891 2602 2478 2365
2263
2168
2082
2001
4393
220 3570 3173 2856 2720 2596
2483
2380
2284
2197
4802
230 3901 3468 3121 2972 2837
2714
2601
2497
2401
5228
240 4248 3776 3398 3237 3089
2955
2832
2719
2614
5673
250 4609 4097 3688 3512 3352
3207
3073
2950
2837
6136
260 4986 4432 3988 3798 3626
3468
3324
3191
3068
6617
270 5376 4779 4301 4096 3910
3740
3584
3441
3309
7116
280 5782 5140 4626 4405 4205
4022
3855
3700
3558
7634
290 6202 5513 4962 4726 4511
4315
4135
3970
3817
8169
300 6638 5900 5310 5057 4827
4617
4425
4248
4085
Ce tableau montre les rayons de courbure en mètres sans et avec différentes valeurs de dévers en
millimètres (d) pour une vitesse maximale donnée.
Ces valeurs sont celles retenues à la SNCF en France, en tenant compte de l’insuffisance de dévers (i)
compatible avec le confort des passagers :
- à pleine vitesse sans recourir à la pendulation,
- et à l’arrêt en courbe.
L’utilisation est simple : A un rayon de courbure donné, le tableau donne la vitesse limite possible à
plat, puis selon différentes valeurs croissantes de dévers.
Par exemple, les voies à Sandymill sont toutes limitées à 25 miles/h, soit environ 40 km/h. Le rayon
de courbure minimal des courbes est donc de 145 m.
Pour un aiguillage de 25m de long, et avec 3,8m entre chaque voie, cela nous donne un rayon de :
25^2/3,8 = 164,47m, ce qui est compatible avec la vitesse limite.
Nous avons cependant retenu un aiguillage de 50m de long (rayon de 657m) pour des questions
d’esthétisme et d’uniformatisation des aiguillages.
Par contre, la vitesse limite à Moorland Junction a été portée à 40 miles/h, soit 64 km/h., ce qui reste
compatible avec les aiguillages et la sécurité.
16
Loop : making of
© JL Coste 2004
B) La segmentation
1) Pour la voie, BVE utilise l’objet affecté à celle-ci par Rail. Si nous utilisons toujours le même objet
en ligne droite et en courbe, ces dernières seront à l’écran en forme de polygones de 25 m de côté.
Cet aspect polygonal peut être considérablement réduit en augmentant le nombre de segments
composant l’objet. BVE ne sait pas, en effet, dessiner un cercle. Par contre, si on considère que celuici est une sorte de polygone composé d’une infinité de cotés, on peut obtenir un aspect très réaliste à
l’écran, en n’oubliant pas que plus un objet a de faces, plus il est volumineux et plus il est difficile à
manipuler par BVE. Il nous faut donc choisir un compromis réaliste.
Si BVE classique utilise le VGA, soit 640*480 pixels, la nouvelle version 4, BVE Net, permet de
monter jusqu’au 1024*768 pixels. Et rien n’empêche d’envisager par la suite d’autres résolutions
supérieures. Il nous donc prévoir d’emblée un effet visuel correct, donc une résolution élevée.
Quel est donc le rayon de courbure à partir duquel on peut utiliser un rail droit sans que cela se voit à
l’écran ?
C’est ce que nous allons essayer de calculer, à partir de quelques exemples de courbes créées avec
Switch15, visualisées avec Track Viewer en zoomant au maximum pour écraser la perspective.
Pour mémoire, rappelons que tous les objets créés par Switch15 ont une segmentation de 5 pour 25 m,
c'est-à-dire sont composés de polygones de 5 m de côté.
Courbe de 223 m de rayon
17
Loop : making of
© JL Coste 2004
Courbe de 300m de rayon
Ces deux images montrent bien la structure polygonale des rails dans des rayons aussi petits, structure
devenant presque invisible lorsque le rayon devient supérieur à 600m :
Aiguilles et courbes de 657m de rayon.
18
Loop : making of
© JL Coste 2004
2) Quelles sont les limites d’utilisation des différentes segmentations ?
Reprenons notre figure :
La courbe réelle est l’Arc AC. Le segment dessiné est le segment AC.
L’erreur visuelle correspond donc au segment DG.
C'est très simple.
AG = GC = 25 m et AngleHAG = AngleGAD = Angle BAC / 2.
⇒ AD = AH et HG = DG = BC / 4.
Dans le cas d'une non segmentation, DG = 1/4 de la déviation BC.
Dans le cas d'une segmentation 5, (comme avec SWITCH15), la déviation globale est égale à:
BC = AC2 / ( 2 * Rayon).
Et la déviation de chaque segment est égale à, (comme N = 5):
[AC2 / ( 2 * Rayon) ] / N2 = [AC2 / ( 2 * Rayon) ] /25 = AC2 / (50 * Rayon)
DG = [AC2 / ( 50 * Rayon) ] / 4 = AC2 / ( 200 * Rayon)
Pour un rayon de 200m, on a donc : Erreur visuelle = 625 / 40000 = 0,015625 m = 15 cm.
Avec une largeur de rail de 8 cm, c'est très acceptable.
Calculons la limite théorique de l'absence de segmentation:
N = 1 ⇒ DG = AC2 / ( 8 * Rayon ) ⇒ Rayon = 625 / ( 8 * 0,015625) = 5000 m.
En dessous de 5000m, on doit donc employer une segmentation des rails.
N = 3 ⇒ DG = AC2 / (36 * Rayon ) ⇒ Rayon = 625 / ( 36 * 0.015625) = 1111 m.
Rayon
> 5000 m
Entre 5000 m et 1200 m
Entre 1200 m et 200 m
< 200 m
Segmentation des rails
Pas de segmentation
Segmentation 3
Segmentation 5
Segmentation 10
19
Loop : making of
© JL Coste 2004
Commençons maintenant par nous intéresser à la création des courbes.
Pour faciliter cela, BVE permet d’affecter n’importe quel objet à Rail. Il parait donc facile de créer un
rail courbe au moyen de SWITCH15, par exemple, puis de l’utiliser en place du rail droit habituel.
Il y a cependant un point très important à noter :
Lorsque le train tourne, l’ensemble des objets tournent avec lui. Et le rail courbe aussi.
Celui-ci doit suivre l’Arc AC lorsque le train suit le segment AC, donc en tournant.
Or, lorsque nous créons ce rail Courbe, c’est par rapport au segment BC. Il faut donc indiqué à
SWITCH15 que nous voulons un objet « tourné par lui-même », c'est-à-dire créé par rapport au
segment AC.
Objet non tourné
Objet tourné
La ligne rouge correspond à l’axe du rail droit.
Il faut donc réserver l’option « tourné par lui-même » aux objets destinés à être utilisés comme Rail,
les objets devant être utilisés au moyen de Freeobj ne devant pas être tournés par eux même.
Pour ces derniers, il faut donc les faire tourner, l’angle de rotation étant égal à la moitié de l’angle de
déviation, et de même sens.(Il s’agit de l’angle HAG) .
20
Loop : making of
© JL Coste 2004
III) Les aiguillages.
SWITCH15 permet de réaliser, en voie normale, tous les aiguillages possibles, y compris des
aiguillages courbes.
Certaines règles sont cependant à respecter pour obtenir de bons résultats rapidement.
A)
Il y a deux points très importants à comprendre:
1) Tous les objets utilisés par BVE sont positionnés aux coordonnées indiquées par la
commande: Freeobj( Rail, Index de l'object, Position X (Droite, gauche), Position Y
(Altitude),Angle de rotation (en degrés)).
La rotation de l'objet s'effectue toujours par rapport au début du segment de rail concerné.
C'est à dire à + 0 m du début du rail.
2) BVE dessine la voie par segments de 25 m, et l'ensemble du paysage depuis l’horizon situé
entre 200 et 600m en avant, jusqu’à 25 m en arrière de l’écran.
Tous les autres éléments sont, soit effacés (en arrière), soit pas encore dessinés.
Cela veut dire qu'un objet de plus de 25 m de long doit être dessiné au maximum à +25 m, et doit donc
comporter des coordonnées négatives.
Exemple:
Un objet de 50 m de long doit être dessiné de -25m à +25 m, sous peine de disparaître brutalement
lorsque le train dépasse les premiers 25 m.
B)
Abordons les aiguillages : l’angle de rotation.
Le problème des aiguillages est qu’il faut les positionner nous même, en tenant compte de deux
facteurs, l’angle de rotation de l’objet, et son décalage ou Offset par rapport au rail, décalage dû à
deux facteurs, l’angle de rotation et la longueur de l’objet.
Cela peut paraître compliqué, mais c’est en réalité assez simple.
Il y a deux cas de figures possibles:
a) Soit l'aiguillage est parcouru en ligne droite. On est donc dans le cas d’un rail droit.
L'angle de rotation est, soit nul (aiguillage parcouru dans le sens normal), soit égal à 180° (aiguillage
parcouru en sens inverse). Il n’y a donc pas de d’offset.
b) Soit l'aiguillage est parcouru en voie déviée. Nous nous retrouvons dans le cas de figure d'une
courbe. Comme l’aiguillage a été créé par SWITCH15, il n’a pas été « tourné par lui-même ».
Nous devons donc calculer l'angle de rotation quelle que la longueur de l’aiguillage, qu’il soit droit ou
courbe. Seule compte la courbe suivie par le train, c'est-à-dire son rayon et sa longueur.
Rappelons le, l’axe de rotation d’un objet est à +0m. Tout dépend donc de la longueur de l’objet.
On l’a vu, celui-ci ne peut pas dépasser la cote +25m, sous peine de disparaître brutalement à l’écran
au bout de quelques mètres.
Un aiguillage de 25 m ira donc de 0 à +25m, un de 50m de -25 à +25 m, un de 75m de -50m à +25 m,
etc.
On l’a vu pour les courbes, l’angle de rotation d’un objet non tourné par lui même est égal à la moitié
de l’angle de déviation, mais de sens inverse.
L’angle de rotation est l’angle nécessaire pour tourner l’objet correctement à +12,5m.
Angle = (-) 180*12,5 / (π * rayon)
Pour un objet de 25 m, l’angle est donc égale à la moitié de l’angle de rotation comme pour une
courbe simple, et de sens opposé à l’angle de déviation.
21
Loop : making of
© JL Coste 2004
Exemple :
Entraxe = 3,8m ⇒ R= 252/ 3,8 = 164,474 ⇒Angle = 180 * 12,5 / ( Π * R) = 4,3545°
Virage à droite, angle = (-) 4,3545 ; virage à gauche, angle = (+) 4,354. +/- 180° si inversé.
Pour un objet plus long, il faut tenir compte de toute la partie située entre –XX et 0m.
Nous avons donc un angle de rotation égal à l’angle de déviation, mais de sens opposé à celui-ci,
puisque nous sommes avant le point B, et ceci par segment de 25 m.
Ainsi donc, pour un aiguillage de 50m, on a :
Partie entre 0 et +25 m : comme au dessus : α1= − 1/2 angle de déviation.
Partie entre -25 et 0 m : α2 = + 1 angle de déviation.
Au total, α = α1+ α2 = −[180∗12,5/ ( Π * R)] + [180∗25/ ( Π * R)] = +[180∗12.5/ ( Π * R)]
Donc de même sens que l’angle de déviation.
Exemple :
Entraxe = 3,8m ⇒ R= 502/ 3,8 = 657,89 ⇒Angle = 180 * 12,5 / ( Π * R) = 1,088°
Virage à droite, angle = (+) 1,088 ; virage à gauche, angle = (-) 1,088. +/- 180° si inversé.
Même chose pour un aiguillage de 75 m.
Angle de rotation de -50 à -25 +Angle de rotation de -25 à 0 + Angle de rotation de 0 à +12,5M
= (+) angle de déviation + (+) angle de déviation + (-) ½ angle de déviation
= (+)1½ angle de déviation.
Exemples :
Longueur 75 m, Rayon 1000 m, sens normal :
α= 180 * (75-12.5) / ( Π * R)= 3,58°. (+) vers la droite, (-) vers la gauche.
Sens inverse : longueur avant le pivot de rotation = 25 m
α= 180 * (25-12.5) / ( Π * R)= 0,716 + 180 = 180,716°
Rayon 1500m, sens inverse : α = 0,477 + 180 = 180,477°
Et ainsi de suite.
C)
L’offset se déduit très simplement :
Pour un aiguillage de 25m, la rotation s’effectue au point D. Il n’y a donc pas d’offset, puisque
l’objet est positionné selon AC.
Pour un objet de plus de 25m de long, le début de l’objet est décalé d’un offset équivalent à BC, dans
le sens inverse de la courbe.
Pour 50 m , offset = 25^2 / (2*R) ⇒ 625/(2*657.89)= 0,475m.
Pour 75m, l’offset dépend là encore du sens de l’objet :
- sens direct : BC = 50^2/(2*R)
- sens inverse : BC = 25^2/(2*R).
Pour 1000m, sens direct ⇒ BC = 1,25m ; Sens inverse ⇒ BC = 0,3125m
Exemples : Les aiguillages de DOCKS :
On a deux aiguilles de 1000m de rayon, vers la droite, de sens direct :
α = - 3,58°, offset = -1,25 m ;
puis un aiguillage de 1500m de rayon,vers la gauche, inversé :
α = 180,419°, offset = 0.208 m
Enfin, un dernier aiguillage de 1000 m de rayon, vers la gauche, inversé :
α = 180,477°, offset = 0,3125 m
22
Loop : making of
© JL Coste 2004
1000m de rayon
23
Loop : making of
© JL Coste 2004
1500 m de rayon, inversé
1000m de rayon, inversé.
Vous trouverez une petite route démo sur le site : Switches.rw.
24
Loop : making of
D)
© JL Coste 2004
Les gares plus complexes :
Dès lors, la création et l’utilisation des aiguillages étant résolues, il m’a semblé intéressant de créer
une grande gare de jonction entre plusieurs lignes principales, avec triage, dépôt, etc. :
Moorland Junction.
Il faut noter qu’à l’époque de la création de LOOP, le nombre de rail disponibles était limité à 8
(rail(0…7)), ce qui représentait un véritable défi.
La solution retenue fut double :
- utilisation de rails doubles et quadruples, de traversées jonctions doubles, d’aiguilles en Y…
- optimisation des voies grâce à Excel.
Le résultat est intéressant : une grande gare de jonction de 3 lignes différentes, dont deux à double
voie.
En positionnant des rails doubles comme simples objets, il a été possible d’obtenir 11 voies en
parallèle, avec une certaine complexité, et des trains en stationnement.
25
Loop : making of
© JL Coste 2004
L’entrée de la gare est comme un rêve d’enfant jouant au train électrique – j’ai dû, quelque part ,
oublier de grandir- : jonction des deux doubles voies, traversées – jonctions doubles, aiguillage en Y,
petit dépôt de traction, etc.
Actuellement, avec 16 rails disponibles, toutes les combinaisons sont possibles, y compris de
véritables gares de triages.
26
Loop : making of
© JL Coste 2004
E)
Le son.
L’un des sons les plus caractéristiques du train est le passage des pointes de cœur des aiguillages, tout
du moins ceux à pointe de cœur fixe.
BVE déclenche le fichier correspondant à chaque fois qu’une file de rail rejoint Rail(0).
L’utilisation d’un objet comme aiguillage impose donc de bien déclencher le fichier son au passage de
la pointe de cœur.
C’est en pratique assez facile.
Il suffit d’utiliser une autre file de rail, et de lui faire quitter ou rejoindre ou croiser Rail(0) au bon
endroit.
Track Viewer permet très facilement de vérifier cela visuellement, l’essai imposant cependant le
lancement de BVE.
Lorsque le résultat est satisfaisant, il suffit de rendre invisibles les files de rail, et le tour est joué.
De la même manière, les croisements et traversées jonctions doubles à pointe de cœur multiples sont
faciles à traiter.
27
Loop : making of
© JL Coste 2004
F) Dernier point : la taille des objets créés avec Switch15.
Lors du chargement d’une route, BVE commence par lire tous les fichiers objets avant de les traduire
en fichiers directement utilisables en mémoire.
Ce temps de chargement et de compilation est étroitement dépendant :
- du nombre d’objets,
- et de leur taille.
Moins l’ordinateur est puissant, plus ce temps est long.
D’autre part, plus la taille des fichiers objets est importante, plus ils prennent de place en mémoire.
Il est donc important d’optimiser ces fichiers, et donc de réduire leur taille si possible. De longs
commentaires, copyrights, etc, multipliés par le nombre de fichiers, peuvent ralentir de façon sensible
une machine un peu ancienne, sans améliorer le résultat final.
Loop a bénéficié de cette optimisation des objets, rendant son chargement plus court de 30% environ,
par rapport aux fichiers objets d’origine.
C’est surtout vrai avec les fichiers créés par Switch15. En effet, ce dernier utilise une segmentation 5
pour tous les rails, y compris les droits. Ce qui est naturellement inutile, mais allonge le fichier et
ralentit l’ordinateur d’autant.
C’est un travail ingrat, long et fastidieux, mais les possesseurs d’une machine ancienne vous
remercieront.
Malgré le nombre important de fichiers objets, Loop reste parfaitement à l’aise avec un PII 350 MHz.
28
Loop : making of
© JL Coste 2004
IV) Autres utilisations.
La possibilité d’utiliser n’importe quel objet à la place du rail standard permet de créer facilement
routes et rivières.
Mais une possibilité intéressante est la création directement de paysages très réalistes.
Par exemple, créons un talus en herbe, descendant 30m en dessous de la voie, à une distance de 50m,
et plaçons le latéralement à la voie.
L’utilisation d’un rail invisible permet dès lors de créer déblais et remblais facilement :
29
Loop : making of
© JL Coste 2004
La construction est simple :
30
Loop : making of
© JL Coste 2004
Formules pour BVE.
©J.L.Coste 2005
Résumé:
A) Déviation en courbe :
Déviation d’une courbe par rapport ligne droite = (distance parcourue)2 / (2 * rayon)
Rayon de la courbe = (distance parcourue)2 / (2 * Déviation)
Nouvelle déviation = N2 * première déviation.
Déviation d’une ligne droite par rapport à une courbe =
Déviation d’une courbe par rapport ligne droite / cos(distance parcourue / rayon)
B)
A la fin de la courbe :
Déviation = N2 * première déviation + (Dernière déviation * sin(N*distance / Rayon))
C) Aiguillages :
Sens direct :
Angle = 180 * (longueur de l’aiguillage – 12,5) / (π * rayon)
Offset = (longueur de l’aiguillage – 25) 2 / (2 * rayon).
Sens inverse :
Angle = 180 * 12,5 / (π * rayon).
Offset = 25 2 / (2 * rayon) seulement si l’aiguillage fait plus de 25 m de long.
31

Documents pareils