Descriptions et exemples pour le POV-Ray raytracer par Friedrich A. Lohmueller
      Objets POV-Ray - Comment faire des objets pour POV-Ray
English English English
Italiano  Italiano
Deutsch 

Page d'Accueil
- POV-Ray Tutorial

  - Exemples POV-Ray
    Table des matières
  - Architecture
  - Geometrie
  - Technique
    - Échelle
    - Pylônes
    - Garde-fou / rambard
    - Pont
    - Tubes
    - Tuyaux
    - Bifurcation de Tuyau
    - Robinet d'Arrêt
    - Chaîne
    - Bobine de fil
    - Torpedo
    - Cruise Missile
    - Missile
    - Roue
    - Camion
    - Hélice
    - Avion
    - Canoë
    - Guitare
    - Afficheur 7 segments
    - Câble plat - Nappe plat
    - Harnais de câbles
                                       
 
Steel_Bridge_1

Comment faire
le treillis métallique d'un pont .

Objets :   Round_Box, cylinder.
Méthodes : #local, #declare, union, #macro, #while loops, #if,
                  cisaillement avec matrix.
Avec cet exemple on peut voir comment on peut faire le treillis métallique d'un pont avec les poutres type Warren pour une rue ou pour un pont de chemin de fer. Il est possible utiliser mesures variables pour les dimensions du treillage du pont.

La construction en detail :
 
Partie 0 : En premier lieu nous définissons les variables de base pour les dimensions du pont (textures à votre choix !):
#local L =10.00; // bridge length        .
#local H = 2.50; // bridge height
#local W = 1.50; // bridge width
#local BD = 0.50, // beam diameter
#local BR = 0.10; // beam border radius
Partie 1 : Après nous calculons le nombre de subdivisions et leur longueur pour une distribution équidistant des segments. De même le facteur de cisaillement ( calculation voire l'image ci-contre ) :
 // number of subdivisions:
#local NSub = int(L/H);
// distance for equidistant distribution:      .
#local SubDistance = L/NSub;
// shearing factor:
#local S_Factor = 0.5*SubDistance/H;
Partie 2 : Puis nous faissons une paire de diagonales:
union{ // pair of diagonals
 object{
   Round_Box(<-BD/2,0,-BD/2>,<BD/2,H,BD/2>,BR,0)
   matrix< 1, 0, 0, //  matrix-shear_y_to_x
              S_Factor, 1, 0,
              0, 0, 1,
              0, 0, 0>
 } // -----------------------------------------
 object{
   Round_Box(<-BD/2,0,-BD/2>,<BD/2,H,BD/2>,BR,0)
   matrix< 1, 0, 0, //  matrix-shear_y_to_x
             -S_Factor, 1, 0,
              0, 0, 1,
              0, 0, 0>
   translate<SubDistance,0,0>
 } // -----------------------------------------
}// end union pair of diagonals

shearing
comment calculer le facteur de cisaillement S.
pair of diagonals
Une paire des diagonales cisaillées.
Partie 3 : Maintainant nous arrangons les diagonales avec un boucle while (vert). Pour nombres impairs nous devons renverser les poutres en x et déplacer les poutres de 'SubDistance/2' en direction x (red). Nous ajoutons aussi un longeron au-dessous et au-desus pour completer les poutres d'un côté (side beam):
// number of subdivisions:
#local NSub = int(L/H);
// distance for equidistant distribution:      .
#local SubDistance = L/NSub;
// shearing factor:
#local S_Factor = 0.5*SubDistance/H;
//-----------------------------------------
#local Side_Beam =
union{ // side strut
  #local Nr = 0; // start counter at zero!
  #while (Nr < 2*NSub )
  object{
   Round_Box(<-BD/2,0,-BD/2>,
             <BD/2,H+2*BR,BD/2>,BR,0)
   matrix< 1, 0, 0, //  matrix-shear_y_to_x
              S_Factor, 1, 0,
              0, 0, 1,
              0, 0, 0>
   #if( Nr/2 != int(Nr/2 )) // uneven numbers
      scale<-1,1,1>
      translate<SubDistance/2,0,0>
   #end
   translate<Nr*SubDistance/2 + BD/2,-2*BR,0>
  } // --------------------------------------
  #local Nr = Nr + 1 ;
  #end // end of loop
  //-----------------------------------------
  // bottom strut
  object{
   Round_Box(<0,-BD,-BD/2>,<L+BD,0,BD/2>,BR,0)
  }
  // top strut
  object{
   Round_Box(<SubDistance/2,-BD,-BD/2>,
             <L-SubDistance/2+BD,0,BD/2>,BR,0)
   translate<0,H,0>
  }
} // end of union side strut
// ---------------------------------
object{ Side_Beam  translate<0,0,0>}
diagonals
Les diagonales par un boucle while.
side strut
L' object{ Side_Beam }

Partie 4 : La macro Steel_Bridge_Framework_1
Deux poutres latérales, quelques poutres de travers au-dessous et des diagonales et quelques longerons additionnels font un pont parfait. Nous ajoutons tous ensemble à une macro pour obtenir la construction si flexible que possible !
//--------------------------------------//////////
#macro Steel_Bridge_Framework_1(
                        Len, // bridge length
                        H, // bridge height
                        W, // bridge width
                        BD,// beam diameter
                        BR,// beam border radius
                      )// ------------------------
