summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ch3/SimpleGraphics.hs38
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