跳至內容

File:Triple torus illustration.png

頁面內容不支援其他語言。
這個檔案來自維基共享資源
維基百科,自由的百科全書

原始檔案 (2,204 × 1,550 像素,檔案大小:670 KB,MIME 類型:image/png


描述 Illustration of a triple torus
日期 (UTC)
來源 自己的作品, MATLAB source code below
 
本PNG 點陣圖使用MATLAB創作。
作者 Oleg Alexandrov
Public domain 我,此作品的版權所有人,釋出此作品至公共領域。此授權條款在全世界均適用。
這可能在某些國家不合法,如果是的話:
我授予任何人有權利使用此作品於任何用途,除受法律約束外,不受任何限制。

Source code (MATLAB)

function main()

  % illustration of a triple torus
   
   % torus radii 
   r = 1;
   R = 3;
   
   Kb = R+r;
   Ks = R-r;

   % Km controls the smoothness of the transition from one ring to the others
   Km = 0.5125*Kb;

   L = 2.5*(r+R);

   h = 0.2; % grid size
   
   X = (-L):h:L; m = length(X);
   Y = (-L):h:L; n = length(Y);
   Z = (-1.1*r):h:(1.1*r); k = length(Z);

   W = zeros(m, n, k);

   for i=1:length(X)
      for j=1:length(Y)
         x = X(i);
         y = Y(j);
         
         [x, y] = triple_torus_function (x, y, r, R, Kb, Km);
         val = (sqrt(x^2+y^2)-R)^2-r^2;
         W(i, j, :) = val + Z.^2;

      end
   end

   figure(1); clf; hold on;
   axis equal; axis off;

   light_green=[184, 224, 98]/256; % light green

   H = patch(isosurface(X, Y, Z, W, 0));
   isonormals(X, Y, Z, W, H);
   mycolor = light_green;

   set(H, 'FaceColor', mycolor, '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))
   view(-12, 40);

   % add in a source of light
   camlight (-50, 54); lighting phong;

   print('-dpng', '-r400',  ...
         sprintf('Triple_torus_illustration.png'));
   

function [x, y] = triple_torus_function (x, y, r, R, Kb, Km)

% a deformation in the plane, which, when comosed with a torus will give
% a triple torus   
   
% center of one of the torii
   O = [-Kb, -Kb/sqrt(3)]; 
   
   angle = 2*pi/3;
   Mat = [ cos(angle)  -sin(angle); sin(angle)   cos(angle)  ];
   
   p =[x, y]';
   phi = atan2(y, x);
   
   if phi >= pi/6 & phi <= 5*pi/6
      p = Mat*p; % rotate 120 degree counterclockwise
   elseif phi >= -pi/2 & phi < pi/6
      p = Mat*p; p = Mat*p; % rotate 240 degrees counterclockwise
   end
   
   x=p(1); y = p(2);
   
% reflect against a line, to merge two cases in one
   if y > x/sqrt(3)
      
      p = [x, y];
      v = [cos(2*pi/3), sin(2*pi/3)];
      
      p = p - 2*v*dot(p, v)/dot(v, v);
      x = p(1); y = p(2);
      
   end
   
   if x > O(1)
      
% project to the y axis, to a point B
      if y < O(2)
         
         A = [O(1), y];
         B = [0, y];
      else

         A = O;

         p = [x, y];
         rho = norm(p-O);

         B = O+(Kb/rho)*(p-O);
         
%         t = -O(1)/(x-O(1));
%         B = [0, O(2)+t*(y-O(2))];
         
      end
      
      p = [x, y];
      
      d=norm(p-A);
      q = norm(B-A);
      
      d = my_map(d, q, Km);
      p = (d/q)*B+(1-d/q)*A;
      x=p(1); y=p(2);
      
   end
   
% shift towards the origin
   x = x-O(1);
   y = y-O(2);

function y = my_map(x, Kb, Km)
   
   if x > Kb
      y = Km + 1;
   elseif x < Km
      y = x;
   else
      y = Km+sin((pi/2)*(x-Km)/(Kb-Km));
   end

說明

添加單行說明來描述出檔案所代表的內容

在此檔案描寫的項目

描繪內容

沒有維基數據項目的某些值

作者姓名字串 繁體中文 (已轉換拼寫):​Oleg Alexandrov
維基媒體使用者名稱 繁體中文 (已轉換拼寫):​Oleg Alexandrov

著作權狀態 繁體中文 (已轉換拼寫)

檔案來源 Chinese (Taiwan) (已轉換拼寫)

上傳者的原創作品 繁體中文 (已轉換拼寫)

檔案歷史

點選日期/時間以檢視該時間的檔案版本。

日期/時間縮⁠圖尺寸用戶備⁠註
目前2008年7月1日 (二) 03:01於 2008年7月1日 (二) 03:01 版本的縮圖2,204 × 1,550(670 KB)Oleg Alexandrovchange viewing angle
2008年7月1日 (二) 02:48於 2008年7月1日 (二) 02:48 版本的縮圖1,958 × 1,335(530 KB)Oleg AlexandrovImplementation using isosurface. Much better quality and much simpler than using patches. Will upload source code too. Same license, public domain.
2008年6月23日 (一) 04:42於 2008年6月23日 (一) 04:42 版本的縮圖1,320 × 1,000(366 KB)Oleg AlexandrovFix a small imperfection in Gimp
2007年9月10日 (一) 02:54於 2007年9月10日 (一) 02:54 版本的縮圖1,320 × 1,000(366 KB)Oleg AlexandrovTweak
2007年9月7日 (五) 18:01於 2007年9月7日 (五) 18:01 版本的縮圖372 × 263(49 KB)Oleg Alexandrov{{Information |Description= Illustration of en:Triple torus |Source=self-made with MATLAB, source code below |Date=~~~~~ |Author= Oleg Alexandrov }} {{PD-self}} ==MATLAB source code== <pre> <nowiki> % illustration of a tripl

下列2個頁面有用到此檔案:

全域檔案使用狀況

以下其他 wiki 使用了這個檔案:

檢視此檔案的更多全域使用狀況