Polyhedron‎ > ‎

Polyhedron Fractal





  • Fractal Tetrahedron (Sierpinski Pyramid)

MATLAB code

function tetrahedronFractal

vert=[+1 +1 +1
      -1 -1 +1
      -1 +1 -1
      +1 -1 -1];
face=[1 2 3
      2 3 4
      1 3 4
      1 2 4];
 
sca=1/2;%scale factor
level=5;%level of recursion
drawFractal(vert,face,sca,level)
axis equal
view(3)  

function drawFractal(vert,face,sca,n)

if n>0
   vnew=vert;
   for k=1:length(vert)
       vnew(:,1)=vert(:,1)+vert(k,1);
       vnew(:,2)=vert(:,2)+vert(k,2);
       vnew(:,3)=vert(:,3)+vert(k,3);
       if n==1
          patch('vertices',vnew,'faces',face,'facecolor','r');
       end
       drawFractal(vnew*sca,face,sca,n-1);
   end
  
end

return
 


                      

           
 


                  
  • Fractal Octahedron

MATLAB code

function octahedronFractal

vert=[1 0 0
     -1 0 0
      0 1 0
      0 -1 0
      0 0 1
      0 0 -1];
face=[3 5 2
       5 3 1
       6 3 2
       3 6 1
       4 5 1
       5 4 2
       4 6 2
       6 4 1];
  
sca=1/2;%scale factor
level=3;%level of recursion

drawFractal(vert,face,sca,level)
axis equal
view(3)  

function drawFractal(vert,face,sca,n)

if n>0
   vnew=vert;
   for k=1:length(vert)
       vnew(:,1)=vert(:,1)+vert(k,1);
       vnew(:,2)=vert(:,2)+vert(k,2);
       vnew(:,3)=vert(:,3)+vert(k,3);
       if n==1
          patch('vertices',vnew,'faces',face,'facecolor',rand(1,3));
       end
       drawFractal(vnew*sca,face,sca,n-1);
   end
end
 
return
 



            
octahedron fractal

  • Menger Sponge


function mengerSponge

vert=[1 1 1
      1 1 -1
      1 -1 1
      1 -1 -1
     -1 1 1
     -1 1 -1
     -1 -1 1
     -1 -1 -1];
 
 face=[1 2 4 3
       1 5 6 2
       5 6 8 7
       7 8 4 3
       1 3 7 5
       2 4 8 6];
  
%offset points  
offPoints=[1 1 1;1 1 -1;1 -1 1;1 -1 -1
          -1 1 1;-1 1 -1;-1 -1 1;-1 -1 -1
           0 1 1;0 1 -1;0 -1 1;0 -1 -1
           1 0 1;1 0 -1;-1 0 1;-1 0 -1
           1 1 0;1 -1 0;-1 1 0;-1 -1 0];

sca=1/3;%scale factor
level=2;%level of recursion      
drawFractal(vert,face,offPoints,sca,level)
axis equal
view(3)  
  
function drawFractal(vert,face,offPoints,sca,n)

if n>0
   off2=sca*offPoints*2;
   v = sca*vert;
   vnew=v;
   for k=1:length(offPoints)
       vnew(:,1)=v(:,1)+off2(k,1);
       vnew(:,2)=v(:,2)+off2(k,2);
       vnew(:,3)=v(:,3)+off2(k,3);
       if n==1
          patch('vertices',vnew,'faces',face,'facecolor','r');
       end
       drawFractal(vnew,face,offPoints,sca,n-1);
   end
  
end
return