Les courbes de Julia
Le projet consiste à écrire en OCaml un module permettant de définir et de tracer des courbes de Julia.Un exemple est fourni (main.byte). Pour l’exécuter, il suffit de taper ocaml run main.byte.Les courbes de Julia sont de jolies fractales obtenues en suivant un principe très simple. Elles se calculent à partir d’une suite récursive zp,c(n)de nombres complexes, où ce tp sont des nombres complexes,pétant les coordonnées du point dans le plan complexe dont on veut calculer la couleur. Avec la même suite récursive,et en changeant juste la constante c, on peut obtenir des courbes très différentes.Voici quelques exemples de courbes de Julia définies par la suite zp,c(0) =pzp,c(n+ 1) = (zp,c(n))2+cc= 0.285 + 0.01ic=−0.4 + 0.6ic=−0.8 + 0.156ic= 0.285 + 0ic=−0.70176−0.3842iFigure1 – Exemples de courbes de Julia. Description détaillée L’application s’exécute dans une fenêtre de taille 600*600 par défaut.La courbe de Julia est dessinée dans un repère R cartésien dont les abscisses et les ordonnées vont, par défaut, de -2 à 2 : le centre du repère se trouve, par défaut, au centre de la zone de dessin de l’application.L’algorithme de dessin est assez simple. Chaque pixel est traité indépendamment des autres. On note(x, y)R la coordonnée d’un pixel dans R. Cette coordonnée peut être interprétée comme le nombre complexe p=x+yi. On calcule alors la suite définie par zp,c(0) =pzp,c(n+ 1) = (zp,c(n))2+c1. dont les images de la Figure 1 sont extraites.
jusqu’à éventuellement trouver le plus petit n tel que zp,c(n) =x′+y′i satisfasse √x′2+y′2>2(1)en majorant n par une valeur borne(256 par défaut). La valeur den trouvée détermine le niveau de gris du point(x, y)R.Pour dessiner, vous utiliserez le module OCamlGraphics. Pour manipuler les nombres complexes, le module Complex.Votre programme devra contenir :— une fonction lvl_of calculant zp,c(n)(plus exactement, le plus petit n≤ borne tel que zp,c(n)satisfasse (1) si cet entier existe, la valeur borne sinon) ;— une fonction julia dont le rôle est, pour chaque point p de R, de réaliser le calcul de son niveau de gris en utilisant zp,c(n)(via lvl_of) et d’afficher le point p avec le niveau de gris correspondant dans une fenêtre graphique supposée déjà ouverte.Dans un premier temps, vous réaliserez le dessin d’une courbe de Julia pour les paramètres par défaut spécifiés précédemment. Vous prendrez soin ensuite de permettre une modification simple des propriétés suivantes :— le complexe c,— la dimension de la fenêtre,— l’intervalle de représentation (fonction de zoom),— les coordonnées du point central de la fenêtre,— la valeur borne.Pour cela, vous définirez un type enregistrement config dont les champs définiront les valeurs des éléments configurables de votre programme (au moins les cinq cités précédemment). Les fonctions lvl_of et julia devront alors prendre en compte un élément de type config pour contextualiser les calculs dans une configuration donnée. Ainsi :—lvl_of prendra deux paramètres (une configuration et un complexe) et renverra un entier ;—julia prendra un paramètre (une configuration) et renverra un élément de type unit, son rôle étant de colorer tous les pixels de la fenêtre graphique.Vous devrez également munir votre programme d’une boucle d’interaction. Pour cela, vous devrez :— définir un type command énumérant les différentes commandes et contenant la nouvelle valeur à modifier dans une configuration (par exemple, votre énumération contiendra la définition ResizeWindowof int pour modifier la taille de la fenêtre graphique que l’on supposera toujours carrée :type command=(* ... *)| ResizeWindowof int(* ... *); ;
— définir une fonction read_command de type unit -> command permettant de lire une commande de-puis l’entrée standard ; pour cela, vous pourrez utiliser les fonctions read_line(du module Stdlib)et sscan fdu moduleScanf;— définir une fonction execute de type config -> command -> config modifiant une configuration en fonction d’une commande ;— créer une boucle d’interaction par une fonction récursive read_command_and_draw de type config-> unit dont le rôle sera de lire une commande sur l’entrée standard, d’appliquer la modification àla configuration puis de dessiner la courbe de Julia correspondante ;— créer une fonction principale main de type config -> unit qui prend une configuration en para-mètre, puis qui ouvre une fenêtre graphique, trace la courbe de Julia associée à la configuration,puis lance la boucle d’interaction read_command_and_draw


j'ai un problèmes je ne comprends pas pour faire la suite sur les types et les boucles