J'ai créé un programme dont le but est de dessiner un ensemble fractal (l'ensemble manderbrot) et il ne contient aucune erreur de syntaxe, mais un seul pixel apparaît, pas l'ensemble.erreur logique dans l'affichage de l'ensemble de mandelbrot dans haskell
Voici mon programme:
module Main where
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Builder()
import Graphics.Rendering.Cairo as C
import Control.Monad (when)
main :: IO()
main = do
_ <- initGUI
builder <- builderNew
builderAddFromFile builder "09-mandelbrot.ui"
window <- builderGetObject builder castToWindow "Figure de Mandelbrot"
canvas <- builderGetObject builder castToDrawingArea "drawingarea1"
_ <- onExpose canvas $ const (updateCanvas canvas)
widgetShowAll window
mainGUI
updateCanvas :: DrawingArea -> IO Bool
updateCanvas canvas = do
win <- widgetGetDrawWindow canvas
(width, height) <- widgetGetSize canvas
renderWithDrawable win $ example (fromIntegral width) (fromIntegral height)
return True
k=100
mandelbrot :: Double -> Double -> Bool
mandelbrot a b =
let
mandelrec :: Double -> Double -> Int -> Bool
mandelrec x y i
| (x * x + y * y > 4) = False
| (i==k) && (x * x + y * y <= 4) = True
| otherwise = mandelrec x' y' (i+1)
where x' = x * x - y * y + a
y' = 2 * x * y + b
in mandelrec 0 0 0
affiche :: (Double, Double) -> Render()
affiche (a, b) = when (mandelbrot a b) $ C.rectangle a b 1 1
colonnes w = [ t/w*4-2 | t<-[0..(w-1)] ]
lignes h = [ t/h*4-2 | t<-[0..(h-1)] ]
example :: Double -> Double -> C.Render()
example width height = do
setSourceRGB 0 0 0
setLineWidth 1
mapM_ affiche (zip (colonnes width) (lignes height))
stroke
Je peux vous donner des explications en cas de besoin. J'ai déjà testé les fonctions lignes &, ça semble ok.