Descrizioni ed esempi per il raytracer POV-Ray di Friedrich A. Lohmüller
Esempi POV-Ray - Come fare oggetti per POV-Ray
English English English
Français français
Deutsch Deutsch

Home
- POV-Ray Tutorial

  - Esempi per POV-Ray
    Indice generale
  - Geometria
  - Architettura
  - Tecnica
    - Scala a Pioli
    - Piloni e Tralicci
    - Parapetto
    - Ponte
    - Tubi e Tubature
    - Bifucazione di Tubi
    - Rubinetto di Arresto
    - Catena
    - Bobina di filo
    - Torpedo
    - Cruise Missile
    - Razzo, Missile
    - Ruota
    - Camion
    - Elica
    - Aeroplano
    - Canoa
    - Chitarra
    - Display a 7 Segmenti
    - Cavo piatto
    - Fascio di cavi
                                       
 
Steel_Bridge_1

Come si fa il Traliccio d'acciaio
di un Ponte a traliccio

Ogetti:   Round_Box, cylinder.
Metodi: #local, #declare, union, #macro, #while loops, #if,
            scorrimento elastico con matrix.
Qui un esempio come si può fare il traliccio d'acciaio un ponte a traliccio per strade o come un ponte ferroviario. È possibile usare misure variabili per le dimensioni del traliccio.

La Costruczione nel dettaglio:
 
Passo 0: Prima dichiaramo le variabili di base per le dimensioni del ponte (Le testure sono alla vostra libera scelta !):
#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
Passo 1: Poi calculiamo il numero delle suddivisioni e la lunghezza delle suddivisioni per una distibuzione equidistante dei segmenti. Calculiamo anche il fattore dello scorrimento elastico (shearing factor) (Come calculare q.v. l'immagine in margine!):
 // 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;
Passo 2: Inoltre facciamo un paio di diagonali:
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
Come calculare il fattore dello scorrimento elastico S.
pair of diagonals
Paio di diagonali con lo scorrimento elastico.
Passo 3: Adesso posizioniamo le diagonali con un while loop (verde). Per numeri dispari facciamo un immagine riflessa al asse x e spostiamo la diagonale con 'SubDistance/2' in direzione x (rosso). Aggiungiami anche una trave di base et al spigolo superiore per ottenere una travatura lungo del ponte (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
Le diagonali con un while loop.
side strut
L'ogetto: object{ Side_Beam }

Passo 4:La macro Steel_Bridge_Framework_1
Due trave lungo i lati, qualche traversa e diagonali e qualche trave addizionale per completare il ponte. Aggiungiamo tutti insieme in una macro per ottenere una costruzione cosi flessibile come possibile!
//--------------------------------------//////////
#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>
} //----------------------------------------------
Nota: Per una applicazione più comodo come un oggetto pronto per l'uso dobbiamo scrivere tutto in un include file come demostrato nei file di esempio qui in margine!





floor beams and diagonals




floor beams and diagonals
Le traverse, diagonali e trave lungo il ponte.



floor beams and diagonals
Il traliccio completo di un ponte.






















floor beams and diagonals
Il traliccio di un ponte.
Include file per POV-Ray: "Steel_Bridge_Framework_1.inc"
e file de scena per POV-Ray: "Steel_Bridge_Framework_1_1.pov"

 
Oggetti pronto per l'uso per POV-Ray
come archivi include con archivi esempio
sono su la paggina Oggetti POV-Ray.
top

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