Commits

mouh  committed 61290ec

possibilité de modifier les coordonnées de départ

  • Participants
  • Parent commits e2b9d33

Comments (0)

Files changed (1)

 ]
 ;;
 
-(*let affiche_exemples = 
-  let rec aff_aux l = match l with
-    | (a,(b,c,d))::l2 -> begin
-			 print_string (a^"\n");
-			 aff_aux l2
-		       end
-
-    | [] -> print_string ""
-  in aff_aux examples
-;;
- *)
 let rec affiche_exemples l = match l with
   | (a,b)::l2 -> begin
 		 print_string (a^"\n");
 let i_p = [(F,[Line (2)]);(P,[Turn (25)]);(M,[Turn (-25)])];;
 
 
-let intel_graph iter word rul inter height length=
+let intel_graph abs ord iter word rul inter height length=
   let rec sub n =
     open_graph (" "^(string_of_int length)^"x"^(string_of_int height));
-    let t = { x = length/2; y = height/2; angle = 0} in
+    let t = { x = abs; y = ord; angle = 0} in 
       moveto t.x t.y;
       intel_calculate n word rul inter t;
       if (n < iter)
   in sub 0
 ;;
 
-let rec inside_main iter word rul inter height length = 
+let rec inside_main abs ord iter word rul inter height length = 
   let toto = read_line () in
     match toto with
-      | ";;" -> inside_main iter word rul inter height length
+      | ";;" -> inside_main abs ord iter word rul inter height length
       | ("Quit;;" | "Quit") -> ()
       | ("Afficher exemples;;" | "Afficher exemples" | "aff exs" | "aff exs;;") ->
 	 affiche_exemples examples;
-	 inside_main iter word rul inter height length			  
+	 inside_main abs ord iter word rul inter height length			  
       | ("Afficher axiome;;" | "Afficher axiome" | "aff axm" | "aff axm;;") -> 
 	  print_string ((affiche word)^"\n"); 
-	  inside_main iter word rul inter height length
+	  inside_main abs ord iter word rul inter height length
       | ("Afficher regle;;" | "Afficher regle" | "aff rg" | "aff rg;;") ->
 	  print_string ((affiche_rewrite rul)^"\n");
-	  inside_main iter word rul inter height length
+	  inside_main abs ord iter word rul inter height length
       | ("Afficher interpretation;;" | "Afficher interpretation" | "aff itp" | "aff itp;;") -> 
 	  print_string ((affiche_inter inter)^"\n"); 
-	  inside_main iter word rul inter height length
+	  inside_main abs ord iter word rul inter height length
       | ("Afficher nombre d'iterations;;" | "Afficher nombre d'iterations" | "aff iter" | "aff iter;;") ->
 	  print_int iter; print_newline ();
-	  inside_main iter word rul inter height length
+	  inside_main abs ord iter word rul inter height length
       | ("Afficher hauteur;;" | "Afficher hauteur" | "aff h" | "aff h;;") ->
 	  print_int height; print_newline ();
-	  inside_main iter word rul inter height length
+	  inside_main abs ord iter word rul inter height length
       | ("Afficher longueur;;" | "Afficher longueur" | "aff l" | "aff l;;") ->
 	  print_int length; print_newline ();
-	  inside_main iter word rul inter height length
+	  inside_main abs ord iter word rul inter height length
+      | ("Afficher abscisse;;" | "Afficher abscisse" | "aff abs;;" | "aff abs") ->
+	 print_int abs; print_newline ();
+	 inside_main abs ord iter word rul inter height length
+      | ("Afficher ordonnee;;" | "Afficher ordonnee" | "aff ord;;" | "aff ord") ->
+	 print_int ord; print_newline ();
+	 inside_main abs ord iter word rul inter height length
       | ("Calculer;;" | "Calculer") -> 
 	  print_string "Pour passer à l'iteration suivante; faire un clic gauche de la souris\n"; 
-	  intel_graph iter word rul inter height length ;
+	  intel_graph abs ord iter word rul inter height length ;
 	  print_string "Calcul terminé\n";
-	  inside_main iter word rul inter height length
+	  inside_main abs ord iter word rul inter height length
       | ("Ajuster exemple;;" | "Ajuster exemple" | "aj ex" | "aj ex;;") -> begin
 	  print_string "Veuillez entrer un exemple\n";
 	  try
 	    let (axm,rg,itp) =  List.assoc (read_line ()) examples in
 	    print_string "Exemple choisi\n";
-	    inside_main iter axm rg itp height length
+	    inside_main abs ord iter axm rg itp height length
 	  with Not_found -> print_string "Aucun exemple trouvé. Utilisez \"Afficher exemples\" pour afficher une liste des exemples\n";
