Descriptions et exemples pour le POV-Ray raytracer par Friedrich A. Lohmüller,
traduit en français par Henri Girard.
English English English
Italiano  Italiano
Deutsch 

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

Cette forme est définie comme une "macro" dans mon include file "shapes_lo.inc":

Column_N

Column_N
colonne avec N côtés

Pyramid_N

Pyramid_N
colonne avec N côtés


  Colonnes régulières avec N côtés
 
syntaxe générale:
object{ Column_N (N, Radius, Height)
        texture{ ... ... }
      } // end of object ------------
ici N >2 = le nombre de côtés,
Radius = est la moitié de la longueur et
Height est la hauteur totale de la colonne.






Exemple:
#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 ------------------
    Pyramide avec N côtés,
          aussi découpée

 
syntaxe générale:
object{ Pyramid_N (N, Radius1, Radius2, Height)
        texture{ ... ... }
      } // end of object ------------
ici N >2 = le nombre de côtés,
Radius1 = est la moitié de la longueur alla base et,
Radius2 = est la moitié de la longueur supérieure
Height est la hauteur totale de la colonne.
Si on choisi "Radius2 = 0" la pyramide ne sera pas découpée.
 
Exemple:
#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 ------------------


Macros en détail

Pour montrer comment ça marche avec la 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

Si on débute cette macro avec N = 1, le résultat sera une intersection dégénérée d'un seul prisme.
Ce que nous devons faire, c'est tourner l'axe des y de ces éléments par 360/N et de les séparer tous :

 
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

Une colonne à N côtés est ni plus ni moins qu'une pyramide découpée avec le rayon supérieur = rayon de base, ainsi la macro suivante fonctionnera avec la macro ci-dessous :


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