The Mandelbrot Explorer

This is a humble program by me, which gives a chance to explorer Mandelbrot set with many riots of colors. If you have a Matlab, then just copy/paste the code at the most bottom of the post, and maybe make some changes ;) . If you don’t have Matlab, then there is another trick that allow you to run the program as Stand Alone;

  1. First, download TheThing in here, (~ 195 Mb)
  2. then, open rar file and setup the “MCRInstaller *” one,
  3. finally after the instalation, then run the mandelbrot.exe file which come with the same rar file of MCRInstaller.

After running the mandelbrot.exe file, a DOS window open firstly, and the instructions of exe program will be shown. Then a second window open, and our Mandelbrot Explorer game will be ready. Reading the instructions in DOS windows and from interface of second window, you can freely explore these infinite fractals of a basic math formulas. Also according to performance of your personal computer, program can run either faster or slower. If you want to close to program, just simply close one of these windows…

There is also some online mandelbrot set generators, you may easily find and try them also. But Matlab’s graphical presentation relatively much better, I think. Have fun ! ^_^

*  MCRInstaller is a official Matlab application that allows you to run complied “m files” even you don’t have a whole Matlab environment. Compiled Matlab files only run with certain version of mcr. So because this mandelbrot file code is compiled for v.7.15, you must setup the MCR 7.15, whose link is given above.

mandel

Mandelbrot fraktallar setini kolayca ve göze hoş bir şekilde keşfetmeyi sağlayacak bir program yazdım. Matlab’ı olanlar direk en aşağıdaki kodu copy/paste edip “run” edebilir; hatta arzu edenler kodla da oynayabilir. Matlabı olmayanlar ise üzülmesin; Programı matlabsız çalıştırmayı sağlayacak bir yol var;

  1. Önce şu linkten rar dosyasını indirin, (195 Mb)
  2. rar’ı açın ve “MCRInstaller *” i kurun, (sanırım windows 7 ve üstü işletim istemi gerekecektir… linuxda avcunuzu yalayın :P)
  3. Sonunda kurulum bittikten sonra mandelbrot.exe dosyasını da rardan çıkarıp “run” edin, (yani 2 kere klikleyin)

mandelbrot.exe programı çalıştıktan sonra, önce program yönergesinin yazıldığı bir DOS penceresi açılır. Daha sonra 2. bir pencere daha açılarak Mandelbrot keşif oyunumuza hazır olmuş olur. İngilizce yönergelerden ve 2. pencerenin arayüzünden faraktallar içinde dalabildiğiniz kadar dalıp ilginç bir keşfe çıkabilirsiniz. Elbette kişisel bilgisayarınızın gücüne göre, program hızlı yada yavaş çalışacaktır… Ayrıca pencerelerden herhangi biri kapatılırsa, tüm program kapatılmış olur. Son olarak yönergelerin Türkçesi aşağıdaki gibidir;

  • 2. pencere açıldıktan sonra, Fareyle, zoomlamak istediğiniz bölgesi bir kutu içerisine alın ve sonra soldaki “FOCUS” düğmesine basarak, bölgeyi netleştirin…. ve bunu defalarca yapark fraktallarda dalabildiğiniz kadar dalın…
  • “Beginning” basarak başlangıçtaki ana bölgeye ulaşabilirsiniz…
  • Sırayla U, L, R ve D’ye basarak, odak bölgesini yukarı, sol, sağ ve aşağıya kaydırabilirsiniz.
  • “Z.Out” e basarak, bulunduğunuz bölgeden zoom out, yani uzaklaşabilirsiniz…
  • son olarak POP-UP menüsünden, farktalların renk temasını seçeneklerden seçbilirsiniz. Sırasıyla Jet (renk spektrali), Colorcube (renk küpü), hot (sıcak), cool (serin), Spring (ilkbahar), Autumn (sonbahar), Summer (Yaz) ve Winter (Kış) !

