Polyhedron Fractal
Tetrahedron Fractal (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)
end
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
end
Octahedron Fractal
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)
end
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
end
Menger Sponge
MATLAB code
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)
end
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
end