-			    inside_main iter word rul inter height length
+			    inside_main abs ord iter word rul inter height length
 	  end
 					    		   
       | ("Ajuster axiome;;" | "Ajuster axiome" | "aj axm" | "aj axm;;") -> begin
 	  try 
 	    let tmp = simpler_syntax (read_line ()) in
 	    print_string "Nouvel axiome enregistré\n";
-	    inside_main iter tmp rul inter height length
-	  with Failure s -> print_string s; inside_main iter word rul inter height length
+	    inside_main abs ord iter tmp rul inter height length
+	  with Failure s -> print_string s; inside_main abs ord iter word rul inter height length
 	end
       | ("Ajuster regle;;" | "Ajuster regle" | "aj rg" | "aj rg;;") -> begin
 	  print_string "Veuillez entrer la nouvelle regle de réecriture\n";
 	  try 
 	    let tmp = get_rule (read_line ()) in
 	    print_string "Nouvelle règle enregistrée\n";
-	    inside_main iter word tmp inter height length
-	  with Failure s -> print_string s; inside_main iter word rul inter height length
+	    inside_main abs ord iter word tmp inter height length
+	  with Failure s -> print_string s; inside_main abs ord iter word rul inter height length
 	end
       | ("Ajuster interpretation;;" | "Ajuster interpretation" | "aj itp" | "aj itp;;") -> begin
 	  print_string "Veuillez entrer la nouvelle interpretation\n";
 	  try 
 	    let tmp = get_inter (read_line ()) in
 	    print_string "Nouvelle interprétation enregistrée\n";
-	    inside_main iter word rul tmp height length
-	  with Failure s -> print_string s; inside_main iter word rul inter height length
+	    inside_main abs ord iter word rul tmp height length
+	  with Failure s -> print_string s; inside_main abs ord iter word rul inter height length
 	end
       | ("Ajuster nombre d'iterations;;" | "Ajuster nombre d'iterations" | "aj iter" | "aj iter;;") -> 
 	  print_string "Veuillez entrer le nouveau nombre d'iterations\n"; 
 	    try
 	    let tmp = read_int() in
 	    print_string "Nouveau nombre d'itérations enregistré\n";
-	    inside_main tmp word rul inter height length 
-	    with Failure s -> print_string "Vous n'avez pas entré un entier"; inside_main iter word rul inter height length
+	    inside_main abs ord tmp word rul inter height length 
+	    with Failure s -> print_string "Vous n'avez pas entré un entier"; inside_main abs ord iter word rul inter height length
 	  end
       | ("Ajuster hauteur;;" | "Ajuster hauteur" | "aj h" | "aj h;;") -> 
 	  print_string "Veuillez entrer la nouvelle hauteur\n"; 
 	    try 
 	      let tmp = read_int () in
 	      print_string "Nouvelle hauteur enregistrée\n";
-	      inside_main iter word rul inter tmp length
-	    with Failure s -> print_string "Vous n'avez pas entré un entier"; inside_main iter word rul inter height length
+	      inside_main abs ord iter word rul inter tmp length
+	    with Failure s -> print_string "Vous n'avez pas entré un entier"; inside_main abs ord iter word rul inter height length
 	  end
       | ("Ajuster longueur;;" | "Ajuster longueur" | "aj l" | "aj l;;") -> 
 	  print_string "Veuillez entrer la nouvelle longueur\n"; 
 	    try 
 	      let tmp = read_int () in
 	      print_string "Nouvelle longueur enregistrée\n";
-	      inside_main iter word rul inter height tmp
-	    with Failure s -> print_string "Vous n'avez pas entré un entier"; inside_main iter word rul inter height length
+	      inside_main abs ord iter word rul inter height tmp
+	    with Failure s -> print_string "Vous n'avez pas entré un entier"; inside_main abs ord iter word rul inter height length
+	  end
+      | ("Ajuster abscissse;;" | "Ajuster abscisse" | "aj abs" | "aj abs;;") -> 
+	  print_string "Veuillez entrer la nouvelle abscisse\n"; 
+	  begin
+	    try 
+	      let tmp = read_int () in
+	      print_string "Nouvelle abscisse enregistrée\n";
+	      inside_main tmp ord iter word rul inter height length
+	    with Failure s -> print_string "Vous n'avez pas entré un entier"; inside_main abs ord iter word rul inter height length
+	  end
+      | ("Ajuster ordonnee;;" | "Ajuster ordonnee" | "aj ord" | "aj ord;;") -> 
+	  print_string "Veuillez entrer la nouvelle ordonnée\n"; 
+	  begin
+	    try 
+	      let tmp = read_int () in
+	      print_string "Nouvelle ordonnée enregistrée\n";
+	      inside_main abs tmp iter word rul inter height length
+	    with Failure s -> print_string "Vous n'avez pas entré un entier"; inside_main abs ord iter word rul inter height length
 	  end
       | ("Help;;" | "Help" | "?" | "?;;") ->
