Checked content

File:Double torus illustration.png

Matlab Logo.png
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 domain 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.


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
The following pages on Schools Wikipedia link to this image (list may be incomplete):

What is Schools Wikipedia?

Wikipedia for Schools was collected by SOS Children's Villages. By supporting vulnerable children right through to adulthood, SOS Children makes a lasting difference to the lives of thousands of people. Education is a key part of our work, and our schools provide high-quality teaching to the children in our care. Go to http://www.soschildrensvillages.org.uk/sponsor-a-child to sponsor a child.