Geometrische Körper aus meiner Include-Datei "shapes3.inc"
( ehemals "shapes_lo.inc"):
Facetted_Egg, facettiertes Ei.
Syntax:
object{ Facetted_Egg(
Quarter_Meridian_Segments,
Equatorial_Segments
) //------------------------
texture{ ... ... }
} // end of object -----------
|
|
Facetted_Egg_Shape, facettierte Eiform.
Syntax:
object{ Facetted_Egg_Shape(
Quarter_Meridian_Segments,
Equatorial_Segments,
Lower_Scale, Upper_Scale
) //-----------------------
texture{ ... ... }
} // end of object ----------- |
|
Quarter_Meridian_Segments = Anzahl der Segmente in einem Viertel des Meridians,
Equatorial_Segments = Anzahl der Segmente längs des Äquators,
Lower_Scale = y-Maßstab der unteren Objekthälfte,
Upper_Scale = y-Maßstab der oberen Objekthälfte.
Die Gesamthöhe des Objekts ist auf 2 Einheiten skaliert.
Beispiele:
#include "shapes3.inc"
object{ Facetted_Egg (6, 12 )
texture{ pigment{ color rgb<1,1,1>}
finish { phong 0.1}
}
scale 1 rotate<0,10,0>
translate<0,1.15,0>
} // end of object -----------------------
|
#include "shapes3.inc"
object{ Facetted_Egg_Shape (9, 22, 1.85, 0.80)
texture{ pigment {color rgb<1,1,1>*1.3}
finish { phong 0.1}
}
scale 1 rotate<0,10,0>
translate<0,1.85,0>
} // end of object ----------------------- |
Das Makro im Detail:
Das Makro verwendet eine Schnittmenge von Prismen, welche an einem Ende eine eiförmig facettierte Umrisslinie haben:
|
|
Facetted_Sphere - 1 prism element of the intersection
|
Facetted_Sphere (6, 12 ) = intersection of 12 prisms
|
//------------------------ macro Facetted_Egg_Shape()
#macro Facetted_Egg_Shape( Quarter_Segments,
Radial_Segments,
Lower_Scale,
Upper_Scale
) //-----------------------
#local Facets_Silhouette =
union{
prism {
-2 ,2 , Quarter_Segments +3
< -2,-1.00>,
#local Nr = -Quarter_Segments;
#local EndNr = 0;
#while (Nr < EndNr+1)
#local Angle_degrees = Nr* 90/Quarter_Segments;
#local Angle_radians = radians(Angle_degrees);
< cos (Angle_radians) , sin (Angle_radians)> ,
#local Nr = Nr + 1 ;
#end
< -2, 0>
//turns prism in z direction:
rotate <-90,0,0> scale <1,1,-1>
scale <1,Lower_Scale,1>
} // end of prism object --------------------------
prism {
-2 ,2 , Quarter_Segments+4
< -2, 0>,
#local Nr = 0;
#local EndNr = Quarter_Segments;
#while (Nr < EndNr+1)
#local Angle_degrees = Nr* 90/Quarter_Segments;
#local Angle_radians = radians(Angle_degrees);
< cos (Angle_radians) , sin (Angle_radians)> ,
#local Nr = Nr + 1 ;
#end
< -2, 1>,
< -2, 0>
//turns prism in z direction:
rotate <-90,0,0> scale <1,1,-1>
scal e<1,Upper_Scale,1>
} // end of prism object -----------------------
}// end of union
intersection{
#local Nr = 0; // start
#local EndNr = Radial_Segments; // end
#while (Nr < EndNr)
object{ Facets_Silhouette rotate <0,Nr * 360/EndNr,0>}
#local Nr = Nr + 1; // next Nr
#end // --------------- end of loop
} // end of intersection
#end // --------- end of macro Facetted_Egg_Shape() |
Das Facetted_Egg-Makro verwendet obiges Makro mit fester Skalierung Lower_Scale = 1.15 und Upper_Scale = 1.55:
// ------------------------------------------------- macro Facetted_Egg()
#macro Facetted_Egg(N_Quarter_Segments, N_Radial_Segments)
object{ Facetted_Egg_Shape(N_Quarter_Segments,N_Radial_Segments,1.15,1.55)
translate < 0, 1.15, 0>
scale 2/(1.15 + 1.55)
} //---------------------
#end // -------------------------------------- end of macro Facetted_Egg() |
|
|