<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://fiscomp.if.ufrgs.br/index.php?action=history&amp;feed=atom&amp;title=Grupo_-_BOIDS%2Fcodigo_BOIDS</id>
	<title>Grupo - BOIDS/codigo BOIDS - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="http://fiscomp.if.ufrgs.br/index.php?action=history&amp;feed=atom&amp;title=Grupo_-_BOIDS%2Fcodigo_BOIDS"/>
	<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo_-_BOIDS/codigo_BOIDS&amp;action=history"/>
	<updated>2026-05-21T13:59:39Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Grupo_-_BOIDS/codigo_BOIDS&amp;diff=2228&amp;oldid=prev</id>
		<title>Alvaroe: Criou página com &#039;&lt;br /&gt;  &lt;source lang=&quot;c&quot;&gt; #include&lt;stdio.h&gt; #include&lt;math.h&gt;               #include&lt;stdlib.h&gt; #include&lt;time.h&gt;  // programa particulas boids para CC periodica.   #define N 300...&#039;</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Grupo_-_BOIDS/codigo_BOIDS&amp;diff=2228&amp;oldid=prev"/>
		<updated>2018-01-25T05:42:24Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;&amp;lt;br /&amp;gt;  &amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt; #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;math.h&amp;gt;               #include&amp;lt;stdlib.h&amp;gt; #include&amp;lt;time.h&amp;gt;  // programa particulas boids para CC periodica.   #define N 300...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include&amp;lt;math.h&amp;gt;              &lt;br /&gt;
#include&amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include&amp;lt;time.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// programa particulas boids para CC periodica. &lt;br /&gt;
&lt;br /&gt;
#define N 300 //numero de particulas&lt;br /&gt;
#define T 2500 //numero de passos&lt;br /&gt;
#define C 0.1 //constante de coesao&lt;br /&gt;
#define S 0.4 // constante de separaçao&lt;br /&gt;
#define ini 1 // valor maximo das componentes da velocidade&lt;br /&gt;
                //valor maximo da velocidade (sqrt(2)*ini)&lt;br /&gt;
