Varios cuadrados encajados rotando
Enunciado
Definir la función
| 1 |    cuadrados :: Int -> Float -> Picture | 
de forma que (cuadrados n) sea la animación obtenida rotando n cuadrados encajados como se muestra a continuación.
Nota: Escribir las soluciones usando la siguiente plantilla
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | import Graphics.Gloss import System.IO main :: IO () main = do   hSetBuffering stdout NoBuffering   putStr "Introduce el numero de cuadrados [1..10]: "   n <- readLn   animate (InWindow (show n ++ " cuadrados encajados rotando" )                      (600,600) (20,20)) white (cuadrados n) cuadrados :: Int -> Float -> Picture cuadrados n t = undefined | 
Soluciones
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import Graphics.Gloss import System.IO main :: IO () main = do   hSetBuffering stdout NoBuffering   putStr "Introduce el numero de cuadrados [1..10]: "   n <- readLn   animate (InWindow (show n ++ " cuadrados encajados rotando" )                      (600,600) (20,20)) white (cuadrados n) -- 1ª solución (por comprensión): cuadrados :: Int -> Float -> Picture cuadrados n t =      pictures [rotate (6*(fromIntegral n)*t) $                scale (r^n) (r^n) $ rotate (g n) $ cuadrado | n <- [0..n-1]]     where cuadrado        = rectangleWire 400 400           g n | even n    = 0               | otherwise = 45           r               = 1 / sqrt 2 -- 2ª solución (por recursión): cuadrados2 :: Int -> Float -> Picture cuadrados2 1 _ = rectangleWire 500 500 cuadrados2 n t =      pictures [rectangleWire 500 500,               rotate (45+10*t) $                scale (1/sqrt 2) (1/sqrt 2) (cuadrados2 (n-1) t)] | 