// -----------------------------------------------
// ------------------------------- default texture
#ifndef( Steel_Bridge_1_Texture_1 )
#declare Steel_Bridge_1_Texture_1 =
         texture { pigment{ color rgb<1,1,1>*0.5}
                   normal { bumps 0.25 scale 0.35 }
                   finish { phong 1 }
                 } // end of texture
#end // ------------------------------------------
#local L = Len-BD; // inner bridge lenght
//------------------------------------------------
// number of subdivisions:
#local NSub = int(L/H);
// equidistant distribution:
#local SubDistance = L/NSub;
// shearing factor:
#local S_Factor = 0.5*SubDistance/(H+2*BR);

//------------------------------------------------
#local Side_Beam =
union{
 #local Nr = 0; // start counter at zero!
 #while (Nr < 2*NSub )
  object{ Round_Box(<-BD/2,0,-BD/2>,
                    <BD/2,H+2*BR,BD/2>,BR,0)
          texture{ Steel_Bridge_1_Texture_1 }
          matrix< 1,0,0, // matrix-shear_y_to_x
                     S_Factor, 1, 0,
                     0,0,1,
                     0,0,0>
          #if( Nr/2 != int(Nr/2 )) // uneven numbers
            scale<-1,1,1>
            translate<SubDistance/2,0,0>
          #end

          translate<Nr*SubDistance/2+BD/2,-2*BR,0>
        } // -------------------------------------

 #local Nr = Nr + 1 ;
 #end // end

 // bottom strut
 object{ Round_Box(<0,-BD,-BD/2>,<L+BD,0,BD/2>,BR,0)
         texture{ Steel_Bridge_1_Texture_1 }
        }
 // top strut
 object{ Round_Box(<SubDistance/2,-BD,-BD/2>,
                   <L-SubDistance/2+BD,0,BD/2>,BR,0)
         texture{ Steel_Bridge_1_Texture_1 }
         translate<0,H,0>
       }
} // end of union
// -----------------------------------------------
// ---------------------------------- final union:
#union{
 object{ Side_Beam translate<0,0,-W/2+BD/2> }
 object{ Side_Beam translate<0,0,-W/2+BD/2>
                              scale<1,1,-1> }
 object{Round_Box(<0,-BD/2,-BD/3>,<L+BD,0,BD/3>,BR,0)
        texture{ Steel_Bridge_1_Texture_1 }
        translate<0,0,-W/4+BD>
       }
 object{Round_Box(<0,-BD/2,-BD/3>,<L+BD,0,BD/3>,BR,0)
        texture{ Steel_Bridge_1_Texture_1 }
        translate<0,0, W/4-BD>
       }
 #local Nr = 0; // start counter at zero!
 #while (Nr <= NSub )
    // foot traversals
    object{ Round_Box(<-BD/2,-BD,-W/2>,
                      <BD/2,0,W/2>,BR,0)
            texture{ Steel_Bridge_1_Texture_1 }
            translate<Nr*SubDistance + BD/2,0,0>
          }
    // foot diagonals
    #if( Nr < NSub )
    object{ Round_Box(<-BD/4,-BD,-W/2+BD/2>,
                      <BD/4,-BD/2,W/2-BD/2>,BR,0)
          texture{ Steel_Bridge_1_Texture_1 }
          matrix< 1,0,0, //  matrix-shear_y_to_x
                     0,1,0,
                     1*(SubDistance-BD)/(W-BD),0,1,
                     0,0,0>
          #if((Nr/2) = int(Nr/2)) // even numbers
              scale<1,1,-1>
          #end
          translate<(Nr+0.5)*SubDistance+BD/2,0,0>
        }
    #end // end diagonals
 #local Nr = Nr + 1 ;
 #end // end loop
} // end final union
#end // ----------------------------- end of macro
//--------------------------------------//////////

//------------------------------------------------
object{ Steel_Bridge_Framework_1(
                       10.00, // bridge length
                        2.00, // bridge height
                        4.00, // bridge width
                        0.30, // beam diameter
                        0.05,// beam border radius
                      )// ------------------------

  rotate<0, 0,0> translate<0,0.0,0>
} //----------------------------------------------
Note : Pour une utilisation plus confortable comme un objet prêt à l'usage nous devons mettre cet objet dans un fichier include comme on peut voir dans le fichiers exemple ci-contre !





floor beams and diagonals




floor beams and diagonals
Les poutres de travers au-dessous, les diagonales et les longerons.



floor beams and diagonals
Le treillis métallique complet du pont.






















floor beams and diagonals
Le treillis métallique d'un pont.
Le fichier include pour POV-Ray : "Steel_Bridge_Framework_1.inc"
et le fichier de scène pour POV-Ray : "Steel_Bridge_Framework_1_1.pov"

 
Objets prêt à l'usage pour POV-Ray
comme fichiers include avec fichiers exemple
on peut trouver sur la page des Objets prêt à l'usage pour POV-Ray
top

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