GALERIE    EN COURS    SCENES    MACROS    GUIDE    A PROPOS


Les Solenoïdes



Ces courbes sont définies par l'équation suivante :
$$\begin{align} x &= (R+rcos(nt))cos(t)\\y &= (R+rcos(nt))sin(t)\\z &= rsin(nt)\\\\t &\in 0\;..\;4\pi\\\\R &= \text{rayon principal du tore}\\r &= \text{rayon secondaire du tore}\\n &= \text{demi-nombre de noeuds}\end{align}$$

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 :
solenoide