camera { //VideoCamera location < 0, -4.000, 15.000> sky < 0.00000, 0.00000, 1.00000> up < 0.0, 0.0, 1.0> right < 1.35836, 0.0, 0.0> angle 40.00000 look_at < 0, 0.000, 0.000> } light_source {<0.0, 0.0, 0.0> color rgb <1.000, 1.000, 1.000> translate <0.0, 7.0, 20.0> } //background { color <1.000,1.000,1.000> } plane { z,0 pigment {checker color rgb <1.0, 1.0, 1.0> color rgb <0.0, 0.0, 0.0> } finish {ambient 0.65} rotate -45.0*x translate -4.0*z } //Il filo verde //La funzione specificata viene tracciata nell'intervallo (-L/2,+L/2) per una //lunghezza totale di L union { #declare L = 10; //Lunghezza max #declare N = 25; //Numero di spire; per cambiare verso di rotazione delle spire //basta cambiare il segno di N #declare R1 = 0.5; //Raggio dell'avvolgimento #declare R2 = 0.1; //Raggio del filo/spessore del nastro #declare D = 1500; //Livello di dettaglio #declare Modo = 0; // 0 = Modo 'Filo' // 1 = Modo 'Nastro' #declare C = 0; #declare W = 2*pi*N/L/(Modo+1); #declare D = D*(Modo+1); #while (C<=D) #declare Value1 = (C/D-0.5)*L; #declare Value2 = ((C+1)/D-0.5)*L; //Queste righe vanno modificate quando si cambia la funzione "portante" //In questo caso è il sin(x) #declare PBase1 = sin(Value1); #declare PBase2 = sin(Value2); //Modificare anche qui quando si cambia funzione //sostituire cos(x) con la derivata della funzione "portante" #declare Deriv1 = cos(Value1); #declare Deriv2 = cos(Value2); #declare Angolo1= atan2(Deriv1,1)-pi/2; //Angolox è un angolo perpendicolare alla tangente #declare Angolo2= atan2(Deriv2,1)-pi/2; #declare Punto1x= R1*cos(Value1*W)*cos(Angolo1); #declare Punto1y= R1*cos(Value1*W)*sin(Angolo1); #declare Punto1z= R1*sin(Value1*W); #if (Modo=0) #declare Punto2x= R1*cos(Value2*W)*cos(Angolo2); #declare Punto2y= R1*cos(Value2*W)*sin(Angolo2); #declare Punto2z= R1*sin(Value2*W); #declare Point1 = (Value1+Punto1x)*x+(PBase1+Punto1y)*y+Punto1z*z; #declare Point2 = (Value2+Punto2x)*x+(PBase2+Punto2y)*y+Punto2z*z; sphere {Point1, R2} cylinder {Point1, Point2, R2} #end #if (Modo=1) #declare Punto2x= R1*cos(Value1*W+pi)*cos(Angolo1); #declare Punto2y= R1*cos(Value1*W+pi)*sin(Angolo1); #declare Punto2z= R1*sin(Value1*W+pi); #declare Point1 = (Value1+Punto1x)*x+(PBase1+Punto1y)*y+Punto1z*z; #declare Point2 = (Value2+Punto2x)*x+(PBase2+Punto2y)*y+Punto2z*z; sphere {Point1, R2} cylinder {Point1, Point2, R2} sphere {Point2, R2} #end #declare C = C+1; #end pigment {color <0,1,0>} finish {ambient 0.3} }