GALERIE    EN COURS    SCENES    MACROS    GUIDE    A PROPOS


Les Solenoïdes



Ces courbes sont définies par l'équation suivante :
  • x = (R+r.cos(n.t)).cos(t)
  • y = (R+r.cos(n.t)).sin(t)
  • z = r.sin(n.t)
  • t = [0..4π]
  • R est le rayon principal du tore
  • r est le rayon secondaire du tore
  • n est demi-nombre de noeuds


SDL POV :
#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 aussi représenté en transparence.

On obtient alors l'image suivante :
solenoide





Haut de la page | Sommaire ]