function torus_map(kmx) t1 = 2*pi*(0:199)/199; t2 = 2*pi*(0:319)/319; r = 2; [P,Q] = meshgrid(t2,t1); Z = sin(Q); YY = sqrt(r^2 + 1 - 2*r*cos(Q)).*sin(P); XX = sqrt(r^2 + 1 - 2*r*cos(Q)).*cos(P); Cdat = Z; figure(1); clf; surface(XX,YY,Z,Cdat,'EdgeColor','none') axis equal; colormap('default'); view(8,45); M = [ 2 1; 1 1]; [n1,n2] = size(Z); Mt = M^kmx; for i = 1:n1 for j = 1:n2 x1 = [(i-1)/(n1-1) (j-1)/(n2-1)]*Mt(:,1); x2 = [(i-1)/(n1-1) (j-1)/(n2-1)]*Mt(:,2); k1 = floor(n1*mod(x1,1))+1; k2 = floor(n2*mod(x2,1))+1; tmp(i,j) = Cdat(k1,k2); end end Cdat = tmp; figure(2); clf; surface(XX,YY,Z,Cdat,'EdgeColor','none') axis equal; view(8,45);