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.

b0=logical([1 1 1;1 0 1;1 1 1]);

for n=1:5 %don't exceed 6 because of expanding array inside loop

x=logical(zeros(3^n));

b0=[b0 b0 b0;b0 x b0;b0 b0 b0];

end

imagesc(b0),colormap(gray(2));

imwrite(bn,'sierpinski1.png','png','bitdepth',1);

Sierpinski Carpet
    • Haferman Carpet

MATLAB code to generate Haferman Carpet.The generator matrix were taken from MathWorld.

a0=logical([1 1 1;1 1 1;1 1 1]);

b0=logical([0 1 0;1 0 1;0 1 0]);

for n=1:5 %don't exceed 6 because of expanding array inside loop

an=[b0 b0 b0;b0 b0 b0;b0 b0 b0];

b0=[a0 b0 a0;b0 a0 b0;a0 b0 a0];

a0=an;

end

imagesc(b0),colormap(gray(2));

imwrite(b0,'haferman1.png','bitdepth',1);

Haferman Carpet
    • 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)));

https://lh3.googleusercontent.com/-jcztoXAGOts/S2jauoegXNI/AAAAAAAAB8s/owwM7hB8WLY/s1600/cesarofractal.png
    • 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)

https://lh3.googleusercontent.com/-tzHF9a_GG8Q/S2jauy0DMGI/AAAAAAAAB8g/bFzlHGzAHnM/s1600/dragoncurve.png
    • 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

https://lh5.googleusercontent.com/-DcpcwJkESCs/S2f-zEslupI/AAAAAAAAAtM/l7AVyI9f3HA/s1600/Pythagorastree2.PNG
    • Pythagoras Tree 3D MATLAB function

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