------------------------------------------------------------------------------------------------ -- Nom : Power_Types / fait partie du programme Power Fractal -- -- -- -- Auteurs : Gregory Burri & Adrien Crivelli -- ------------------------------------------------------------------------------------------------ -- But : Declaration des types, des constantes et des variables globales -- ------------------------------------------------------------------------------------------------ with Ada.Characters.Latin_1; --Table de caractere LATIN 1 with Spider.Draw; package Power_Types is ------------------------CONSTANTES----------------------- Hauteur_Ecran : constant := 399; -- Hauteur de la zone de dessin (fenetre spider) Largeur_Ecran : constant := 639; -- Largeur de la zone de dessin (fenetre spider) Rayon_Int_Croix : constant := 2; -- Le rayon interieur de la croix (lors du 'center' et 'zoom') Rayon_Ext_Croix : constant := 6; -- le rayon superieur de la croix Hauteur_Degrade : constant := 5; -- la hauteur du degrade de couleur Facteur_Zin : constant := 4.0; -- facteur par defaut pour le zoom in Facteur_Zout : constant := 4.0; -- facteur par defaut pour le zoom our Zoom_Min : constant := 0.1; -- valeur de zoom minimale Nb_Iteration_Min : constant := 6; -- Nombre minimum d'iteration Longueur_Max : constant := 50; -- Longueur max d'un mot (nom de fichier) Nb_Couleur_Max : constant := 10; -- Nombre de couleur maximum Prompt : constant String := "> "; --Le prompt de la console Couleur_Cadre : constant Spider.Draw.Tcolor := (255, 255, 200); --La couleur du cadre de zoom Couleur_Numeros : constant Spider.Draw.Tcolor := (255, 255, 200); --La couleur des numeros Echape : constant Character := Ada.Characters.Latin_1.Esc;-- Le caractere ascii de la touche esc Vide : constant Character := Ada.Characters.Latin_1.Nul;-- Le carcatere ascii vide Espace : constant Character := Ada.Characters.Latin_1.Space;-- Le caractere ascii espace -- Pour les couleurs, de 0 a 255 type Byte is mod 256; -- Type article pour la couleur type T_Couleur is record -- Les trois couleurs : rouge, bleu, vert R, G, B: Byte; end record; -- La surface de l'image (pixels sur pixels) type T_Matrice_Tampon is array(Natural range <>, Natural range <>) of T_Couleur; --Les types possibles de fractal type T_Ensemble is (Julia, Mandelbrot); --Type Contenant les couleurs qui forme le degrade type T_Tab_Couleur is array (Natural range <>) of T_Couleur; --Type pour connaitre le point de la fractal qui doit se trouver au milieu de la fenetre type T_Centre is record X : Long_Float := 0.6; Y : Long_Float := 0.0; end record; subtype T_Nb_Couleur is Integer range 2 .. Nb_Couleur_Max; --Type representant toutes les carcateristiques d'un fractal et de son affichage type Cara_Fractal (Ensemble : T_Ensemble := Mandelbrot; Nb_Couleur : T_Nb_Couleur := 4) is record NB_Iteration_Max : Natural := 50; -- Nombre d'iteration -- La limit de divergence (voir doc : Que est ce qu'une fractal) C_Diverge_Limite : Long_Float := 4.0; Zoom : Long_Float := 1.0 / 4.0; -- Facteur du zoom a l'affichage -- Le point de la fractal qui sera affiche au centre de l'ecran Centre : T_Centre := (-0.6, 0.0); Angle : Long_Float := 0.0; -- Angle de la fractal --Les couleurs de la fractal (4 couleurs) Couleur : T_Tab_Couleur(1 .. Nb_Couleur) := ((255,0,0), (0,255,0), (0,0,255), (255,255,0) ); Antialiasing : Boolean := False; -- Si l'antialiasing doit etre applique Dessine_Degrade : Boolean := False; -- Si la palette de couleur doit etre dessinee --Suivant l'ensemble case Ensemble is when Julia => --pour l'ensemble julia il faut encore definir une constant c Cx : Long_Float := -0.577; Cy : Long_Float := 0.468; when Mandelbrot => --Pas besoin d'infos supplementaires pour l'ensemble de mandelbrot null; end case; end record; --Type matrice 2D contant la fractal sous forme de nombre dnatural'iteration type T_Matrice_Iteration is array (Integer range <>, Integer range <>) of Float; --Contient une matrice pour la fractal avec antialiasing (4 X plus grande) et une sans type T_Matrice_Iteration_2 (Antialiasing : Boolean := False) is record case Antialiasing is when False => Matrice_Iteration : T_Matrice_Iteration (0..Largeur_Ecran, 0..Hauteur_Ecran); when True => --La taille de la matrice est le quadruple de l'affichage Matrice_Iteration_Anti : T_Matrice_Iteration (0..Largeur_Ecran * 2 + 1, 0..Hauteur_Ecran * 2 + 1); end case; end record; type T_Fractal; --Lien vers le prochain element de la liste type T_Lien is access T_Fractal; --Le type des cellule type T_Fractal is record Fractal : Cara_Fractal; Suiv : T_Lien; --Pointe vers l'element suivant end record; --Le type de la liste dynamique type T_Liste_Fractals is record Tete : T_Lien := null; --pointe sur le premier element Nb_Fractals : Natural := 0; --le nombre de fractals que contient la liste end record; -- Fractal avec valeur par defaut pour Mandelbrot et Julia Fractal_Initial_Julia : constant Cara_Fractal := (Julia, 4, 50, 4.0, 1.0/4.0,(0.0, 0.0), 0.0, ((255,50,50), (200,254,120), (123,78,100), (0,23,100) ), False, False, -0.577, 0.468); Fractal_Initial_Mandel : constant Cara_Fractal := (Mandelbrot, 4, 50, 4.0, 1.0/4.0,(-0.6, 0.0), 0.0, ((100,100,255), (120,230,255), (123,78,100), (0,23,100) ), False, False); -------------------------VARIABLES----------------------- --La matrice global contant la fractal qui est qui va etre affiche a l'ecran Matrice_Iteration_Global : T_Matrice_Iteration_2; --Le tampon contant la fractal en mode RGB, utilise pour rafraichir le dessin a l'ecran --par exemple lors du tracage du cadre de zoom Matrice_Tampon_Ecran : T_Matrice_Tampon (0 .. Largeur_Ecran, 0 .. Hauteur_Ecran); end Power_Types;