  | 
          
            This is a file from the  Wikimedia Commons. Information from its  description page there is shown below.  Commons is a freely licensed media file repository.  You can help. 
           | 
         
        
        
       
        
         
          
           | 
            
            | 
           This chart was created with  MATLAB. | 
          
         
         
        
         
          
           | Description | 
           Illustration of  en:Double torus | 
          
          
           | Date | 
           05:50, 6 September 2007 (UTC) | 
          
          
           | Source | 
           Own work | 
          
          
           | Author | 
            Oleg Alexandrov | 
          
         
         
        
         
          | Public domainPublic domainfalsefalse | 
         
        
        
         
            | 
          I, the copyright holder of this work, release this work into the  public domain. This applies worldwide. In some countries this may not be legally possible; if so: I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.Public domainPublic domainfalsefalse 
           | 
         
        
        
         
        
        Source code 
        
         
% illustration of a double torus, obtained as an isosurface
function main()
 
   % big and small radii of the torus
   R = 3; r = 1; 
 
   % c controls the transition from one ring to the other
   c = 1.3*pi/2;
 
   Kb = R+r;
 
   h = 0.1; % h is the grid size. Smaller h means prettier picture.
 
   X = (-Kb-h):h:(3*Kb+h); m = length(X);
   Y = (-Kb-h):h:(Kb+h);   n = length(Y);
   Z = (-r-h):h:(r+h);     k = length(Z);
 
   W = zeros(m, n, k); % the zero level set of this function will be the desired shape
 
   for i=1:m
      for j=1:n
         x = X(i); x = my_map(x, Kb, c);   % map from two torii to one torus
         y = Y(j); 
         W(i, j, :) = (sqrt(x^2+y^2)-R)^2 + Z.^2-r^2; % torus eqn, vectorize in Z
      end
   end
 
   figure(4); clf; hold on; axis equal; axis off;
 
   H = patch(isosurface(W, 0));
   isonormals(W, H);
 
   light_green=[184, 224, 98]/256;
 
   % set some propeties
   set(H, 'FaceColor', light_green, 'EdgeColor','none', 'FaceAlpha', 1);
   set(H, 'SpecularColorReflectance', 0.1, 'DiffuseStrength', 0.8);
   set(H, 'FaceLighting', 'phong', 'AmbientStrength', 0.3);
   set(H, 'SpecularExponent', 108);
 
   daspect([1 1 1]);
   axis tight;
   colormap(prism(28))
 
% viewing angle
   view(-165, 42);
 
% add in a source of light
   camlight (-50, 54); lighting phong;
 
% save as png
  print('-dpng', '-r500', sprintf('Double_torus_illustration.png'));
 
% This function constructs the second ring in the double torus
% by mapping from the first one.
function y=my_map(x, K, c)
 
   if x > K
      x = 2*K - x;
   end
 
   if x < K-c
      y = x;
   else
      y = (K-c) + sin((x - (K-c))*(pi/2/c));
   end
 
         
        
        
        
       File usage
       
        The following pages on Schools Wikipedia link to this image (list may be incomplete):