#define PI 3.1415926538979 //aprox de pi&lt;br /&gt;
#define I 15&lt;br /&gt;
&lt;br /&gt;
double norm(double x, double y){ //funçao norma&lt;br /&gt;
  return sqrt(x*x + y*y);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
main(){&lt;br /&gt;
  &lt;br /&gt;
  double r[N][2], v[N][2], epsilon=0.00001, R=13, rmin=2, erre=7, dt = 0.1;&lt;br /&gt;
  double randomi=0;&lt;br /&gt;
  double x=0., y=0., vel[N], L=100, vmx=0, vmy=0, vmed=0, vmedl =0;&lt;br /&gt;
  int i=0, j=0, k=0, l=0, m=0, t=0;&lt;br /&gt;
  int cont=0, kont=0; //conta o numero de vizinhos proximos da particula&lt;br /&gt;
  int  vizinhos[N][2]; //nao deixa a velocidade explodir nem tender a 0&lt;br /&gt;
  &lt;br /&gt;
  //**********inicializar particulas (posicao e velocidade)**********//&lt;br /&gt;
  printf(&amp;quot;set terminal gif animate delay 1.0E-5\n&amp;quot;);// Produz arquivo .gif&lt;br /&gt;
  printf(&amp;quot;set output &amp;#039;boidsembar.gif&amp;#039;\n&amp;quot;);            //&lt;br /&gt;
  printf(&amp;quot;set title &amp;#039;Tempo t = 0&amp;#039;\n&amp;quot;);      //&lt;br /&gt;
  printf(&amp;quot;set xrange [0:%lf]\n&amp;quot;, L); // caso rode com |gnuplot aparecem &lt;br /&gt;
  printf(&amp;quot;set yrange [0:%lf]\n&amp;quot;, L); // os graficos.&lt;br /&gt;
  printf(&amp;quot;plot &amp;#039;-&amp;#039; w p pt 10\n&amp;quot;);           //&lt;br /&gt;
  &lt;br /&gt;
  for(i=0;i&amp;lt;N;i++){&lt;br /&gt;
    r[i][0] = L*rand()/RAND_MAX;            //&lt;br /&gt;
    r[i][1] = L*rand()/RAND_MAX;            // Inicializa as pos e vel&lt;br /&gt;
    v[i][0] = ini*(2.*rand()/RAND_MAX - 1); // das particulas aleatoriamente&lt;br /&gt;
    v[i][1] = ini*(2.*rand()/RAND_MAX - 1); //&lt;br /&gt;
    printf(&amp;quot;%lf %lf \n&amp;quot;, r[i][0], r[i][1]); //&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;e \n&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  //**********Dinamica das Particulas**********//&lt;br /&gt;
  &lt;br /&gt;
  do{  //inicio do passo de tempo&lt;br /&gt;
&lt;br /&gt;
    if(t%I == 0){&lt;br /&gt;
      printf(&amp;quot;set title &amp;#039;Tempo t = %.1lf&amp;#039;\n&amp;quot;, t*dt); // &lt;br /&gt;
      printf(&amp;quot;set xrange [0:%lf]\n&amp;quot;,L);              // Caso rode com |gnuplot &lt;br /&gt;
      printf(&amp;quot;set yrange [0:%lf]\n&amp;quot;,L);              // sao gerados os graficos&lt;br /&gt;
      printf(&amp;quot;plot &amp;#039;-&amp;#039; w p pt 10\n&amp;quot;);                // &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    vmed = 0; // velocidade media das particulas&lt;br /&gt;
    &lt;br /&gt;
    for(j=0;j&amp;lt;N;j++){ // dinamica de cada particula&lt;br /&gt;
      &lt;br /&gt;
      cont=0; // contador para coesao das particulass&lt;br /&gt;
      x = 0; // media das particulas vizinhas para coesao&lt;br /&gt;
      y = 0; // media das particulas vizinhas para coesao&lt;br /&gt;
      &lt;br /&gt;
      kont = 0; // contador para media das velocidades&lt;br /&gt;
      vmx = 0; // media das veloc. das particulas&lt;br /&gt;
      vmy = 0; // media das veloc. das particulas&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
      //**********Media da Velocidade dos Vizinhos**********//&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
      for(k=0;k&amp;lt;N;k++){                 // laço para todas ass particulas&lt;br /&gt;
	if(k == j){  // se eh a mesma particula nao faz nada&lt;br /&gt;
	}else if(norm(r[j][1]-r[k][1],r[j][0]-r[k][0])&amp;lt;erre){ &lt;br /&gt;
	  kont++;              // se eh outra particula acrescenta no contador&lt;br /&gt;
	  vmx = vmx + v[k][0]; // acrescenta a velocidade na componente x&lt;br /&gt;
	  vmy = vmy + v[k][1]; // acrescenta a velocidade na componente y&lt;br /&gt;
	}&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      if(kont &amp;gt; 1){&lt;br /&gt;
	v[j][0] = vmx/kont; // media com peso M para a vel.&lt;br /&gt;
	v[j][1] = vmy/kont; // dos vizinhos e a propria&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
      //**********Coesao Entre Particulas e CM**********//&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
      for(m=0;m&amp;lt;N;m++){ // laço das particulas &lt;br /&gt;
	if(norm(r[j][1]-r[m][1],r[j][0]-r[m][0])&amp;lt;R){// se as particulas tiverem&lt;br /&gt;
	                                            // a uma distancia menor q&lt;br /&gt;
	                                            // &amp;quot;R&amp;quot;&lt;br /&gt;
	  cont++;          // acrescenta no contador &lt;br /&gt;
	  x = x + r[m][0]; // acrescenta na posicao das particulas na comp. x&lt;br /&gt;
	  y = y + r[m][1]; // acrescenta na posicao das particulas na comp. y&lt;br /&gt;
	}	 &lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      if(cont&amp;gt;1){ // se contador for cont &amp;gt; 1&lt;br /&gt;
	x = x/cont;     // media aritmetica na componente x       &lt;br /&gt;
	y = y/cont;     // media aritmetica a componente y&lt;br /&gt;
	&lt;br /&gt;
	v[j][0] = v[j][0] - C*(r[j][0] - x)/L; // atualiza velocidade c pote-&lt;br /&gt;
	                                       // ncial de mola na componente x&lt;br /&gt;
	v[j][1] = v[j][1] - C*(r[j][1] - y)/L; // atualiza velocidade c pote- &lt;br /&gt;
      }                                        // ncial de mola na componente y&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
      //**********Separacao Entre Particulas**********//&lt;br /&gt;
      &lt;br /&gt;
      for(l=0;l&amp;lt;N;l++){ //laço para particulas&lt;br /&gt;
	if(l==j){  // se a particula for ela mesma nao faz nada &lt;br /&gt;
	  &lt;br /&gt;
	}else{     // se nao é ela entao&lt;br /&gt;
	  &lt;br /&gt;
	  if(norm(r[j][0]-r[l][0],r[j][1]-r[l][1])&amp;lt;rmin){ // se as particulas estao a uma distancia menor que  &amp;quot;rmin&amp;quot;&lt;br /&gt;
	    v[j][0] = v[j][0] + S*(r[j][0] - r[l][0])/pow(norm(r[l][0]-r[j][0],r[l][1]-r[j][1]),2)/L; // Atualiza velocidade c potencial analogo ao gravitacional&lt;br /&gt;
	                // na componente x&lt;br /&gt;
	    v[j][1] = v[j][1] + S*(r[j][1] - r[l][1])/pow(norm(r[l][0]-r[j][0],r[l][1]-r[j][1]),2)/L; // Atualiza velocidade c potencial analogo ao gravitacional&lt;br /&gt;
      	                // na componente y&lt;br /&gt;
	  }&lt;br /&gt;
	}&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
      //**********Ruido**********//&lt;br /&gt;
&lt;br /&gt;
      &lt;br /&gt;
      if(rand()%2 == 0){ // criterio para decidir a fase&lt;br /&gt;
	randomi = - rand()/RAND_MAX; // fase&lt;br /&gt;
      }else{&lt;br /&gt;
	randomi = rand()/RAND_MAX; // fase&lt;br /&gt;
      }&lt;br /&gt;
      v[j][0] = cos(PI*randomi)*v[j][0] - sin(PI*randomi)*v[j][1];  // rotaçao&lt;br /&gt;
      v[j][1] = sin(PI*randomi)*v[j][0] + cos(PI*randomi)*v[j][1]; // rotaçao&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
      //**********Passo das particulas com CC periodica**********//&lt;br /&gt;
      &lt;br /&gt;
      if(L-r[j][0] &amp;lt; epsilon){ // final do dominio na componente x &lt;br /&gt;
	r[j][0] = L - r[j][0]; // recomeça no inicio do dominio em x &lt;br /&gt;
      }else if(r[j][0] &amp;lt; 0){    // inicio do dominio na coomponente x&lt;br /&gt;
	r[j][0] =  L + r[j][0]; // recomeça no finaldo dominio em x&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      r[j][0] = r[j][0] + v[j][0]*dt; // atualiza a posiçao da particula em x&lt;br /&gt;
       &lt;br /&gt;
      if(L-r[j][1] &amp;lt; epsilon){  // final do dominio em y&lt;br /&gt;
	r[j][1] =  L - r[j][1]; // recomeça no inicio do dominio em y&lt;br /&gt;
      }else if(r[j][1] &amp;lt; 0){   // inicio do dominio em y&lt;br /&gt;
	r[j][1] = L + r[j][1]; // recomeça no final do dominio em y&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      r[j][1] = r[j][1] + v[j][1]*dt; // atualiza a posiçao da particula em y&lt;br /&gt;
&lt;br /&gt;
      if(t%I == 0){&lt;br /&gt;
	printf(&amp;quot;%lf %lf \n&amp;quot;, r[j][0], r[j][1]); // imprime a posiçao da particula&lt;br /&gt;
      }&lt;br /&gt;
      vmed = vmed + norm(v[j][0],v[j][1]); // contador para velocidade media&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if(t%I == 0){&lt;br /&gt;
      printf(&amp;quot;e\n&amp;quot;); // final do grafico para |gnuplot &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    vmedl = vmed/N; // velocidade media no tempo t&lt;br /&gt;
    //printf(&amp;quot;%lf %lf\n&amp;quot;, t*dt, vmed);&lt;br /&gt;
    t++; // contador para o tempo (numero de passos)&lt;br /&gt;
  }while(t&amp;lt;T);&lt;br /&gt;
  &lt;br /&gt;
  printf(&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alvaroe</name></author>
	</entry>
</feed>