|
diffusion limited aggregation whit allegro |
phy1888
Member #16,768
November 2017
|
hi I need help, I have this code and I have to change it for a limited central diffusion of radius r = 7, and the center is darker.. my code is : #include <allegro.h> using namespace std; const int bSchermo = 500; //riquadro 500x500 //..........altri colori int conf0[d][d]; // configurazioni // variabili globali di DIFFUSIONE-AGGREGAZIONE // ---------------------------- void toro() void cornice_inerte() void inizial () void cella_aggr (int x, int y) void cella_trans (int x, int y) /*void cella_aggr(int x, int y) void cella_diff (int x, int y) void diffus1 () void diffus2 () void aggrega () void transiz () int main() |
Chris Katko
Member #1,881
January 2002
|
don't forget to use <code > tags 1
2#include <allegro.h>
3#include <stdio.h>
4#include <stdlib.h>
5#include <math.h>
6#include <time.h>
7#include <string>
8#include <iostream>
9
10using namespace std;
11
12const int bSchermo = 500; //riquadro 500x500
13const int hSchermo = 510; //ultime 10 righe per informazioni(passi, statistica et c.)
14const int d = bSchermo+2; // +2 per bordi o per sovrapposizione toro
15//.... colori
16int nero;// = makecol(0,0,0);
17int blu ;// sfondo spazio vuoto = makecol(0,128,255);
18int bianco;// particelle mobili = makecol(255,255,255);
19int verdescuro; // = makecol(0, 128, 50);
20int verdechiaro;//= makecol( 0, 255, 128);
21int rosso;// particelle fisse = makecol(255,0,0);
22
23//..........altri colori
24BITMAP *buffer;//Dichiarazioni generali: buffer
25int passi=0; // passi
26
27int conf0[d][d]; // configurazioni
28int conf1[d][d];
29
30// variabili globali di DIFFUSIONE-AGGREGAZIONE
31
32// ----------------------------
33
34void toro()
35{// condizione superficie toroidale
36int lim = d-1;
37for (int i=1; i<lim; i++)
38{conf0[0][i] = conf0[lim-1][i] ;
39conf0[i][0] = conf0[i][lim-1];
40conf0[lim][i] = conf0[1][i];
41conf0[i][lim] = conf0[i][1];
42}
43conf0[0][0] = conf0[lim-1][lim-1] ;
44conf0[0][lim] = conf0[lim-1][1] ;
45conf0[lim][0] = conf0[1][lim-1] ;
46conf0[lim][lim] = conf0[1][1] ;
47}
48
49void cornice_inerte()
50{// condizione cornice di celle inerti
51for (int k=0; k<d; k++)
52{conf0[0][k] = -1 ;
53conf0[k][0] = -1;
54conf0[d-1][k] = -1;
55conf0[k][d-1] = -1;
56}
57}
58
59void inizial ()
60{
61// DATI IN INGRESSO
62float perc=90;
63int iniziali=5;
64
65/* generazione pseudocasuale */
66float c;
67int lim=d-1;
68srand(time (0));
69for (int i=1; i<lim; i++)
70for (int j=1; j<lim; j++)
71{ c=rand()%100;
72if (c <= perc) conf0[i][j] = -1;
73else conf0[i][j] = 1;
74}
75for (int i=0; i<iniziali; i++)
76conf0[rand()%lim+1][rand()%lim+1] = 0;
77// condizione superficie toroidale
78toro();
79}
80
81void cella_aggr (int x, int y)
82{ int sini, des, alto, basso, prod=1;
83sini=x-1; des=x+1;
84basso=y-1; alto=y+1;
85for (int i=sini; i<=des; i++)
86for (int j=basso; j<=alto; j++)
87prod=prod*conf0[i][j];
88if ((prod==0) && (conf0[x][y]==1)) conf1[x][y]=0;
89}
90
91/*void cella_trans (int x, int y)
92{ switch(conf0[x][y])
93{ case -1: conf1[x][y]=-1; break;
94case 0: conf1[x][y]= 2; break;
95case 1: conf1[x][y]= contagio(x,y); break;
96case 2: conf1[x][y]= 2; break;;
97}
98}
99
100void cella_trans (int x, int y)
101{ switch(conf0[x][y])
102{ case -1: conf1[x][y]=-1; break;
103case 0: conf1[x][y]= 2; break;
104case 1: conf1[x][y]= contagio(x,y); break;
105case 2: conf1[x][y]= 2; break;;
106}
107}*/
108void copia ()
109// si copia la configurazione
110{ for (int i=0; i<d; i++)
111for (int j=0; j<d; j++)
112conf0[i][j] = conf1[i][j] ;
113}
114
115/*void cella_aggr(int x, int y)
116{if ((conf0[x-1][y]==0)||(conf0[x+1][y]==0)||(conf0[x][y+1]==0)||(conf0[x][y-1]==0))
117if (conf0[x][y] == 1 )conf1[x][y] = 0;
118_________________________________________________
119//for (int i=x-1; i<=(x+1); i++)
120//for (int j=y-1; j<=(y+1); j++)
121//if ((conf0[i][j] == 0) && )
122}*/
123
124void cella_diff (int x, int y)
125{bool clockwise=rand()%2 ;
126int aux;
127if (!((conf0[x][y]==0)||(conf0[x+1][y]==0)||(conf0[x][y+1]==0)||(conf0[x+1][y+1]==0)))
128if (clockwise)
129{
130conf1[x][y] = conf0[x][y+1];
131conf1[x][y+1] = conf0[x+1][y+1];
132conf1[x+1][y+1] = conf0[x+1][y];
133conf1[x+1][y] = conf0[x][y];
134}
135else
136{
137conf1[x][y] = conf0[x+1][y] ;
138conf1[x+1][y] = conf0[x+1][y+1];
139conf1[x+1][y+1] = conf0[x][y+1];
140conf1[x][y+1] = conf0[x][y];
141}
142}
143
144void diffus1 ()
145{ for (int i=0; i<d; i+=2)
146for (int j=0; j<d; j+=2)
147cella_diff (i,j);
148}
149
150void diffus2 ()
151{for (int i=1; i<d-1; i+=2)
152for (int j=1; j<d; j+=2)
153cella_diff (i,j);
154}
155
156void aggrega ()
157{for (int i=1; i<d; i++)
158for (int j=1; j<d; j++)
159cella_aggr (i,j);
160}
161
162void transiz ()
163{ if (passi%2==0)diffus1();
164else diffus2();
165// condizione superficie toroidale
166toro();
167copia();
168aggrega();
169toro();
170copia();
171}
172
173int main()
174{// inizializzazione;
175float percvive;// perc = 4
176inizial ();
177allegro_init();
178install_keyboard();
179install_mouse();
180set_gfx_mode( GFX_AUTODETECT_WINDOWED, bSchermo, hSchermo, 0, 0);
181//Indica al computer la modalità grafica che intendiamo usare
182show_mouse(screen);
183//Mostra il mouse sullo schermo
184buffer = create_bitmap(bSchermo, hSchermo);
185// Funzione che crea il buffer dove disegniamo gli elementi
186blu = makecol(0, 128, 255);
187nero = makecol(0, 0, 0);
188bianco = makecol(255,255,255);
189verdescuro = makecol( 0, 128, 50);
190verdechiaro = makecol (0, 255, 128);
191rosso = makecol(255, 0, 0);
192//Regola il colore degli elementi
193while (!key[KEY_ESC])
194{/* funzione di transizione */
195transiz();
196passi++;
197for (int y=0; y<bSchermo; y++)
198for (int x=0; x<hSchermo; x++)
199switch(conf0[x][y])
200{ case -1: putpixel(buffer, x, y, blu); break;
201case 0: putpixel(buffer, x, y, rosso); break;
202case 1: putpixel(buffer, x, y, bianco); break;
203//case 2: putpixel(buffer, x, y, verdechiaro); break;;
204}
205textprintf_ex(buffer,font,0,502,bianco,nero, "iterazioni: %i",passi);
206//textprintf_ex(buffer,font,280,502,bianco,nero, "percentuale vive : %f",percvive); //stampa sul buffer il numero di iterazioni
207blit(buffer,screen,0,0,0,0,bSchermo,hSchermo);
208//stampa (disegna)sullo schermo il buffer d'uscita
209}
210return 0;
211}
212END_OF_MAIN()
-----sig: |
phy1888
Member #16,768
November 2017
|
thank you, can you help me??;D;D; |
beoran
Member #12,636
March 2011
|
What is this program supposed to do and what do you want to change? I dont /nderstand Italian very well... |
phy1888
Member #16,768
November 2017
|
this program shows me how the diffusion of red pairs occurs and how they are united after interacting with other white particles that move. |
|