Menu Close

Fractal hexagonal

Escribir, usando CodeWorld, un programa para dibujar el fractal hexagonal que se muestra en la siguiente animación
Fractal_hexagonal

Las 4 primeras fases de la animación son

  • Fase 0:
    Fractal_hexagonal_0
  • Fase 1:
    Fractal_hexagonal_1
  • Fase 2:
    Fractal_hexagonal_2
  • Fase 3:
    Fractal_hexagonal_3

Nota: Este ejercicio ha sido propuesto por Agustín Martín Aguera.

Soluciones

import CodeWorld
 
main :: IO()
main = animationOf (hexagono . s)
 
hexagono :: Int -> Picture
hexagono 0 =
  colored red $ solidPolygon [(9,0),(4.5,c),(-4.5,c),(-9,0),(-4.5,-c),(4.5,-c)]
  where c = 9 * sin (pi / 3)
hexagono n =
  pictures (hex : take 6 (iterate (rotated (pi / 3)) (translated 6 0 hex)))
  where hex = scaled (1/3) (1/3) $ hexagono (n-1)
 
s :: Double -> Int
s t = mod (floor t) 5

Una solución de “Fractal hexagonal

  1. angruicam1
    import CodeWorld
     
    fractalHexagonal :: IO ()
    fractalHexagonal = animationOf fractales
     
    fractales :: Double -> Picture
    fractales t = pasos !! (floor t `mod` 4)
     
    pasos :: [Picture]
    pasos = take 4 . iterate (pictures . fractal) $ hexagono
     
    hexagono :: Picture
    hexagono =
      colored red
      $ solidPolygon [(5,0),(a,b),(-a,b),(-5,0),(-a,-b),(a,-b)]
      where a = cos (pi/3) * 5
            b = sin (pi/3) * 5
     
    fractal :: Picture -> [Picture]
    fractal x      = sh : rotash
      where sh     = scaled (1/3) (1/3) x
            rotash =
              [rotated y $ translated (10/3) 0 sh | y <- [0,pi/3..2*pi]]

Leave a Reply

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.