Les Solenoïdes |
|
Ces courbes sont définies par l'équation suivante : Script : #declare nbTours = 2*pi; #declare r = 0.25; #declare step=pi/250; #declare currentPt = <0.00, 0.00, 0.00>; #declare previousPt = <0.00, 0.00, 0.00>; #declare theColor = rgb <0.00, 0.00, 0.00>; #declare majorRadius = 5.00; #declare minorRadius = 1.00; #declare n = 9/4; // --- calcul du nombre de touts nécessaire pour que la courbe soit fermée #if(int(n) != n) #declare frac = n-int(n); #declare nbT = 1/frac; #debug concat ( "\n-- n = ", str(n,5,3), " decimale = ", str(frac,5,4), " Nb tours = ", str(nbT,5,1), "\n" ) #if( int(nbT) != nbT ) #set frac = nbT-int(nbT); #set nbT = nbT/frac; #end #debug concat("-- Nb tours final = ",str(nbT,5,1),"\n\n") #set nbTours = nbTours*nbT; #end #declare i=0; #while (i< nbTours) #set theColor = rgb CH2RGB(degrees(i)); #set currentPt = < (majorRadius+minorRadius*cos(n*i))*cos(i), (majorRadius+minorRadius*cos(n*i))*sin(i), minorRadius*sin(n*i) >; sphere { currentPt, r pigment { theColor } finish { courbeFinish } } #if(i!=0) cylinder { previousPt, currentPt, r pigment { theColor } finish { courbeFinish } } #end #set previousPt = currentPt; #set i=i+step; #end torus { majorRadius, minorRadius rotate 90*x pigment { color White transmit 0.70 } finish { ambient 0.40 diffuse 0.60 brilliance 2 } }-- Mêmes remarques que les courbes précédentes. -- Toute une partie permet de calculer le nombre de tours nécessaire pour que la courbe soit fermée. -- Le tore est représenté en transparence. On obtient alors l'image suivante : | |
![]() |