Premier commit
[powerfractal.git] / Src / Power_Types.ads
1 ------------------------------------------------------------------------------------------------
2 -- Nom : Power_Types / fait partie du programme Power Fractal --
3 -- --
4 -- Auteurs : Gregory Burri & Adrien Crivelli --
5 ------------------------------------------------------------------------------------------------
6 -- But : Declaration des types, des constantes et des variables globales --
7 ------------------------------------------------------------------------------------------------
8
9 with Ada.Characters.Latin_1; --Table de caractere LATIN 1
10 with Spider.Draw;
11
12
13 package Power_Types is
14
15 ------------------------CONSTANTES-----------------------
16
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
31
32
33
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
37
38
39
40 -- Pour les couleurs, de 0 a 255
41 type Byte is mod 256;
42
43 -- Type article pour la couleur
44 type T_Couleur is
45 record
46 -- Les trois couleurs : rouge, bleu, vert
47 R, G, B: Byte;
48 end record;
49 -- La surface de l'image (pixels sur pixels)
50 type T_Matrice_Tampon is array(Natural range <>, Natural range <>) of T_Couleur;
51
52
53
54 --Les types possibles de fractal
55 type T_Ensemble is (Julia, Mandelbrot);
56
57 --Type Contenant les couleurs qui forme le degrade
58 type T_Tab_Couleur is array (Natural range <>) of T_Couleur;
59
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;
64 end record;
65
66 subtype T_Nb_Couleur is Integer range 2 .. Nb_Couleur_Max;
67
68
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
71 record
72
73 NB_Iteration_Max : Natural := 50; -- Nombre d'iteration
74
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
78
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
82
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) );
85
86 Antialiasing : Boolean := False; -- Si l'antialiasing doit etre applique
87 Dessine_Degrade : Boolean := False; -- Si la palette de couleur doit etre dessinee
88
89 --Suivant l'ensemble
90 case Ensemble is
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;
94
95 when Mandelbrot => --Pas besoin d'infos supplementaires pour l'ensemble de mandelbrot
96 null;
97 end case;
98 end record;
99
100
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 Float;
103
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
106 record
107
108 case Antialiasing is
109 when False =>
110 Matrice_Iteration : T_Matrice_Iteration (0..Largeur_Ecran, 0..Hauteur_Ecran);
111 when True =>
112
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);
116
117 end case;
118 end record;
119
120 type T_Fractal;
121
122 --Lien vers le prochain element de la liste
123 type T_Lien is access T_Fractal;
124
125 --Le type des cellule
126 type T_Fractal is
127 record
128 Fractal : Cara_Fractal;
129 Suiv : T_Lien; --Pointe vers l'element suivant
130 end record;
131
132 --Le type de la liste dynamique
133 type T_Liste_Fractals is
134 record
135 Tete : T_Lien := null; --pointe sur le premier element
136 Nb_Fractals : Natural := 0; --le nombre de fractals que contient la liste
137 end record;
138
139
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);
144
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);
148
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;
152
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);
156
157 end Power_Types;