-- -- | -- Module : Logo -- Authors : Sean Seefried (http://www.cse.unsw.edu.au/~sseefried) -- Copyright : (c) 2006 -- License : BSD3 -- Created : 12 Jan 2006 -- module Logo where import Pan effect :: UI DisplayFun effect = do side <- makeSlider "side" (1,100) 5 numSquares <- makeISlider "number of squares" (1,60) 14 sep <- makeSlider "separation" (10,50) 20 numCircles <- makeISlider "number of circles" (1,9) 3 startRad <- makeSlider "start radius" (10,100) 30 swirlFactor <- makeSlider "swirl Factor" (100,10000) 500 imageToDisplayFun $ swirl swirlFactor $ manyCirclesOfSquares numCircles startRad sep numSquares side blue ---- manyCirclesOfSquares numCircles startRad separation numSquares side col = let n = fromIntegral numCircles rads = [startRad, startRad + separation .. startRad + (n-1) * separation] in foldr over emptyI (map (\r -> circleOfSquares numSquares r side col) rads) circleOfSquares n rad side col = let angles = [2*pi/(fromIntegral n),4*pi/(fromIntegral n) .. 2*pi] placeSquare ang= squareAtPosWithRotation (fromPolar (Pol rad ang)) ang side col in foldr over emptyI (map placeSquare angles) squareAtPosWithRotation :: Point -> Frac -> Frac -> Colour -> ImageC squareAtPosWithRotation (Pt x y) ang side col = let square = condR (squareReg side) (lift0 col) emptyI in translate (Vec x y) (rotate ang square) squareReg :: Frac -> Region squareReg s (Pt x y) = -s <= x && x <= s && -s <= y && y <= s