(* Programul deseneaza fractalul cruce in format SVG (Scalable vector graphics)
   http://en.wikipedia.org/wiki/Vicsek_fractal
   Compilati programul: ocamlc fisier.ml si apoi rulati ./a.out > patrat.svg
   (sub Windows, a.exe > patrat.svg )
   Vizualizati fisierul SVG, de exemplu in browser *)

open Printf

let rec fig x y len =           (* figură de latură len în punctul (x, y) *)
  if (len < 3.) then (          (* caz de baza: pătrat *)
    printf "M %.2f %.2f " x y;  (* mută cursorul, punctul dat va fi un colț *)
    printf "h %.2f " len;       (* linie orizontală *)
    printf "v %.2f " len;       (* continuă cu linie verticală *)
    printf "h %.2f " (-. len);  (* linie orizontală înapoi *)
    printf "v -%.2f " len;      (* linie verticala înapoi *)
  ) else
    let l3 = len /. 3. in       (* o treime de latură *)
    let l23 = 2. *. l3 in       (* două treimi *)
    (                           (* cinci figuri mai mici în colțuri și centru *)
      fig x y l3;
      fig (x +. l23) y l3;
      fig (x +. l3) (y +. l3) l3;
      fig x (y +. l23) l3;
      fig (x +. l23) (y +.l23) l3
    )

let _ = (
    print_endline "<?xml version=\"1.0\"?>";        (* antet fișier SVG *)
    print_endline "<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">";
    print_string "<path d=\"";                        (* desenarea *)
    fig 0. 0. 729.;
    print_endline "\"/>\n</svg>"
  )
  

This document was generated using caml2html