Beschreibungen und Beispiele zum Raytracer POV-Ray von Friedrich A. Lohmüller
    POV-Ray Beispiele - Die Erstellung von Objekten für POV-Ray
English English English
Italiano Italiano
Français français

Home
- POV-Ray Tutorial

  - POV-Ray Beispiele
    Inhaltsübersicht
  - Geometrie
  - Architektur
  - Technik
    - Leiter
    - Masten
    - Geländer
    - Brücke
    - Röhren
    - Rohrabzweigung
    - Rohr-Absperrhahn
    - Kette
    - Drahtspule
    - Torpedo
    - Cruise Missile
    - Rakete
    - Rad
    - Truck
    - Propeller
    - Flugzeug
    - Kanu
    - Gitarrenbody
    - 7-Segment Display
    - Flachbandkabel
    - Kabelbaum
                                       
 
Steel_Bridge_1

Gitterwerk einer Stahlbrücke

Objekte:  Round_Box, cylinder.
Methoden: #local, #declare, union, #macro, #while loops, #if, Scherung mit 'matrix'.
Diese Beispiel zeigt wie man das Gitterwerk einer Gitterbrücke von Warren-Typ für eine Straßen- oder Eisenbahnbrücke erstellt. Hierbei kann man variable Größen für die Abmessungen der Brücke verwenden.

Die Konstruktion im Detail:
 
Schritt 0: Zuerst deklarieren wir die Grundvariablen für die Dimensionen der Brücke (Texturen können beliebig gewählt werden!):
#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
Step 1: Sodann berechnen wir die Anzahl der Unterteilungen (subdivision) und ihre Länge für eine äquidistante Verteilung der Segmente. Ebenso deklarieren wir den Scherungsfaktor (shearing factor) (Berechnung siehe nebenstehendes Abbildung):
 // 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;
Schritt 2: Now we make a pair of diagonal beams:
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
Wie man den Scherungsfaktor S berechnet.
pair of diagonals
Ein Paar gescherte Diagonalen.

Schritt 3: Nun platzieren wir die Diagonalen mit einer While-Schleife (grün). Für ungerade Nummern spiegeln wir den Träger in x und verschieben ihn um 'SubDistance/2' in x-Richtung (rot). Ferner addieren wir einen unteren und einen oberen Längsträger um denvollständigen Längsträger (side beam) zu erhalten:
// 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
Die Diagonalen mittels einer While-Schleife.
side strut
Das object{ Side_Beam }

Schritt 4: Das Makro Steel_Bridge_Framework_1
Zwei Längsträger oben und unten, einige Querträger und Diagonalen unten und einige zusätzliche Längsträger vervollständigem das Gitterwerk der Brücke. Wir fügen alles in einem Makro zusammen um die Konstruktion so flexibel wie möglich zu halten!
//--------------------------------------//////////
#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>
} //----------------------------------------------
Anmerkung: Für einen komfortableren Gebrauch diese Objects als Fertig-Objekt, sollte das fertige Objekt in eine Include-Datei gepackt werden wie es in nebenstehenden Beispieldateinen demonstriert wird!





floor beams and diagonals




floor beams and diagonals
Die unteren Träger, Diagonalen und Längsträger.



floor beams and diagonals
Das vollständige Gitterwerk einer Fachwerkbrücke.






















floor beams and diagonals
The framework of a truss bridge.
Include file for POV-Ray: "Steel_Bridge_Framework_1.inc"
and scene file for POV-Ray: "Steel_Bridge_Framework_1_1.pov"

 
Download of all ready-made POV-Ray objects
zipped up (with all include files, example files and with
the according Insert Menu Add-ons for comfortable use!)
at the POV-Ray Objects Seite
top

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