next up previous adam-math, MATmatcc, MMKOMP MMkomp2 Adam WILEY-VCH MATLAB-Filme Projekte und M-Files Stefan Adam privat Mail to stefan.r.a.adam@gmail.com MMkomp ed1 Adam
Nächste Seite: Oszillator mit Dämpfung Aufwärts: MMkomp2 Filmserie Vorherige Seite: Das L vollführt einen

Umstülpung eines Tetraeder-Rings

Im Jahr 1929 endtdeckte Paul Schatz, dass sich ein aus einem Würfel herausgeschnittener Tetraaeder-Ring umstülpen lässt. Sein Buch heisst denn auch - Die Welt ist umstülpbar -. Aus Symmetriegründen ist auch ein Tetraeder-Ring umstülpbar, welcher die aus dem Würfel herausgeschnittenen Tetraeder verdoppelt, wie in dieser Filmsequenz gezeigt wird.

%function tetringfilms
% tetringfilms.m  Simulation des Umstuelpens eines Rings
%   aus 6 verlaengerten Tetraedern
% Version mit patches von verschiedenen transparenten Farben
%  standalone Version fuer M-File Sammlung
r=7.5;
s = 1;
h = sqrt(3)/2;
d = 1.0;
f = 0.93;
%
oxa = gca;
figure(1); clf;
axtn = axes('outerposition',[0.34 0 0.66 1]);
axis([-10 10 -10 10])
set( axtn, 'DataAspectRatio', [1 1 1] )
axis(axtn ,'off')
%
hdtxa = text(-8,9,'Tetraeder-Ring', ...
    'FontUnits','points','FontSize',24, ...
   'Fontweight','demi');
hdtxb = text(-8,7.2,'umstuelpen', ...
    'FontUnits','points','FontSize',24 , ...
   'Fontweight','demi');
A =[-8 -8 -8]'; B =[-8  8 -8]';
C =[ 8  8 -8]'; D =[ 8 -8 -8]';
E =[-8 -8  8]'; F =[-8  8  8]';
G =[ 8  8  8]'; H =[ 8 -8  8]';
bxlin = [A B C D A E F B F G C G H D H E];
%  einbetten
newxa = axes('position',[0.35  0 0.65  0.8]);
hold on
set( gca, 'DataAspectRatio', [1 1 1] )
   view(-70, 36);
   axis off
%
p1 = [d 0 0 0]' + [0 h 0 0]' + [0 0 s/2 0]' + [0 0 0 1]';
p2 = [d 0 0 0]' + [0 h 0 0]' - [0 0 s/2 0]' + [0 0 0 1]';
p3 = [d-s/2 0 0 1]'; 
p4 = [d+s/2 0 0 1]';
zt = (p1 + p2 + p3 + p4)/4;
zt(4) = 1;
Zm = zt * ones(1,8);
To= [p1 p2 p3 p1 p4 p3 p4 p2]; 
sind1 = [1 2 3]; sind2 = [1 2 5];
sind3 = [1 3 5]; sind4 = [2 3 5];
%
px0 = [0 0 0]'; 
px1 = [s 0 0]';
px2 = [-s/2 s*sqrt(3)/2 0]';
px3 = [-s/2 -s*sqrt(3)/2 0]';
pxo = [ 0 0 1]';
pxu = [0 0 -1]';
%
Xa = r*1.2*[px0 px1 px0 px2 px0 px3 px0 pxo pxu];
hdtrax = plot3( Xa(1,1:7), Xa(2,1:7), Xa(3,1:7),'k');
%
To  = Zm + f*(To-Zm);
Tk = [p1 p2 p3 p1 p4 p3 p4 p2]; 
%
Mv = [1 0 0 -d ; 0 1 0 0; 0 0 1 0; 0 0 0 1] ;
Mi =  [1 0 0 0 ; 0 -1 0 0; 0 0 1 0; 0 0 0 1] ;
Rt =  [cos(120*pi/180) -sin(120*pi/180)  0 0 ; 
       sin(120*pi/180) cos(120*pi/180) 0 0; 0 0 1 0; 0 0 0 1] ;
%
w=(0:1:360)*pi/180;
al = atan(sqrt(3)*sin(w));
xca = h*(cos(al)/sqrt(3) + tan(al)/sqrt(3).*sin(al));
%
Plm = [r 0 0 0; 0 r 0 0 ; 0 0 r 0; 0 0 0 1];
%
for k = 1:length(w)
  Ra = [ 1 0 0 0; 0 cos(al(k)) -sin(al(k)) 0; 0 sin(al(k)) cos(al(k)) 0 ;
         0 0 0 1] ;
  Rw = [ cos(w(k)) 0 -sin(w(k))  0; 0 1 0 0; sin(w(k)) 0 cos(w(k)) 0; 
          0 0 0 1];
  xc = h* (  cos(w(k))/sqrt(3) + sin(w(k))*sin(al(k)) ) ;
  Mb = [1 0 0 xca(k) ; 0 1 0 0; 0 0 1 0; 0 0 0 1] ;

  Tt =Plm* Mb*Rw*Ra*Mv*To;
  Tf =Plm*  Mb*Rw*Ra*Mv*Tk;
  if k > 1
%  
    delete(plhd)
    delete(pah);   
%
  end
  daspect([1 1 1])
  axis([-8.5 8.5   -8.5 8.5   -8.5 8.5 ])

  plhd(1) = plot3(Tt(1,:), Tt(2,:), Tt(3,:),'r','LineWidth',2) ;  
  plhd(2) = plot3(Tf(1,1:2), Tf(2,1:2), Tf(3,1:2),'b','LineWidth',3.5);
  plhd(3) = plot3(Tf(1,6:7), Tf(2,6:7), Tf(3,6:7),'k','LineWidth',3.5);