Aslında internette online bir şekilde bu mandelbrot set oyunları halihazırda var. Ama bunlar hem çok küçük penceredeler, hemde grafiksel sunuşları matlab’a nazaran daha fakir. O nedenle yukardaki yolu denemenizi tavsiye eder, İyi eğlenceler dilerim ! ^_^

*  MCRInstaller Matlab’ın m dosyalarını “Stand Alone” çalışmasını sağlamak için yapılmış, kompak bir Matlab kütüphane kurulumudur. Bu programı kurarsanız, tüm Matlab programını kurmaya gerek kalmadan, “compile” edilmiş m dosyalarını kolayca çalıştırabilirsiniz. Compile edilmiş m dosyaları sadece kendi versiyonlarında çalışır, o nedenle linkte verdiğim 7.15 versiyonunu kurduğunuza emin olun !!!!

****

function mandelbrot 
% Source code; http://www.mathworks.com/help/distcomp/examples/illustrating-three-approaches-to-gpu-computing-the-mandelbrot-set.html
% Recomposed and interfaced by ASLI UTKU
% 
% Instructions;
% Choose a box (or just plain click) with "cursor Zoom in" and press "FOCUS".
% Press "Beginning" for return back.
% Press U, L, R and D for shifting up, left, right and down, respectively.
% Press "Z.Out" for zooming out from current location !
% Chose one of the colormaps from POP-UP menu !

format long
xlim = [-2.1, 0.6]; ylim = [-1.2, 1.2];
f = figure;
set(f, 'Position', [500, 100, 1000, 600]);
 
 uicontrol('Style', 'popup','String',...
'jet|colorcube|hot|cool|spring|autumn|summer|winter',...
 'Position', [50 300 100 50],...
 'Callback', @setmap); % Popup function handle callback
 % Implemented as a subfunction 
 uicontrol('Style', 'pushbutton', 'String', 'FOCUS',...
 'Position', [50 480 100 20],...
 'Callback', @focus); % Pushbutton string callback
 % that calls a MATLAB function 
 uicontrol('Style', 'pushbutton', 'String', 'Z.Out',...
 'Position', [80 420 40 20],...
 'Callback', @zoomout); % Pushbutton string callback
 % that calls a MATLAB function 
 uicontrol('Style', 'pushbutton', 'String', 'Beginning',...
 'Position', [50 360 100 20],...
 'Callback', @begino); % Pushbutton string callback
 % that calls a MATLAB function 
 uicontrol('Style', 'pushbutton', 'String', 'U',...
 'Position', [90 450 20 20],...
 'Callback', @upgit); % Pushbutton string callback
 % that calls a MATLAB function 
 uicontrol('Style', 'pushbutton', 'String', 'L',...
 'Position', [50 420 20 20],...
 'Callback', @leftgit); % Pushbutton string callback
 % that calls a MATLAB function 
 uicontrol('Style', 'pushbutton', 'String', 'R',...
 'Position', [130 420 20 20],...
 'Callback', @rightgit); % Pushbutton string callback
 % that calls a MATLAB function 
 uicontrol('Style', 'pushbutton', 'String', 'D',...
 'Position', [90 390 20 20],...
 'Callback', @downgit); % Pushbutton string callback
 % that calls a MATLAB function 
 
zoom on
mand(xlim, ylim)

end


function mand(xlim, ylim)

fff=xlim(2)-xlim(1); fa=50;

if fff>1
maxIterations = 100-fa;
elseif fff<1 && fff>1e-1
maxIterations = 150-fa;
elseif fff<1e-1 && fff>1e-2
maxIterations = 200-fa;
elseif fff<1e-2 && fff>1e-3
maxIterations = 250-fa;
elseif fff<1e-3 && fff>1e-4
maxIterations = 300-fa;
elseif fff<1e-4 && fff>1e-5
maxIterations = 350-fa;
elseif fff<1e-5 && fff>1e-6
maxIterations = 400-fa;
elseif fff<1e-6 && fff>1e-7
maxIterations = 450-fa;
elseif fff<1e-7 && fff>1e-8
maxIterations = 500-fa;
elseif fff<1e-8
maxIterations = 550-fa;
end

gridSize = 1000;

