Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Codec.Picture
- import Codec.Picture.Types
- import System.Environment
- main :: IO ()
- main = do
- putStrLn "Beginning rendering of image."
- makenframes 1 5
- makenframes :: Int -> Int -> IO ()
- makenframes n end
- | n >= end = putStrLn "Completed"
- | otherwise = do
- savePngImage ("frames\\"++(show n)++".jpg") (generateFractal n)
- makenframes (n+1) end
- width :: Int
- width = 200
- height :: Int
- height = 100
- generateFractal :: Int -> DynamicImage
- generateFractal n = ImageRGB8 $ generateImage (mandelbrot n) width height
- iters :: Int
- iters = 25
- palette :: [PixelRGB8]
- palette = foldr (\a -> \b -> (PixelRGB8 (fromIntegral a*13) (fromIntegral a*10) 0):b) [] [0..iters]
- mandelbrot :: Int -> Int -> Int -> PixelRGB8
- mandelbrot x0 y0 n = getColor 0 0 0 n
- where getColor :: Float -> Float -> Int -> Int -> PixelRGB8
- getColor x y i n = if x*x + y*y < 2*2 && i < iters
- then getColor (x*x - y*y + (scaleX x0 n)) (2*x*y + (scaleY y0 n)) (i+1) n
- else palette!!i
- scaleX :: Int -> Int -> Float
- scaleX x n = (3.5/ (fromIntegral n) * (fromIntegral x)) / (fromIntegral width) - 2.5
- scaleY :: Int -> Int -> Float
- scaleY y n = (2/ (fromIntegral n) * (fromIntegral y)) / (fromIntegral height) - 1.0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement