Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introduc¸a˜o Construc¸a˜o de Fractais Rodrigo Bonifa´cio 12 de abril de 2012 Rodrigo Bonifa´cio Construc¸a˜o de Fractais Introduc¸a˜o Inspirac¸a˜o para esses slides The Haskell school of expression (P. Hudak) Rodrigo Bonifa´cio Construc¸a˜o de Fractais Introduc¸a˜o Ainda relacionado a mo´dulos . . . Podemos reusa´-los em outras partes da aplicac¸a˜o. Inclusive, frequentemente reusamos mo´dulos desenvolvidos por outros grupos. Hackage Uma ferramenta que facilita o empacotamento e a distribuic¸a˜o de bibliotecas e mo´dulos Haskell. Rodrigo Bonifa´cio Construc¸a˜o de Fractais Introduc¸a˜o SOEGraphics Uma biblioteca para renderizar formas geome´tricas em Haskell. Principais funcionalidades: Criac¸a˜o de janelas Exibic¸a˜o de textos, e figuras geome´tricas nas janelas . . . Rodrigo Bonifa´cio Construc¸a˜o de Fractais Introduc¸a˜o Exibindo um texto em uma janela main0 = runGraphics ( do w <- openWindow "Primeiro..." (300, 300) drawInWindow w (text (100, 200) "Olah mundo ...") spaceClose w ) Rodrigo Bonifa´cio Construc¸a˜o de Fractais Introduc¸a˜o Rodrigo Bonifa´cio Construc¸a˜o de Fractais Introduc¸a˜o Fractal de Sierpinsk Rodrigo Bonifa´cio Construc¸a˜o de Fractais Introduc¸a˜o Preenchimento de triaˆngulos -- preenchimento de triangulos retangulos. -- coordenadas (x,y) -- tamanho size fillTri :: Window -> Int -> Int -> Int -> IO () fillTri w x y size = drawInWindow w polygon [(x,y), (x + size, y), (x, y-size),(x,y)] Rodrigo Bonifa´cio Construc¸a˜o de Fractais Introduc¸a˜o Soluc¸a˜o recursiva para a construc¸a˜o do fractal minSize :: Int minSize = 8 sierpinskiTri :: Window -> Int -> Int -> Int -> IO() sierpinskiTri w x y size = if size <= minSize then fillTri w x y size else do let size2 = size ‘div‘ 2 sierpinskiTri w x y size2 sierpinskiTri w x (y - size2) size2 sierpinskiTri w (x + size2) y size2 Rodrigo Bonifa´cio Construc¸a˜o de Fractais Introduc¸a˜o Rodrigo Bonifa´cio Construc¸a˜o de Fractais Introduc¸a˜o A soluc¸a˜o anterior, baseada no livro SOE, na˜o e´ intuitiva sierpinskiTri’ :: Window -> Point -> Point -> Point -> Int -> IO() sierpinskiTri’ w p1 p2 p3 s = let p1’ = (fst p1, snd p2) p2’ = pm p1 p2 -- calcula o ponto medio entre p1 e p2 p3’ = pm p1 p3 -- calcula o ponto medio entre p1 e p3 in do if (s <= 1) then fillAnyTriangle w Blue p1’ p2’ p3’ else do fillAnyTriangle w Blue p1’ p2’ p3’ sierpinskiTri’ w p1 p2’ p3’ (s-1) sierpinskiTri’ w p2’ p2 p1’ (s-1) sierpinskiTri’ w p3’ p1’ p3 (s-1) Rodrigo Bonifa´cio Construc¸a˜o de Fractais Introduc¸a˜o Rodrigo Bonifa´cio Construc¸a˜o de Fractais Introduc¸a˜o Sierpinski Carpet sierpinskiC :: Window -> Int -> Int -> Int -> IO () sierpinskiC w x y size = let sss = size ‘div‘ 3 in if size <= 9 then fillSquare w (x + sss) (y + sss) sss else do fillSquare w (x + sss) (y + sss) sss sequence_ [ sierpinskiC w (x + x’ * sss) (y + y’ * sss) sss | x’ <- [0..2] , y’ <- [0..2] , (x’, y’) /= (1,1) ] Rodrigo Bonifa´cio Construc¸a˜o de Fractais Introduc¸a˜o Rodrigo Bonifa´cio Construc¸a˜o de Fractais Introdução
Compartilhar