(* initialisations du graphisme, fabrication d'un crayon-logo *) (* fichier fait à partir de "crayon" de la bibliotheque qui va avec minilogo *) #open "graphics";; (*chargement de la bibliothèque *) open_graph "";; (* initialisation, mode par défaut *) let round x = if x >=. 0.0 then int_of_float (x +. 0.5) else - (int_of_float (-. x +. 0.5));; (* le type état sert à décrire un ... état du matériel virtuel d'écriture. Une instance du type état est un quadruplet comme 5.3;-17.51;120.;true qui indique que le point d'écriture est (5.3,-17.51), que la direction de déplacement est 120 (en degrés) et que le crayon est levé pour un déplacement sans écriture) *) type état = {mutable X : float; mutable Y : float; mutable Visée : float; mutable Levé : bool} ;; let crayon = { X = 0.0; Y = 0.0; Visée = 0.0; Levé = false } ;; let fixe_crayon b = crayon.Levé <- b;; let pi_sur_180 = let pi = 4.0 *. (atan 1.0) in pi /. 180.0;; let tourne angle = crayon.Visée <- (crayon.Visée +. angle *. pi_sur_180);; let avance d = let dx = d *. cos (crayon.Visée) and dy = d *. sin (crayon.Visée) in crayon.X <- crayon.X +. dx; crayon.Y <- crayon.Y +. dy; if crayon.Levé then moveto (round crayon.X) (round crayon.Y) else lineto (round crayon.X) (round crayon.Y);; let couleur_du_tracé = foreground;; let couleur_du_fond = background;; let zéro_x = float_of_int ((size_x ()) / 2);; let zéro_y = float_of_int ((size_y ()) / 2);; let vide_écran () = clear_graph(); set_color couleur_du_tracé; crayon.X <- zéro_x; crayon.Y <- zéro_y; crayon.Visée <- 0.0; crayon.Levé <- false; moveto (round crayon.X) (round crayon.Y);; (* ci-dessous un programme-exemple *) (* let carre_central r= set_color couleur_du_tracé; crayon.X <- zéro_x-.r; crayon.Y <- zéro_y-.r; crayon.Visée <- 0.0; crayon.Levé <- true; moveto (round crayon.X) (round crayon.Y); crayon.Levé <- false; let rr=r +. r in for i=1 to 4 do avance rr; tourne 90. done ;; for k=0 to 10 do carre_central ((float_of_int k)*.10.) done;; *)