void generationPar(int N,IplImage *img,IplImage *Logo){ int i; srand(time(NULL)); key=alocavd(NWB); // On génère aléatoirement les clefs ( entre 0 et 0,25 ) for(i=0;i<NWB;i++) key[i]=(((double)rand()/(RAND_MAX))/4); logoToBin (Logo); // On convertie le logo en binaires, ce sera le message à tatouer if ((KEY=fopen("Resultat/key.txt","w"))==NULL){ printf("Erreur ouverture fichier.\n"); exit (EXIT_FAILURE); } for (i=0;i<NWB;i++) fprintf(KEY,"%f\n",key[i]); fclose (KEY); }
void opiniao(int n, no **rede, int T, double semente, double J, double epsilon, double q, FILE *out) { // --------------------------------------------------- // Aqui é a parte da simulação da dinâmica de opinião. // --------------------------------------------------- int t=0, i; // passo monte-carlo e iterador de sítios da rede int *k, *s; // vetor de conectividade e com o estado dos sitios; double *h, prob, rho=0; // campo local de cada sítio e taca de transição no *p; // iterador de sítios da re // Iniciando a galera s=alocavi(n); h=alocavd(n); k=grau_vertices(rede,n); srand(semente); // Estado inicial aleatório for(i=0;i<n;i++) s[i]=rand()%2; for(i=0;i<n;i++) rho+=s[i]; rho/=((double)n); // Primeiro ponto na saida fprintf(out, "%d %lf\n", t, rho); // O monte-carlo começa aqui for(t=0;t<T;t++) { rho=0; // Calcular o vetor h dos sítios for(i=0;i<n;i++) { for(p=rede[i]->prox;p!=NULL;p=p->prox) h[i]+=s[p->rotulo]; h[i]=h[i]/(double)k[i]; } // Atualiza os sítios for(i=0;i<n;i++) { prob=rand()/(double)RAND_MAX; if(prob<tau(J,epsilon,q,h[i])) { if(s[i]==0) s[i]=1; } else if(s[i]==1) s[i]=0; } // Calcula a densidade for(i=0;i<n;i++) rho+=s[i]; rho/=((double)n); // Imprime saída fprintf(out, "%d %lf\n", t, rho); } free(s); free(h); free(k); }