0votos

Dibujar triangulo de sierpinski en Haskell

por josejuan hace 6 años

Es mucho más divertida la versión de listas (no gráfico), la versión gráfica (esta solución) es bastante predecible y aburrida... :P

Gráfica el triangulo de sierpinski.

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
29
30
31
32
33
-- Dado cualquier triangulo, devuelve las aristas (no superpuestas) 
-- del triángulo sierpiński-zado hasta un nivel de recursividad dado. 
sierpiński 0 a b c = [(a, b), (b, c), (c, a)] 
sierpiński n a@(ax, ay) b@(bx, by) c@(cx, cy) = 
  sierpiński n' a ab ac ++ 
  sierpiński n' ab b bc ++ 
  sierpiński n' ac bc c 
  where n' = n - 1 
        ab = med a b 
        ac = med a c 
        bc = med b c 
        med (x, y) (x', y') = ((x + x') / 2, (y + y') / 2) 
 
 
-- ========================================================================== 
-- Por ejemplo 
-- 
--     http://shared.computer-mind.com/JoseJuan/solveet/sierpinski.svg 
-- 
 
test = sierpiński 8 (0, 800) (800, 800) (400, 0) 
 
drawLine :: ((Double, Double), (Double, Double)) -> String  
drawLine ((x1, y1), (x2, y2)) =  
   "<line x1=\"" ++ (show x1) ++ "\" y1=\"" ++ (show y1) ++  
      "\" x2=\"" ++ (show x2) ++ "\" y2=\"" ++ (show y2) ++ "\" style=\"stroke: rgb(0, 0, 0)\" />"  
 
  
 
main = do 
  putStr "<svg xmlns=\"http://www.w3.org/2000/svg\">" 
  putStr $ concatMap drawLine test 
  putStr "</svg>" 
1 comentario
0votos

Escrito por josejuan hace 6 años

(Por eso de que se vea la imagen aquí)

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.