-	  print_string "Les commandes suivantes sont disponibles :\n";
-	  print_string "Quit : Quitte le programme\n";
+	  print_string "Les commandes suivantes sont disponibles :\n\n";
+	  print_string "Quit : Quitte le programme\n\n";
 	  print_string "Afficher exemples / aff exs : Affiche des exemples de L-systèmes prédéfinis (tirés de \"The Algorithmic Beauty of Plants\"\n";
 	  print_string "Afficher axiome / aff axm : Affiche l'axiome courant\n";
 	  print_string "Afficher regle / aff rg : Affiche la regle de reecriture courante\n";
 	  print_string "Afficher nombre d'iterations / aff iter : Affiche le nombre d'iteration courant\n";
 	  print_string "Afficher hauteur / aff h : Affiche la hauteur courante\n";
 	  print_string "Afficher longueur / aff l : Affiche la longueur courante\n";
-	  print_string "Calculer : Calcule les iterations successives avec les parametres courants\n";
+	  print_string "Afficher abscisse / aff abs : Affiche l'abscisse de départ\n";
+	  print_string "Afficher ordonnee / aff ord : Affiche l'ordonnée de départ\n\n";
+	  print_string "Calculer : Calcule les iterations successives avec les parametres courants\n\n";
 	  print_string "Ajuster exemple / aj ex : Permet de choisir un L-système prédéfini\n";
 	  print_string "Ajuster axiome / aj axm : Permet de changer l'axiome\n";
 	  print_string "Ajuster regle / aj rg : Permet de changer la regle de réecriture\n";
 	  print_string "Ajuster nombre d'iterations / aj iter : Permet de changer le nombre d'iterations\n";
 	  print_string "Ajuster hauteur / aj h: Permet de changer la hauteur\n";
 	  print_string "Ajuster longueur / aj l: Permet de changer la longueur\n";
+	  print_string "Ajuster abscisse / aj abs: Permet de changer l'abscisse de départ\n";
+	  print_string "Ajuster ordonnee / aj ord: Permet de changer l'ordonée de départ\n";
 	  print_string "Help / ? : affiche cette aide\n";
 	  print_string "Ces commandes peuvent être également suivies de ;; (compatibilité avec le toplevel)\n";
 	  print_string "Pour de l'aide sur la syntaxe utilisée pour définir les systemes, utilisez Help syntaxe\n";
-	  inside_main iter word rul inter height length
+	  inside_main abs ord iter word rul inter height length
       | ("Help syntaxe;;" | "Help syntaxe") ->
 	  print_string "La syntaxe utilisée est la suivante :\n-Un symbole est représenté par son constructeur. Par exemple, T. Les symboles peuvent être n'importe quelle lettre majuscule hormis S.\n-Une Branche (Branch en interne) est débutée par un '[', et terminée par un ']'. Entre eux, une Sequence.\n-Une Sequence (Seq en interne) est juste plusieurs symboles/branches qui se suivent, par exemple TBT[TT]A.\n\n";
 	  print_string "Les axiomes sont des séquences simples.\nLes regles sont de la forme [(Symbole,[Sequence]);(Symbole,[Sequence])...(Symbole,[Sequence])], par exemple [(A,[ABA]);(B,[B])].\nLes interpretations sont de la forme [(Symbole,[Commande1(Entier);Commande2(Entier);...Commanden(Entier)]);...]. Les commandes dirigent la tortue, et sont au nombre de trois :\n";
 	  print_string "-Line(x) : Avance la tortue, en tracant, de x.\n-Move(x) : Avance la tortue de x sans tracer.\n-Turn(x) : Fait tourner la tortue de x radians.\nFin de l'aide sur la syntaxe.\n";
-	  inside_main iter word rul inter height length
+	  inside_main abs ord iter word rul inter height length
       | _ -> print_string "Commande non connue. Utilisez Help pour avoir une liste des commandes\n";
-	  inside_main iter word rul inter height length
+	  inside_main abs ord iter word rul inter height length
 ;;
 
-let rec main n word rul inter height length =
+let rec main n abs ord word rul inter height length =
 try 
   print_string "Des paramètres par défauts ont été créés. Si vous ne savez pas comment les changer, tapez Help, puis 'Return'\n";
-  inside_main n word rul inter height length
+  inside_main abs ord n word rul inter height length
 with Graphic_failure("fatal I/O error") -> ()
 ;;
 
-
-main 5 axiom s_p i_p 700 1000;;
+let abs = 500;;
+let ord = 350;;
+main 5 abs ord axiom s_p i_p 700 1000;;