Base Motif Fractal
Box Fractal
k=logical([1 0 1;0 1 0;1 0 1]);
for n=1:4
b=logical(zeros(3^n));
k=[k b k;b k b;k b k];
end
[mm,nn]=size(k);
[m,n]=find(k==1);
h=scatter(m,n,10,(m+n));
set(h,'marker','x')
axis equal off,
colormap hsv(256)
Sierpinski Carpet
MATLAB code to generate Sierpinski Carpet.The generator matrix were taken from MathWorld.
Haferman Carpet
MATLAB code to generate Haferman Carpet.The generator matrix were taken from MathWorld.
Cesaro Fractal
MATLAB code for Cesaro fractal. The number of iterations is limited because of expanding array inside loop. 5 iterations gives good output.
phi=[0 pi/2 pi/2 pi/2];
theta=[85*pi/180 -170*pi/180 85*pi/180];
%theta=[-85*pi/180 170*pi/180 -85*pi/180]; %for inside out
%theta=[-80*pi/180 160*pi/180 -80*pi/180]; %
%theta=[80*pi/180 -160*pi/180 80*pi/180]; %
iter=5; %don't exceed 6
angle_new=[];
for n=1:iter
angle_new=[angle_new theta(1) angle_new theta(2) angle_new theta(3) angle_new];
end
angle_new=[phi(1) angle_new ...
phi(2) angle_new ...
phi(3) angle_new ...
phi(4) angle_new ...
0];
len_angle=length(angle_new);
x_arr=zeros(len_angle,1);
y_arr=zeros(len_angle,1);
x=0;y=0;x1=0;y1=0;
angle_2=0;
for n=1:len_angle
[x1,y1]=pol2cart(angle_2,1);
angle_2=angle_new(n)+angle_2;
x=x+x1;
y=y+y1;
x_arr(n)=x;
y_arr(n)=y;
end
%plot(x_arr,y_arr,'linewidth',1);
axis off square
x_arr=[x_arr;nan];
y_arr=[y_arr;nan];
patch(x_arr,y_arr,sqrt(x_arr.^2+y_arr.^2),...
'edgecolor','flat','facecolor','none',...
'facevertexcdata',hsv(length(x_arr)));
Dragon Curve
MATLAB code to generate image given on right side.A much better code is available here.
%dragon curve
dvec=['1'];
rough=[];
len_dvec=1;
iters=10; %dont exceed 12
%loop to make sequence
% 110
% 1101100
%110110011100100
for loop_count=1:iters
len_dvec=length(dvec);
rough=dvec;
rough(len_dvec*0.5+0.5)='0';
dvec=[dvec '1' rough];
end
x=0;y=0;
len_dvec=length(dvec);
theta=pi/2;
x1=0;y1=0;x2=0;y2=0;
x_arr=zeros(len_dvec*2,1);
y_arr=zeros(len_dvec*2,1);
for k=1:len_dvec
if dvec(k)=='1'
[x1,y1]=pol2cart(theta,0.75);
x=x+x1;y=y+y1;
x_arr(2*k-1)=x;
y_arr(2*k-1)=y;
theta=theta+pi/4;
[x2,y2]=pol2cart(theta,sqrt(2)*0.25);
x=x+x2;y=y+y2;
x_arr(2*k)=x;
y_arr(2*k)=y;
theta=theta+pi/4;
else
[x1,y1]=pol2cart(theta,0.75);
x=x+x1;y=y+y1;
x_arr(2*k-1)=x;
y_arr(2*k-1)=y;
theta=theta-pi/4;
[x2,y2]=pol2cart(theta,sqrt(2)*0.25);
x=x+x2;y=y+y2;
x_arr(2*k)=x;
y_arr(2*k)=y;
theta=theta-pi/4;
end
end
x_arr=[x_arr ; nan];
y_arr=[y_arr ; nan];
patch(x_arr,y_arr,sqrt(x_arr.^2+y_arr.^2),...
'edgecolor','interp','facecolor','none');
axis equal off,colormap hsv(64)
Pythagoras Tree
MATLAB code given is only generates the 45 degree Pythagoras tree. The code is not generalized for any angle.
Pythagoras Tree 2D MATLAB function
function pytree
x=[-1 1 1 -1];
y=[-1 -1 1 1];
level=8; %level of recursion
tree(x,y,0,level);
axis equal
return
function tree(x,y,theta,n)
if n>0
[xx,yy]=trans2d(x,y,0,0,pi/4);
tree(xx*0.707-1,yy*0.707+2,theta+pi/4,n-1);
[xx,yy]=trans2d(x,y,0,0,-pi/4);
tree(xx*0.707+1,yy*0.707+2,theta+pi/4,n-1);
phi=mod(atan2(y(1),x(1))+pi,pi)/pi;
colors=hsv2rgb([phi 1 1]);
patch(x,y,'y','facecolor',colors);
end
return
function [xx,yy]=trans2d(x,y,tx,ty,phi)
[theta,rad]=cart2pol(x,y);
xx=rad.*cos(theta+phi)+tx;
yy=rad.*sin(theta+phi)+ty;
return
function pytree3d
x=[-1 1 1 -1];
y=[-1 -1 1 1];
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 4 3 2
1 2 6 5
5 8 4 1
2 3 7 6
3 4 8 7
6 7 8 5];
level=8; %level of recursion
tree(x,y,face,0,level);
axis equal tight
view(3)
return
function tree(x,y,face,theta,n)
if n>0
[xx,yy]=trans2d(x,y,0,0,pi/4);
tree(xx*0.707-1,yy*0.707+2,face,theta+pi/4,n-1);
[xx,yy]=trans2d(x,y,0,0,-pi/4);
tree(xx*0.707+1,yy*0.707+2,face,theta+pi/4,n-1);
phi=mod(atan2(y(1),x(1))+pi,pi)/pi;
colors=hsv2rgb([phi 1 1]);
len=sqrt((x(2)-x(1))^2+(y(2)-y(1))^2);
vert=[x' zeros(4,1)-len/2 y';x' len*ones(4,1)-len/2 y'];
patch('faces',face,'vertices',vert,'facecolor',colors);
end
return
function [xx,yy]=trans2d(x,y,tx,ty,phi)
[theta,rad]=cart2pol(x,y);
xx=rad.*cos(theta+phi)+tx;
yy=rad.*sin(theta+phi)+ty;
return