% Setup
t = tic();
x = linspace( xlim(1), xlim(2), gridSize );
y = linspace( ylim(1), ylim(2), gridSize );
[xGrid,yGrid] = meshgrid( x, y );
z0 = xGrid + 1i*yGrid;
count = ones( size(z0) );

% Calculate
z = z0;
for n = 0:maxIterations
 z = z.*z + z0;
 inside = abs( z )<=2;
 count = count + inside;
end
count = log( count );

% Show
cpuTime = toc( t );
imagesc( x, y, count );
axis image

title( sprintf( '%1.2fsecs CPU Time (as far as you close, it takes longer) ', cpuTime ) );

end

function focus(hObj,event) %#ok<INUSD>
 xlim = get(gca,'XLim');
 ylim = get(gca,'YLim');
 zoom on
 mand(xlim, ylim) 
end

function zoomout(hObj,event) %#ok<INUSD>
 xx = get(gca,'XLim'); fx=xx(2)-xx(1);
 yy = get(gca,'YLim'); fy=yy(2)-yy(1);
 xlim=[xx(1)-fx/2 xx(2)+fx/2];
 ylim=[yy(1)-fy/2 yy(2)+fy/2];
 zoom on
 mand(xlim, ylim) 
end

function begino(hObj,event) %#ok<INUSD>
 xlim = [-2.1, 0.6];
 ylim = [-1.2, 1.2];
 zoom on
 mand(xlim, ylim) 
end

function upgit(hObj,event) %#ok<INUSD>
 xx = get(gca,'XLim'); %fx=xx(2)-xx(1);
 yy = get(gca,'YLim'); fy=yy(2)-yy(1);
 xlim=[xx(1) xx(2)];
 ylim=[yy(1)-fy/2 yy(2)-fy/2];
 zoom on
 mand(xlim, ylim) 
end

function leftgit(hObj,event) %#ok<INUSD>
 xx = get(gca,'XLim'); fx=xx(2)-xx(1);
 yy = get(gca,'YLim'); %fy=yy(2)-yy(1);
 xlim=[xx(1)-fx/2 xx(2)-fx/2];
 ylim=[yy(1) yy(2)];
 zoom on
 mand(xlim, ylim) 
end

function rightgit(hObj,event) %#ok<INUSD>
 xx = get(gca,'XLim'); fx=xx(2)-xx(1);
 yy = get(gca,'YLim'); %fy=yy(2)-yy(1);
 xlim=[xx(1)+fx/2 xx(2)+fx/2];
 ylim=[yy(1) yy(2)];
 zoom on
 mand(xlim, ylim) 
end

function downgit(hObj,event) %#ok<INUSD>
 xx = get(gca,'XLim'); %fx=xx(2)-xx(1);
 yy = get(gca,'YLim'); fy=yy(2)-yy(1);
 xlim=[xx(1) xx(2)];
 ylim=[yy(1)+fy/2 yy(2)+fy/2];
 zoom on
 mand(xlim, ylim) 
end

function setmap(hObj,event) %#ok<INUSD>
 % Called when user activates popup menu 
 
 val = get(hObj,'Value');
 if val ==1
 colormap(jet) 
 size (jet)
 elseif val == 2
 colormap(colorcube)
 elseif val == 3
 colormap(hot) 
 elseif val == 4
 x=cool; 
 y=flipud(cool); 
 colormap([x(1:2:end,:);y(1:2:end-2,:);1 1 1])
 elseif val == 5
 x=(cool); 
 y=(spring); 
 colormap([x(1:2:end,:);y(1:2:end,:)])
 elseif val == 6
 x=summer; 
 y=flipud(autumn); 
 colormap([x(1:2:end,:);y(1:2:end-2,:);0 0 0])
 elseif val == 7
 x=flipud(summer); 
 y=autumn; 
 colormap([y(1:2:end,:);x(1:2:end,:)])
 elseif val == 8
 x=flipud(bone); 
 y=(gray); 
 colormap([x(1:2:end,:);y(1:2:end,:)])
 end
end

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s