segunda-feira, 22 de junho de 2015

Atividade 22

- incluir um gráfico de linha que apresente
a evolução da quantidade de células a cada geração

código:

primeiro estabelece-se a variável para guardar o número de gerações
e dois vetores para guardar os dois mundos.
int numeroGeracao = 1;
int[] mundoAtual = new int[34];
int[] mundoNovo = new int[34];


dentro do setup()
é colocado o frameRate que a animação irá acontecer, o tamanho da tela, a cor do background
e uma condicional que faz com que o vetor mundoAtual receba 1 ou 2 como valor.
void setup()
{
  frameRate(1);
  size(800, 400);
  background(255);
  for(int i = 1; i < 32; i++)
  {
    mundoAtual[i] = (int)random(2);
    //println(mundoAtual[i]);
  }
  
}


dentro do draw()
uma variável para armazenar o número de células
a função mostraMundo() é chamada.
uma condicional que estabelece que o numero de celulas é igual a função cruzaCelulas recebendo o contador i como parâmetro.
se o número de celulas for 2 uma nova geração é criada, se for 1, a geração morre.
usa-se a função Array

copy para copiar o vetor e incrementa-se o número de gerações.
void draw()
{
  int numeroCelulas = 0;
  mostraMundo();
  for(int i = 1; i < 32; i++)
  {
    numeroCelulas = cruzaCelulas(i);
    if(numeroCelulas == 2)
      mundoNovo[i] = 1;
    else
      mundoNovo[i] = 0;
  }
  arrayCopy(mundoNovo, mundoAtual, 34);
  numeroGeracao++;  
}




função mostraMundo()
nessa função tem uma condicional para checar se a geração está viva ou morta.

e cria-se uma variável vivos e desenha-se na tela o gráfico de linhas com as gerações vivas e mortas.
void mostraMundo()
{
  int cont = 0;
  for(int i = 1; i < 32; i++)
  {
    if
    (mundoAtual[i] == 1)
      cont++;
      //ellipse(i * 20, numeroGeracao * 30, 20, 20);
  }
  float vivos = (float)cont/32 * height;
  float mortos = (float)(32-cont)/32 * height;
  println(cont);
  strokeWeight(5);
  stroke(0,255,0);
  line(numeroGeracao*30 , height - vivos, numeroGeracao*30, height);
  stroke(255,255,0);
  line(numeroGeracao*30 + 11, height - mortos, numeroGeracao*30 + 11, height);
}



a função CruzaCelulas() faz a checagem no mundoAtual pra ver se a geração irá viver ou morrer.
int cruzaCelulas(int posicao)
{
  int numeroCelulas = mundoAtual[posicao - 1] + mundoAtual[posicao] + mundoAtual[posicao + 1];
  return numeroCelulas;
}


Resultado:







Nenhum comentário:

Postar um comentário