Descrizioni et esempi per il raytracer POV-Ray di Friedrich A. Lohmüller
English English English
Français français
Deutsch Deutsch

macro "Round_Tube_Ring_N (...)" overview my macro objects macro "Egg_Shape (...)"

Quest'oggetto è definito con una macro nel mio include file "shapes_lo.inc":

Column_N

Column_N
Colonna regulare con N lati

Pyramid_N

Pyramid_N
Piramide regulare con N lati


    Colonna regulare con N lati
 

Sintassi generale:
object{ Column_N (N, Radius, Height)
        texture{ ... ... }
      } // end of object ------------
Qui N >2 = il numero di lati,
Radius = la mezza larghezza e
Height è l'altezza totale della colonna.



Esempio:
#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 ------------------ 
    Piramide regulare con N lati
          anche tagliata

 
Sintassi generale:
object{ Pyramid_N (N, Radius1, Radius2, Height)
        texture{ ... ... }
      } // end of object ------------ 
Here N >2 = il numero di lati,
Radius1 = significa la mezza larghezza della base,
Radius2 = significa la mezza larghezza del lato superiore e
Height è l'altezza totale della piramide.
Se scegliamo: Radius2 = 0 la piramide sarà troncata.
 
Esempio:
#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 ------------------ 


Macro nel dettaglio

Per dimostrare come lavora questa macro comminciamo con il Pyramid_N macro :

//--------------------------------------------------------- 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

Se comminciamo con questa macro con N = 1 il resultato sarà essere un'intersezione degenerata di un solo prisma. Perciò tutto da fare è di tornare N prismi intorno al'asse y con 360/N gradi e fare un'intersezione con tutto:
 
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

Una Colonna con N lati è niente altro che una piramide troncata con il raggio di base = il raggio superiore, cioè il macro seguente lavora con il macro in alto:


//--------------------------------------------- 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 (...)" overview my macro objects macro "Egg_Shape (...)"

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