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

macro "Round_Tube_Ring_N (...)" Übersicht meine Macro-Objekte macro "Egg_Shape (...)"

Diese Objekte sind in meiner Include_Datei "shapes_lo.inc" als Makros definiert:

Column_N

Column_N
Eine Säule
mit n vertikalen Kanten

Pyramid_N

Pyramid_N
Eine n-eckige Pyramide


    Reguläre Säule mit N Ecken
    (N vertikale Kanten)
    Reguläres, senkrechtes,
    n-eckiges Prisma

 
Syntax:
object{ Column_N (N, Radius, Height)
        texture{ ... ... }
      } // end of object ------------
Wobei N >2 = die Anzahl der vertikalen Kanten,
Radius = bedeutet die halbe Weite (Abstand einer vertikalen Fäche vom Mittelpunkt) und
Height = die Höhe der Säule.
Beispiel:
#include "shapes_lo.inc"
object{ Column_N (14, 1.8, 1.30 )
        texture { pigment{color rgb<1,1,1>}
                  finish {ambient 0.05
                          diffuse 0.95
                          phong 1}
                } // end of texture
      } // end of object ------------------
    Reguläre n-eckige Pyramide
         
auch Pyramidenstumpf

 
Syntax:
object{ Pyramid_N (N, Radius1, Radius2, Height)
        texture{ ... ... }
      } // end of object ------------
Mit N >2 = die Anzahl der Ecken der Grundfläche,
Radius1 = die halbe Basis-Weite,
Radius2 = die halbe Weite am oberen Ende und
Height = Höhe der Pyramide.
Wählt man den Radius2 = 0 wird die Pyramide oben spitz zulaufen.
 
Beispiel:
#include "shapes_lo.inc"
object{ Pyramid_N  (14, 1.8, 1.30, 1.00 )
        texture { pigment{color rgb<1,1,1>}
                  finish {ambient 0.05
                          diffuse 0.95
                          phong 1}
                } // end of texture
      } // end of object ------------------


Die Makros im Detail

Um zu zeigen wie es arbeitet beginnen wir beim Pyramid_N-Makro :

//--------------------------------------------------------- Pyramid_N macro
#macro Pyramid_N (N, Radius1, Radius2, Height)
//-------------------------------------------------------------------------
#local D= 0.00001;

intersection{
 #local Nr = 0;    // start
 #local EndNr = N; // end
 #while (Nr < EndNr)

  // linear prism in z-direction:
  prism { -2.00 ,2.00 , 5 // from z1, to z2 , number of points (first = last)
         <-2.00, 0.00>, < 1.00,  0.00>,
         < 0.00+Radius2/Radius1,1.00>,
         <-2.00,1.00>, <-2.00, 0.00>
         rotate<-90,0,0> scale<1,1,-1> //turns prism in z direction!
         scale <Radius1+Nr*D,Height+Nr*D,Radius1+Nr*D>
         rotate<0,Nr * 360/EndNr,0>
     } // end of prism ----------------------------------------------------

 #local Nr = Nr + 1;    // next Nr
 #end // ----------------  end of loop
} // end of intersection

#end // ------------------------------------------------------ end of macro

Startet man das Makro mit = 1 wird eine degenerierte Schnittmenge (intersection) von nur einem Prisma entstehen.
N dieser Elemente müssen lediglich in 360/N Gradschritte um die y-Achse gedreht werden und alle miteinander zum Schnitt gebracht werden:

 
Samples one prism Samples intersection of prisms
N = 1, Radius1 = 1.70, Radius2 = 1.10, Height= 1.50 N = 11, Radius1 = 1.70, Radius2 = 1.10, Height= 1.50

Eine Säule mit n vertikalen Kanten ist in diesem Sinne nichts anderes als ein Pyramidenstumpf mit derselben Kopf- und Basisweite. Daher verwendet das folgende Makro einfach das obige Makro:


//--------------------------------------------- Column_N macro
#macro Column_N  (N, Radius, Height )
//------------------------------------------------------------
object{ Pyramid_N (N, Radius, Radius, Height )
      }
#end // ---------------------------------------- end of  macro
Samples column Samples column
N = 3, Radius = 1.00, Height= 0.50 N = 14, Radius = 1.80, Height= 1.30
Samples column Samples column
N = 7, Radius = 2.00, Height= 1.00 N = 7, Radius1 = 2.00, Height= 1.00




macro "Round_Tube_Ring_N (...)" Übersicht meine Macro-Objekte macro "Egg_Shape (...)"

© Friedrich A. Lohmüller, 2010
email email: (legacy email redacted)
homepage:www.f-lohmueller.de