diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ch3/SimpleGraphics.hs | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/src/ch3/SimpleGraphics.hs b/src/ch3/SimpleGraphics.hs index 5e160a7..57f3e16 100644 --- a/src/ch3/SimpleGraphics.hs +++ b/src/ch3/SimpleGraphics.hs @@ -2,11 +2,11 @@ module SimpleGraphics where import Graphics.SOE -main0 = runGraphics ( +main0 = runGraphics $ do w <- openWindow "My First Graphics Program" (300,300) drawInWindow w (text (100,200) "HelloGraphicsWolrd") spaceClose w - ) + spaceClose :: Window -> IO () spaceClose w = do k <- getKey w @@ -22,3 +22,37 @@ putStr :: String -> IO () putStr [] = return () putStr (x:xs) = do putChar x SimpleGraphics.putStr xs + +pic1 = withColor Red + (ellipse (150, 150) (300, 200)) +pic2 = withColor Blue + (polyline [(100, 50), (200, 50), + (200, 250), (100, 250), (100, 50)]) + +main2 = runGraphics $ + do w <- openWindow "Some Graphics Figures" (300, 300) + drawInWindow w pic1 + drawInWindow w pic2 + spaceClose w + +fillTri :: Window -> Int -> Int -> Int -> IO () +fillTri w x y size = + drawInWindow w (withColor Blue + (polygon [(x,y), (x + size, y), (x, y - size), (x, y)])) + +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 let size2 = size `div` 2 + in do sierpinskiTri w x y size2 + sierpinskiTri w x (y-size2) size2 + sierpinskiTri w (x+size2) y size2 + +main3 = runGraphics $ + do w <- openWindow "Sierpinski's Triangle" (400, 400) + sierpinskiTri w 50 300 256 + spaceClose w |