%
  Tm = Mi*Tt;
  Tmk = Mi*Tf;
  plhd(4) = plot3(Tm(1,:), Tm(2,:), Tm(3,:),'r','LineWidth',2);
%
  T1 = Rt*Tt;
  Tm1 = Rt*Tm;
  T1k = Rt*Tf;
  Tm1k = Rt*Tmk;
  plhd(5) = plot3(T1(1,:), T1(2,:), T1(3,:),'r','LineWidth',2);
  plhd(6) = plot3(T1k(1,1:2), T1k(2,1:2), T1k(3,1:2),'b','LineWidth',3.5);
  plhd(7) = plot3(T1k(1,6:7), T1k(2,6:7), T1k(3,6:7),'k','LineWidth',3.5);
  plhd(8) = plot3(Tm1(1,:), Tm1(2,:), Tm1(3,:),'r','LineWidth',2);
%  
  T2 = Rt*Rt*Tt;
  Tm2 = Rt*Rt*Tm;
  T2k = Rt* Rt*Tf;
  Tm2k = Rt*Rt*Tmk;
  plhd(9) = plot3(T2(1,:), T2(2,:), T2(3,:),'r','LineWidth',2);
  plhd(10) = plot3(T2k(1,1:2), T2k(2,1:2), T2k(3,1:2),'b','LineWidth',3.5);
  plhd(11) = plot3(T2k(1,6:7), T2k(2,6:7), T2k(3,6:7),'k','LineWidth',3.5);
  plhd(12) = plot3(Tm2(1,:), Tm2(2,:), Tm2(3,:),'r','LineWidth',2);
%  
  wp = 0.6; co1 = [1 wp wp] ; co2 = [wp 1 wp];
  tra = 0.75; co3 = [1 1 wp] ; co4 = [wp wp 1];
 
  pah(1) = patch(Tt(1,sind1), Tt(2,sind1), Tt(3,sind1),co1,'FaceAlpha',tra);
  pah(2) = patch(Tt(1,sind2), Tt(2,sind2), Tt(3,sind2),co2,'FaceAlpha',tra);
  pah(3) = patch(Tt(1,sind3), Tt(2,sind3), Tt(3,sind3),co3,'FaceAlpha',tra);
  pah(4) = patch(Tt(1,sind4), Tt(2,sind4), Tt(3,sind4),co4,'FaceAlpha',tra);

  pah(5) = patch(Tm(1,sind1), Tm(2,sind1), Tm(3,sind1),co1,'FaceAlpha',tra);
  pah(6) = patch(Tm(1,sind2), Tm(2,sind2), Tm(3,sind2),co2,'FaceAlpha',tra);
  pah(7) = patch(Tm(1,sind3), Tm(2,sind3), Tm(3,sind3),co3,'FaceAlpha',tra);
  pah(8) = patch(Tm(1,sind4), Tm(2,sind4), Tm(3,sind4),co4,'FaceAlpha',tra);

  pah(9) = patch(T2(1,sind1), T2(2,sind1), T2(3,sind1),co1,'FaceAlpha',tra);
  pah(10) = patch(T2(1,sind2), T2(2,sind2), T2(3,sind2),co2,'FaceAlpha',tra);
  pah(11) = patch(T2(1,sind3), T2(2,sind3), T2(3,sind3),co3,'FaceAlpha',tra);
  pah(12) = patch(T2(1,sind4), T2(2,sind4), T2(3,sind4),co4,'FaceAlpha',tra);
  
  pah(13) = patch(T1(1,sind1), T1(2,sind1), T1(3,sind1),co1,'FaceAlpha',tra);
  pah(14) = patch(T1(1,sind2), T1(2,sind2), T1(3,sind2),co2,'FaceAlpha',tra);
  pah(15) = patch(T1(1,sind3), T1(2,sind3), T1(3,sind3),co3,'FaceAlpha',tra);
  pah(16) = patch(T1(1,sind4), T1(2,sind4), T1(3,sind4),co4,'FaceAlpha',tra);

  pah(17) = patch(Tm1(1,sind1), Tm1(2,sind1), Tm1(3,sind1),co1,'FaceAlpha',tra);
  pah(18) = patch(Tm1(1,sind2), Tm1(2,sind2), Tm1(3,sind2),co2,'FaceAlpha',tra);
  pah(19) = patch(Tm1(1,sind3), Tm1(2,sind3), Tm1(3,sind3),co3,'FaceAlpha',tra);
  pah(20) = patch(Tm1(1,sind4), Tm1(2,sind4), Tm1(3,sind4),co4,'FaceAlpha',tra);

  pah(21) = patch(Tm2(1,sind1), Tm2(2,sind1), Tm2(3,sind1),co1,'FaceAlpha',tra);
  pah(22) = patch(Tm2(1,sind2), Tm2(2,sind2), Tm2(3,sind2),co2,'FaceAlpha',tra);
  pah(23) = patch(Tm2(1,sind3), Tm2(2,sind3), Tm2(3,sind3),co3,'FaceAlpha',tra);
  pah(24) = patch(Tm2(1,sind4), Tm2(2,sind4), Tm2(3,sind4),co4,'FaceAlpha',tra);

  pause(0.1)
  if k < 4
    pause(0.08)
  end
  if ( k > 175 ) & (k < 187)
     pause(0.02)
  end
  if k > 356
  pause(0.08)
  end
end
  pause(0.8)



2018-09-15