Descriptions et exemples pour le POV-Ray raytracer par Friedrich A. Lohmueller
Modélisme ferroviaire avec POV-Ray
English English English
Italiano  Italiano
Deutsch 

Page d'Accueil
- POV-Ray Tutorial

- Modélisme ferroviaire
  avec POV-Ray
    Table des matières

  - Rail Track System,
    un système des rails
    pour POV-Ray
    Basic Track Elements
    - Voies droites et courbes
    - Aiguillages
    - Y et 3Directions
    - Croisements

    - Usage simplifié par
      RT_System_00.inc
      - Éléments de voies
        avec RT_System_00.inc

    - Voies adaptées aux
      échelles de modélisme
      - Échelle H0 voies
      - Échelle N voies
      - Échelle Z voies

    - Plans voies avec
      voies à l'échelle
      - Placement des voies
     > Voies en 'haut et bas

    - Plans voies exemples
      - Simple cyclique
      - 'huit simple

    - Téléchargement
      Rail Track System


                                                       
Tracks up and down
Plans voies avec voies à l'échelle
  Voies en haut et en bas

Le placement des éléments des rails
Une démonstration avec un système de voies à l'échelle N
de la geometrie type A:


1) Rails droits et courbes en haut et en bas

La pente de rails par cisaillement avec
    Track_Up_00("NAME",STEP,GRADIENT_TYPE) macro

Ici :
NAME le nome du élément de rails:
p.ex. T_222, T_115, T_111, T_107, T_058, T_055, T_028,
T_R1_45, T_R1_30, T_R1_15, T_R2_45, T_R2_30, ...
STEP le valeur du gradient (difference de hauteur) en metre
pour rails en échelle N ( p.ex. 0.015 pour 1,5cm )
GRADIENT_TYPE:
0 pour simple vers le haut (ou vers le bas pour STEP négative)
1 pour divisé vers le haut avec transition douce (seulement avec T_222, T_115, T_111, T_107, et courbes des angles 45°, 30° et 15°.)
2 pour divisé arrivé au haut avec transition douce (seulement avec T_222, T_115, T_111, T_107, et courbes des angles 45°, 30° et 15°.

Note: Utiliser cisaillement au lieu de rotation n'est pas totalemente exact de la vue de la geometrie. La projection verticale d'un rail tourné vers le haut sur le plan du sol est plus courte que le rail ( Voir : Pythagore !)!
Mais cette simplification il est plus facile de façon dramatique projeter plans voies, pourquoi nous ne devons pas calculer chaque fois la longueur de cette projection.
Et d'ordinaire pour des gradients petits la difference est plus petit que la tolerance que nous avons avec modèles des rails réels.
//----------------------------------------------//
#local Step_1 = 0.02;
object{ Track_Up_00("T_111",Step_1,0)
                  translate<0*L111,0*Step_1*N,0>}
object{ Track_Up_00("T_111",Step_1,0)
                  translate<1*L111,1*Step_1*N,0>}
//----------------------------------------------//

Transition vive et douce :
Faire des gradients avec arêtes vives au début et à la fin non est pas seulement un solution esthétique non-optimale, mais cela fait aussi très grand problèmes en modélisme ferroviaire pour les modèles de trains.
Pour éviter cela en plans voies avec POV-Ray nous pouvons utiliser la
subdivision avec GRADIENT_TYPE 1 (au début) et 2 (à la fin)
avec ~ 1/2 du STEP.
//----------------------------------------------//
#local Step_1 = 0.0225;
object{ Track_Up_00("T_111", Step_1/2, 1)
                translate<0*L111,0.0*Step_1*N,0>}
object{ Track_Up_00("T_111", Step_1  , 0)
                translate<1*L111,0.5*Step_1*N,0>}
object{ Track_Up_00("T_111", Step_1/2, 2)
                translate<2*L111,1.5*Step_1*N,0>}
//----------------------------------------------//










Sharp and smooth transition
La pente de rails par cisaillement
Track_Up_00("NAME",STEP,GRADIENT_TYPE) macro











Sharp and smooth transition
Transition vive et douce

2) Courbes vers le haut et vers le bas.
Problème spécial ici : il n y a aucune fonction en POV-Ray pour visser un objet !
Par conséquent nous ne pouvons pas faire une transition douce pour les rails et les traverses avec tourner et / ou cisaillement des voies.
Solution : Nous pouvons diviser les éléments courbés en plusieurs segment pour minimiser le défaut !
Note : Cela est seulement dimportance pour la représentation des gradients de courbes en POV-Ray !
Avec les modèles réel des rails normalement n'ont pas ce problème !
Au lieu de
//----------------------------------------------//
object{ Track_Up_00("T_L1_45",Step_1,0)
        Rotate_Around_Trans(<0,-0*45,0>,<0,0,R1>)
        translate<0,0*Step_1*N,0>}
object{ Track_Up_00("T_L1_45",Step_1,0)
        Rotate_Around_Trans(<0,-1*45,0>,<0,0,R1>)
        translate<0,1*Step_1*N,0>}
