2011-07-10 11:06:37 +00:00
<?xml version="1.0" encoding="utf-8"?>
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" lang = "fr" xml:lang = "fr" >
< head >
< meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" / >
< link rel = "shortcut icon" type = "image/x-icon" href = "/Scratch/img/favicon.ico" / >
< link rel = "stylesheet" type = "text/css" href = "/Scratch/assets/css/main.css" / >
< link rel = "stylesheet" type = "text/css" href = "/Scratch/css/twilight.css" / >
< link rel = "stylesheet" type = "text/css" href = "/Scratch/css/idc.css" / >
< link rel = "alternate" type = "application/rss+xml" title = "RSS" href = "http://feeds.feedburner.com/yannespositocomfr" / >
< link rel = "alternate" lang = "fr" xml:lang = "fr" title = "Mandelbrot avec haskell" type = "text/html" hreflang = "fr" href = "/Scratch/fr/blog/Haskell-Mandelbrot/" / >
< link rel = "alternate" lang = "en" xml:lang = "en" title = "ASCII Haskell Mandelbrot" type = "text/html" hreflang = "en" href = "/Scratch/en/blog/Haskell-Mandelbrot/" / >
< script type = "text/javascript" src = "/Scratch/js/jquery-1.3.1.min.js" > < / script >
< script type = "text/javascript" src = "/Scratch/js/jquery.cookie.js" > < / script >
< script type = "text/javascript" src = "/Scratch/js/index.js" > < / script >
<!-- [if lt IE 9]>
< script src = "http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE9.js" > < / script >
<![endif]-->
<!-- < % if containMaths %>
< script type = "text/javascript" src = "/Scratch/js/MathJax/MathJax.js" > < / script >
< % end %>
-->
< title > Mandelbrot avec haskell< / title >
< / head >
< body lang = "fr" >
< script type = "text/javascript" > / / < ! [ C D A T A [
document.write('< div id = "blackpage" > < img src = "/Scratch/img/loading.gif" alt = "Chargement en cours..." / > < / div > ');
// ]]>
< / script >
< div id = "content" >
< div id = "choix" >
< div class = "return" > < a href = "#entete" > ↓ Menu ↓ < / a > < / div >
< div id = "choixlang" >
< a href = "/Scratch/en/blog/Haskell-Mandelbrot/" onclick = "setLanguage('en')" > in English< / a >
< / div >
< / div >
< div id = "titre" >
< h1 >
Mandelbrot avec haskell
< / h1 >
< / div >
< div class = "flush" > < / div >
< div class = "flush" > < / div >
< div id = "afterheader" >
< div class = "corps" >
< p > Voici le code “ obfusqué” :< / p >
< div class = "code" > < div class = "file" > < a href = "/Scratch/fr/blog/Haskell-Mandelbrot/code/animandel.hs" > ➥ animandel.hs < / a > < / div > < div class = "withfile" >
< pre class = "twilight" >
a=27< span class = "Keyword" > ;< / span > b=79< span class = "Keyword" > ;< / span > c=C(-2.0,-1.0)< span class = "Keyword" > ;< / span > d=C(1.0,1.0)< span class = "Keyword" > ;< / span > e=C(-2.501,-1.003)
newtype C = C (Double,Double) deriving (Show,Eq)
instance Num C where C(x,y)*C(z,t)=C(z*x-y*t,y*z+x*t)< span class = "Keyword" > ;< / span > C(x,y)+C(z,t)=C(x+z,y+t)< span class = "Keyword" > ;< / span > abs(C(x,y))=C(sqrt(x*x+y*y),0.0)
r(C(x,y))=x< span class = "Keyword" > ;< / span > i(C(x,y))=y
f c z 0=0< span class = "Keyword" > ;< / span > f c z n=< span class = "Keyword" > if< / span > (r(abs(z))< span class = "Keyword" > > < / span > 2)< span class = "Keyword" > then< / span > n < span class = "Keyword" > else< / span > f c ((z*z)+c) (n-1)
h j k = map (< span class = "Constant" > \z< / span > -< span class = "String" > < span class = "String" > > (< / span > f (C z< span class = "String" > )< / span > < / span > (C(0,0)) 32,(fst z< span class = "Keyword" > > < / span > l - q/2))) [(x,y)< span class = "Keyword" > |< / span > y< span class = "Keyword" > < < / span > -[p,(p+((o-p)/a))..o],x< span class = "Keyword" > < < / span > -[m,(m + q)..l]] where o=i k< span class = "Keyword" > ;< / span > p=i j< span class = "Keyword" > ;< / span > m=r j< span class = "Keyword" > ;< / span > l=r k< span class = "Keyword" > ;< / span > q=(l-m)/b
u j k = concat $ map v $ h j k where v (i,p)=(< span class = "String" > < span class = "String" > " < / span > .,< span class = "String" > < span class = "String" > `< / span > '°\" :;-+oO0123456789=!%*§& $@#" !!i):rst p;rst True=" \n" ;rst False=" " < / span > < / span >
< span class = "String" > < span class = "String" > main = putStrLn $ im 0 where cl n (C (x,y))=let cs=(1.1**n-1) in C ((x+cs*(r e))/cs+1,(y+cs*(i e))/cs+1);bl n=cl n c;tr n=cl n d;im n=u (bl n) (tr n)++" \x1b[H\x1b[25A" ++im (n+1)< / span > < / span >
< / pre >
< / div > < / div >
< p > Pour le lancer, < a href = "http://haskell.org" > haskell< / a > doit être installé. Puis vous devez écrire dans un terminal :< / p >
< pre class = "twilight" > ghc --make animandel.hs < span class = "Keyword" > & & < / span > animandel
< / pre >
< p > Voici le résultat après 50 itérations.< / p >
< pre class = "twilight" >
2011-07-12 14:52:43 +00:00
< span class = "Comment" > < span class = "Comment" > #< / span > ##@@@@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$& & & & & WWOOClbUOWW& & $$$$$$$$$$$$$$< / span >
< span class = "Comment" > < span class = "Comment" > #< / span > #@@@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$& & & & & WWUCUb; ,jUOWW& & & $$$$$$$$$$$$< / span >
< span class = "Comment" > < span class = "Comment" > #< / span > @@@@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$& & & WWWWWUb ooCWW& & & & & & $$$$$$$$< / span >
@@@@< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $< span class = "Keyword" > & & < / span > WWWWWWWWOU uUOWWWW< span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $
@@@< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & < / span > WOUObUOOOUUUCbi rbCUUUOWWWWWOUW< span class = "Keyword" > & < / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $
@< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $< span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > WWWUcr,iiCb o wUUUUUC< span class = "Keyword" > ;< / span > OW< span class = "Keyword" > & < / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span >
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > WWWWOUC, j llW< span class = "Keyword" > & & < / span > $
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $< span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > WWWWWWOCCbi bWWW< span class = "Keyword" > & & < / span >
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $< span class = "Keyword" > & & < / span > WWWWWWW< span class = "Keyword" > & & < / span > < span class = "Keyword" > & < / span > WWWWWWWWOUo jUOWW< span class = "Keyword" > & & < / span >
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & < / span > WWOwOOWWWOUUOWWWWWOOUbw j.blW< span class = "Keyword" > & < / span >
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $< span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & < / span > WWWObiijbUCl bCiUUUUUCj, bOW< span class = "Keyword" > & < / span >
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $< span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & < / span > WWWOUbw < span class = "Keyword" > ;< / span > oobCbl jUWW< span class = "Keyword" > & < / span >
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $< span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & < / span > WWWWOcbi ij jUW< span class = "Keyword" > & & < / span >
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $< span class = "Keyword" > & & < / span > WWWWWWWOwUUCbw WW< span class = "Keyword" > & & < / span >
WWWOWWWWWWWWWUUbo UWWW< span class = "Keyword" > & & < / span >
: wbUOWW< span class = "Keyword" > & & < / span > < span class = "Keyword" > & < / span >
WWWOWWWWWWWWWUUbo UWWW< span class = "Keyword" > & & < / span >
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $< span class = "Keyword" > & & < / span > WWWWWWWOwUUCbw WW< span class = "Keyword" > & & < / span >
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $< span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & < / span > WWWWOcbi ij jUW< span class = "Keyword" > & & < / span >
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $< span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & < / span > WWWOUbw < span class = "Keyword" > ;< / span > oobCbl jUWW< span class = "Keyword" > & < / span >
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $< span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & < / span > WWWObiijbUCl bCiUUUUUCj, bOW< span class = "Keyword" > & < / span >
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & < / span > WWOwOOWWWOUUOWWWWWOOUbw j.blW< span class = "Keyword" > & < / span >
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $< span class = "Keyword" > & & < / span > WWWWWWW< span class = "Keyword" > & & < / span > < span class = "Keyword" > & < / span > WWWWWWWWOUo jUOWW< span class = "Keyword" > & & < / span >
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $< span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > WWWWWWOCCbi bWWW< span class = "Keyword" > & & < / span >
< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > WWWWOUC, j llW< span class = "Keyword" > & & < / span > $
@< span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span > $< span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > < span class = "Keyword" > & & < / span > WWWUcr,iiCb o wUUUUUC< span class = "Keyword" > ;< / span > OW< span class = "Keyword" > & < / span > < span class = "Variable" > < span class = "Variable" > $< / span > $< / span >
2011-07-10 11:06:37 +00:00
< / pre >
< p > Here is the more readable version. I believe with this far more readable version, no more explanation is needed.< / p >
< pre class = "twilight" >
2011-07-12 14:52:43 +00:00
nbvert = 30
2011-07-10 11:06:37 +00:00
nbhor = 79
2011-07-12 14:52:43 +00:00
zoomfactor = 1.01
init_bottom_left = C (-2.0,-2.0)
init_top_right = C (3.0,2.0)
interrest = C (-1.713,-0.000)
2011-07-10 11:06:37 +00:00
newtype Complex = C (Float,Float) deriving (Show,Eq)
instance Num Complex where
fromInteger n = C (fromIntegral n,0.0)
C (x,y) * C (z,t) = C (z*x - y*t, y*z + x*t)
C (x,y) + C (z,t) = C (x+z, y+t)
abs (C (x,y)) = C (sqrt (x*x + y*y),0.0)
signum (C (x,y)) = C (signum x , 0.0)
real :: Complex -< span class = "Keyword" > > < / span > Float
real (C (x,y)) = x
im :: Complex -< span class = "Keyword" > > < / span > Float
im (C (x,y)) = y
cabs :: Complex -< span class = "Keyword" > > < / span > Float
cabs = real.abs
2011-07-12 14:52:43 +00:00
f :: Complex -< span class = "Keyword" > > < / span > Complex -< span class = "Keyword" > > < / span > Int -< span class = "Keyword" > > < / span > Int
f c z 0 = 0
f c z n = < span class = "Keyword" > if< / span > (cabs z < span class = "Keyword" > > < / span > 2) < span class = "Keyword" > then< / span > n < span class = "Keyword" > else< / span > f c ((z*z)+c) (n-1)
2011-07-10 11:06:37 +00:00
2011-07-12 14:52:43 +00:00
bmandel bottomleft topright = map (< span class = "Constant" > \z< / span > -< span class = "Keyword" > > < / span > (f (C z) (C(0,0)) 32, (fst z < span class = "Keyword" > > < / span > right - hstep/2 ))) [(x,y) < span class = "Keyword" > |< / span > y < span class = "Keyword" > < < / span > - [bottom,(bottom + vstep)..top], x< span class = "Keyword" > < < / span > -[left,(left + hstep)..right]]
2011-07-10 11:06:37 +00:00
where
top = im topright
bottom = im bottomleft
left = real bottomleft
right = real topright
vstep=(top-bottom)/nbvert
hstep=(right-left)/nbhor
2011-07-12 14:52:43 +00:00
mandel :: (Complex,Complex) -< span class = "Keyword" > > < / span > String
mandel (bottomleft,topright) = concat $ map treat $ bmandel bottomleft topright
2011-07-10 11:06:37 +00:00
where
2011-07-12 14:52:43 +00:00
treat (i,jump) = < span class = "String" > < span class = "String" > " < / span > .,:;rcuowijlbCUOW& < span class = "StringVariable" > < span class = "StringVariable" > $< / span > @< / span > #< span class = "String" > " < / span > < / span > < span class = "Keyword" > !< / span > < span class = "Keyword" > !< / span > (div (i*22) 32):rst jump
2011-07-10 11:06:37 +00:00
rst True = < span class = "String" > < span class = "String" > " < / span > \n< span class = "String" > " < / span > < / span >
rst False = < span class = "String" > < span class = "String" > " < / span > < span class = "String" > " < / span > < / span >
2011-07-12 14:52:43 +00:00
cdiv :: Complex -< span class = "Keyword" > > < / span > Float -< span class = "Keyword" > > < / span > Complex
cdiv (C(x,y)) r = C(x/r, y/r)
cmul :: Complex -< span class = "Keyword" > > < / span > Float -< span class = "Keyword" > > < / span > Complex
cmul (C(x,y)) r = C(x*r, y*r)
zoom :: Complex -< span class = "Keyword" > > < / span > Complex -< span class = "Keyword" > > < / span > Complex -< span class = "Keyword" > > < / span > Float -< span class = "Keyword" > > < / span > (Complex,Complex)
zoom bl tr center magn = (f bl, f tr)
where
f point = ((center < span class = "String" > < span class = "String" > `< / span > cmul< span class = "String" > `< / span > < / span > magn) + point ) < span class = "String" > < span class = "String" > `< / span > cdiv< span class = "String" > `< / span > < / span > (magn + 1)
2011-07-10 11:06:37 +00:00
main = < span class = "Keyword" > do< / span >
x < span class = "Keyword" > < < / span > - getContents
putStrLn $ infinitemandel 0
where
2011-07-12 14:52:43 +00:00
window n = zoom init_bottom_left init_top_right interrest (zoomfactor**n)
infinitemandel n = mandel (window n) ++ < span class = "String" > < span class = "String" > " < / span > \x1b[H\x1b[25A< span class = "String" > " < / span > < / span > ++ infinitemandel (n+1)
2011-07-10 11:06:37 +00:00
< / pre >
< / div >
< div id = "choixrss" >
< a id = "rss" href = "http://feeds.feedburner.com/yannespositocomfr" >
s'abonner
< / a >
< / div >
< script type = "text/javascript" >
$(document).ready(function(){
$('#comment').hide();
$('#clickcomment').click(showComments);
});
function showComments() {
$('#comment').show();
$('#clickcomment').fadeOut();
}
document.write('< div id = "clickcomment" > Commentaires< / div > ');
< / script >
< div class = "flush" > < / div >
< div class = "corps" id = "comment" >
< h2 class = "first" > commentaires< / h2 >
< noscript >
Vous devez activer javascript pour commenter.
< / noscript >
< script type = "text/javascript" >
var idcomments_acct = 'a307f0044511ff1b5cfca573fc0a52e7';
var idcomments_post_id = '/Scratch/fr/blog/Haskell-Mandelbrot/';
var idcomments_post_url = 'http://yannesposito.com/Scratch/fr/blog/Haskell-Mandelbrot/';
< / script >
< span id = "IDCommentsPostTitle" style = "display:none" > < / span >
< script type = 'text/javascript' src = '/Scratch/js/genericCommentWrapperV2.js' > < / script >
< / div >
< div id = "entete" class = "corps_spaced" >
< div id = "liens" >
< ul > < li > < a href = "/Scratch/fr/" > Bienvenue< / a > < / li >
< li > < a href = "/Scratch/fr/blog/" > Blog< / a > < / li >
< li > < a href = "/Scratch/fr/softwares/" > Softwares< / a > < / li >
< li > < a href = "/Scratch/fr/about/" > À propos< / a > < / li > < / ul >
< / div >
< div class = "flush" > < / div >
< hr / >
< div id = "next_before_articles" >
< div id = "previous_articles" >
articles précédents
< div class = "previous_article" >
< a href = "/Scratch/fr/blog/Password-Management/" > < span class = "nicer" > «< / span > Password Management< / a >
< / div >
< div class = "previous_article" >
< a href = "/Scratch/fr/blog/2011-04-20-Now-hosted-on-github/" > < span class = "nicer" > «< / span > Hébergement github< / a >
< / div >
< div class = "previous_article" >
< a href = "/Scratch/fr/blog/2011-01-03-Why-I-sadly-won-t-use-coffeescript/" > < span class = "nicer" > «< / span > Pourquoi je n'utiliserai pas CoffeeScript (malheureusement)< / a >
< / div >
< / div >
< div id = "next_articles" >
articles suivants
< / div >
< div class = "flush" > < / div >
< / div >
< / div >
< div id = "bottom" >
< div >
< a rel = "license" href = "http://creativecommons.org/licenses/by-sa/3.0/deed.fr" > Droits de reproduction ©, Yann Esposito< / a >
< / div >
< div id = "lastmod" >
Écrit le : 10/07/2011
2011-07-12 14:56:54 +00:00
modifié le : 12/07/2011
2011-07-10 11:06:37 +00:00
< / div >
< div >
Site entièrement réalisé avec
< a href = "http://www.vim.org" > Vim< / a >
et
< a href = "http://nanoc.stoneship.org" > nanoc< / a >
< / div >
< div >
< a href = "/Scratch/fr/validation/" > Validation< / a >
< a href = "http://validator.w3.org/check?uri=referer" > [xhtml] < / a >
.
< a href = "http://jigsaw.w3.org/css-validator/check/referer?profile=css3" > [css] < / a >
.
< a href = "http://validator.w3.org/feed/check.cgi?url=http%3A//yannesposito.com/Scratch/fr/blog/feed/feed.xml" > [rss]< / a >
< / div >
< / div >
< div class = "clear" > < / div >
< / div >
< script type = "text/javascript" >
var clicky = { log: function(){ return; }, goal: function(){ return; }};
var clicky_site_id = 66374971;
(function() {
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = ( document.location.protocol == 'https:' ? 'https://static.getclicky.com/js' : 'http://static.getclicky.com/js' );
( document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0] ).appendChild( s );
})();
< / script >
< noscript > < p > < img alt = "Clicky" width = "1" height = "1" src = "http://in.getclicky.com/66374971ns.gif" / > < / p > < / noscript >
< / body >
< / html >