1 ------------------------------------------------------------------------------------------------
2 -- Nom : Power_Types / fait partie du programme Power Fractal --
4 -- Auteurs : Gregory Burri & Adrien Crivelli --
5 ------------------------------------------------------------------------------------------------
6 -- But : Declaration des types, des constantes et des variables globales --
7 ------------------------------------------------------------------------------------------------
9 with Ada
.Characters
.Latin_1
; --Table de caractere LATIN 1
13 package Power_Types
is
15 ------------------------CONSTANTES-----------------------
17 Hauteur_Ecran
: constant := 399; -- Hauteur de la zone de dessin (fenetre spider)
18 Largeur_Ecran
: constant := 639; -- Largeur de la zone de dessin (fenetre spider)
19 Rayon_Int_Croix
: constant := 2; -- Le rayon interieur de la croix (lors du 'center' et 'zoom')
20 Rayon_Ext_Croix
: constant := 6; -- le rayon superieur de la croix
21 Hauteur_Degrade
: constant := 5; -- la hauteur du degrade de couleur
22 Facteur_Zin
: constant := 4.0; -- facteur par defaut pour le zoom in
23 Facteur_Zout
: constant := 4.0; -- facteur par defaut pour le zoom our
24 Zoom_Min
: constant := 0.1; -- valeur de zoom minimale
25 Nb_Iteration_Min
: constant := 6; -- Nombre minimum d'iteration
26 Longueur_Max
: constant := 50; -- Longueur max d'un mot (nom de fichier)
27 Nb_Couleur_Max
: constant := 10; -- Nombre de couleur maximum
28 Prompt
: constant String := "> "; --Le prompt de la console
29 Couleur_Cadre
: constant Spider
.Draw
.Tcolor
:= (255, 255, 200); --La couleur du cadre de zoom
30 Couleur_Numeros
: constant Spider
.Draw
.Tcolor
:= (255, 255, 200); --La couleur des numeros
34 Echape
: constant Character := Ada
.Characters
.Latin_1
.Esc
;-- Le caractere ascii de la touche esc
35 Vide
: constant Character := Ada
.Characters
.Latin_1
.Nul
;-- Le carcatere ascii vide
36 Espace
: constant Character := Ada
.Characters
.Latin_1
.Space
;-- Le caractere ascii espace
40 -- Pour les couleurs, de 0 a 255
43 -- Type article pour la couleur
46 -- Les trois couleurs : rouge, bleu, vert
49 -- La surface de l'image (pixels sur pixels)
50 type T_Matrice_Tampon
is array(Natural range <>, Natural range <>) of T_Couleur
;
54 --Les types possibles de fractal
55 type T_Ensemble
is (Julia
, Mandelbrot
);
57 --Type Contenant les couleurs qui forme le degrade
58 type T_Tab_Couleur
is array (Natural range <>) of T_Couleur
;
60 --Type pour connaitre le point de la fractal qui doit se trouver au milieu de la fenetre
61 type T_Centre
is record
62 X
: Long_Float := 0.6;
63 Y
: Long_Float := 0.0;
66 subtype T_Nb_Couleur
is Integer range 2 .. Nb_Couleur_Max
;
69 --Type representant toutes les carcateristiques d'un fractal et de son affichage
70 type Cara_Fractal (Ensemble
: T_Ensemble
:= Mandelbrot
; Nb_Couleur
: T_Nb_Couleur
:= 4) is
73 NB_Iteration_Max
: Positive := 50; -- Nombre d'iteration
75 -- La limit de divergence (voir doc : Que est ce qu'une fractal)
76 C_Diverge_Limite
: Long_Float := 4.0;
77 Zoom
: Long_Float := 1.0 / 4.0; -- Facteur du zoom a l'affichage
79 -- Le point de la fractal qui sera affiche au centre de l'ecran
80 Centre
: T_Centre
:= (-0.6, 0.0);
81 Angle
: Long_Float := 0.0; -- Angle de la fractal
83 --Les couleurs de la fractal (4 couleurs)
84 Couleur
: T_Tab_Couleur(1 .. Nb_Couleur
) := ((255,0,0), (0,255,0), (0,0,255), (255,255,0) );
86 Antialiasing
: Boolean := False; -- Si l'antialiasing doit etre applique
87 Dessine_Degrade
: Boolean := False; -- Si la palette de couleur doit etre dessinee
91 when Julia
=> --pour l'ensemble julia il faut encore definir une constant c
92 Cx
: Long_Float := -0.577;
93 Cy
: Long_Float := 0.468;
95 when Mandelbrot
=> --Pas besoin d'infos supplementaires pour l'ensemble de mandelbrot
101 --Type matrice 2D contant la fractal sous forme de nombre dnatural'iteration
102 type T_Matrice_Iteration
is array (Integer range <>, Integer range <>) of Natural;
104 --Contient une matrice pour la fractal avec antialiasing (4 X plus grande) et une sans
105 type T_Matrice_Iteration_2 (Antialiasing
: Boolean := False) is
110 Matrice_Iteration
: T_Matrice_Iteration (0..Largeur_Ecran
, 0..Hauteur_Ecran
);
113 --La taille de la matrice est le quadruple de l'affichage
114 Matrice_Iteration_Anti
: T_Matrice_Iteration
115 (0..Largeur_Ecran
* 2 + 1, 0..Hauteur_Ecran
* 2 + 1);
122 --Lien vers le prochain element de la liste
123 type T_Lien
is access T_Fractal
;
125 --Le type des cellule
128 Fractal
: Cara_Fractal
;
129 Suiv
: T_Lien
; --Pointe vers l'element suivant
132 --Le type de la liste dynamique
133 type T_Liste_Fractals
is
135 Tete
: T_Lien
:= null; --pointe sur le premier element
136 Nb_Fractals
: Natural := 0; --le nombre de fractals que contient la liste
140 -- Fractal avec valeur par defaut pour Mandelbrot et Julia
141 Fractal_Initial_Julia
: constant Cara_Fractal
:=
142 (Julia
, 4, 50, 4.0, 1.0/4.0,(0.0, 0.0), 0.0,
143 ((255,50,50), (200,254,120), (123,78,100), (0,23,100) ), False, False, -0.577, 0.468);
145 Fractal_Initial_Mandel
: constant Cara_Fractal
:=
146 (Mandelbrot
, 4, 50, 4.0, 1.0/4.0,(-0.6, 0.0), 0.0,
147 ((100,100,255), (120,230,255), (123,78,100), (0,23,100) ), False, False);
149 -------------------------VARIABLES-----------------------
150 --La matrice global contant la fractal qui est qui va etre affiche a l'ecran
151 Matrice_Iteration_Global
: T_Matrice_Iteration_2
;
153 --Le tampon contant la fractal en mode RGB, utilise pour rafraichir le dessin a l'ecran
154 --par exemple lors du tracage du cadre de zoom
155 Matrice_Tampon_Ecran
: T_Matrice_Tampon (0 .. Largeur_Ecran
, 0 .. Hauteur_Ecran
);