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

macro "Segment_of_CylinderRing (...)" Übersicht meine Macro-Objekte macro "Segment_of_Object (...)"

Dieses Objekt ist in meiner Include_Datei "shapes_lo.inc" als Makro definiert:

Torus_Segment

Segment_of_Torus


    Segment eines Torus
 
Syntax:
object{ Segment_of_Torus (R_major, R_minor, Segment_Angle)
        texture{ ... ... }
      } // end of object ------------
With:
R_major = der Hauptradius des Torus,
R_minor = der Nebenradius des Torus,
Segment_Angle = der Winkel des Torussegments, links-händig orientiert!

Aus Kompatibilitätsgründen wurde das alte Makro "Torus_Segment"
beibehalten - dort war der Winkel rechtshändig definiert!
Beispiele:
#include "shapes_lo.inc"
object{ Segment_of_Torus( 1.00, 0.25, -145)
        texture { pigment{color rgb<1,0.7,0>}
                  finish {ambient 0.15 diffuse 0.85 phong 1}
                } // end of texture
        rotate<-90,0,0> translate<0,1,0>
      } // end of Segment_of_Torus(...) -----------------------


object{ Segment_of_Torus( 0.60, 0.25,-275)
        texture { pigment{color rgb<1,0.4,0>}
                  finish {ambient 0.15 diffuse 0.85 phong 1}
                } // end of texture
        rotate<0,30,0> translate<0.5,0.3,-0.5>
      } // end of Segment_of_Torus(...) -----------------------

object{ Segment_of_Torus( 0.60, 0.50, -60)
        texture { pigment{color rgb<1,0.2,0>}
                  finish {ambient 0.15 diffuse 0.85 phong 1}
                } // end of texture
        rotate<-90,0,-190> translate<0,1,0>
      } // end of Segment_of_Torus(...) ----------------------- 


Das Makro im Detail:

Dafür müssen wir zwei Fälle betrachten:
1. Betrag(Segmentwinkel) <= 180 Grad (Nur die Schnittmenge von Torus und den zwei Quadern) und
2. Betrag(Segmentwinkel) > 180 Grad (Eine Schnittmenge (intersection) des Torus mit einer Vereinigungsmenge (union) der beiden Quader):

//--------------------------------------------------------Segment_of_Torus macro
#macro Segment_of_Torus ( R_major, R_minor, Segment_Angle)
//---------------------------------------------------------------------------
#local D =  0.00001;

 #if (Segment_Angle < 0)
      #local Negativ_Flag = 1;
      #local Segment_Angle = -Segment_Angle;
 #else
      #local Negativ_Flag = 0;
 #end

#if (Segment_Angle > 360) #local Segment_Angle = mod(Segment_Angle,360); #end

intersection{
 torus { R_major, R_minor }

#if (Segment_Angle > 180)
 union{
#end // use union!

 box   { <-1,-1,0>,<1,1,1>
         scale < R_major+R_minor+D, R_minor+D, R_major+R_minor+D>
       }// end of box
 box   { <-1,-1,-1>,<1,1,0>
         scale < R_major+R_minor+D, R_minor+D, R_major+R_minor+D>
         rotate < 0,-Segment_Angle,0 >
       }// end of box

#if (Segment_Angle > 180)
 }
#end // end of union, if union is used!

 #if (Negativ_Flag = 0)  rotate<0, Segment_Angle,0>   #end

 } // end of intersection
#end  // ------------------------------- end of macro Segment_of_Torus

Die folgenden Bilder zeigen wie dieses Makro arbeitet
(Die Quader wurden in Textur "glass" verdeutlicht):

 
Segment_of_Torus Segment_of_Torus
abs(Segment_Angle) <= 180 degrees
R_major = 1.00, R_minor = 0.25, Angle = 145
abs(Segment_Angle) > 180 degrees
R_major = 1.00, R_minor = 0.25, Angle = 215






macro "Segment_of_CylinderRing (...)" Übersicht meine Macro-Objekte macro "Segment_of_Object (...)"

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