//----------------------------------------------//
il est meilleur utiliser courbes subdivisé en angles plus petit :
//----------------------------------------------//
object{ Track_Up_00("T_L1_15",Step_1,0)
        Rotate_Around_Trans(<0,-0*15,0>,<0,0,R1>)
        translate<0,0*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        Rotate_Around_Trans(<0,-1*15,0>,<0,0,R1>)
        translate<0,1*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        Rotate_Around_Trans(<0,-2*15,0>,<0,0,R1>)
        translate<0,2*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        Rotate_Around_Trans(<0,-3*15,0>,<0,0,R1>)
        translate<0,3*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        Rotate_Around_Trans(<0,-4*15,0>,<0,0,R1>)
        translate<0,4*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        Rotate_Around_Trans(<0,-5*15,0>,<0,0,R1>)
        translate<0,5*Step_1*N,0>}
//----------------------------------------------//
Note : Subdiviser les courbes avec (GRADIENT_TYPE 1 ou 2) est seulment à disposition pour les courbes avec les angles 45°, 30° et 15°.
Subdiviser les rails droits est seulment à disposition pour les rails T_222, T_115, T_111, et T_105.
Pour obtenir une transition plus douce nous devons utiliser seulement segments des courbes avec 15° !

Pour les courbes nous devons souvent un rail avec un angle autour un centre de rotation par utliliser la macro 'Rotate_Around_Trans( RotationVector, Center_of_Rotation )' del fichier include 'transforms.inc'.
Nou pouvons réplacer ce commandement longue
'Rotate_Around_Trans(<0, 1*15,0>,<0,0,-R1>)'
avec und expression plus courte come 'RTyz( 1*15, -R1 )'
par déclarer la macro suivante :
//----------------------------------------------------//
#include "transforms.inc"
#macro RTyz( Y_Angle, Z_Distance )
 Rotate_Around_Trans(<0, Y_Angle,0>,<0,0, Z_Distance>)
#end
//----------------------------------------------------//
Avec la macro ci-dessus le texte est plus court :
//----------------------------------------------//
object{ Track_Up_00("T_L1_15",Step_1,0)
        RTyz(-0*15,R1) translate<0,0*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        RTyz(-1*15,R1) translate<0,1*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        RTyz(-2*15,R1) translate<0,2*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        RTyz(-3*15,R1) translate<0,3*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        RTyz(-4*15,R1) translate<0,4*Step_1*N,0>}
object{ Track_Up_00("T_L1_15",Step_1,0)
        RTyz(-5*15,R1) translate<0,5*Step_1*N,0>}
//----------------------------------------------//
screw without smooth transition
Courbe vissée par cisaillement vers y - sans transition douce
screw with more smooth transition
Courbe vissée par cisaillement vers y - avec transition douce
screw with more smooth transition
Courbe vissée par cisaillement vers y - avec transition douce

2) Vers le haut et vers le bas avec aiguilles et autres éléments.
On ne peut pas tourner aiguilles, croisments (junctions) vers le haut et
vers le bas avec la macro 'Track_Up_00(...)'!
Pour cet éléments nous avons besoin de cisaillement directement avec
la matrice de POV-Ray.
Cela on peut faire très facil avec la macro suivante,
c'est cisaillement d'un élément de la longuer en x 'Shear_Len'
avec un valeur 'Step_Up'('+' ou '-' en échelle N in metre) vers y :
#macro Shear_Up(Shear_Len,Step_Up) //-----------//
 matrix<1,Step_Up*N/Shear_Len ,0,
         0,1,0, 0,0,1, 0,0,0>
#end // end of macro ---------------------------//

L'exemple del'image ci-contre :
//----------------------------------------------//
#declare TD = Track_Distance;
object{ SW_L( SD_1) translate< 0*L111,0,0>}
object{ T_R9_15
        Rotate_Around_Trans(<0,-1*15,0>,<0,0, R9>)
                    translate< 0*L111,0,0>}
object{ T_111       translate< 1*L111,0,0>}
// tracks upward:
object{ Track_Up_00("T_111",Step_1,0)
        translate<2*L111,0*Step_1*N,1*TD>}
object{ Track_Up_00("T_111",Step_1,0)
        translate<2*L111,0*Step_1*N,0>}

object{ SW_R(SD_2) Shear_Up(L111,Step_1)
        translate<3*L111,1*Step_1*N,1*TD>}
object{ Track_Up_00("T_111",Step_1,0)
        translate<3*L111,1*Step_1*N,0>}

object{ Track_Up_00("T_111",Step_1,0)
        translate<4*L111,2*Step_1*N,1*TD>}
object{ SW_R(SD_3) Shear_Up(L111,-Step_1)
        rotate<0,180,0>
        translate<5*L111,3*Step_1*N,0>}
//----------------------------------------------//













shearing of turnouts
Cisaillement des aiguilles et des autres objets


top

© Friedrich A. Lohmüller, 2011
www.f-lohmueller.de