Exercicio 19 - Cronômetro

Neste exercício irei fazer um algoritmo usando a função millis() do processing para simular um cronômetro, apenas com o ponteiro dos segundos. Para isso foi necessário utilizar a função que troca as coordenadas polares por cartesianas,aprendido em sala:
    
float[] polar_cartesiano(float ang, float r){
  float[] posL = new float[2];
    posL[0] = r*cos(ang);
    posL[1] = r*sin(ang);
    return posL;
}       
Também será necessário a função millis() do processing, para isso atribuí a uma variável m: 
 
  m = millis()-start; 
  s=m/1000; //transformar milisegundos em segundos
 
Outro ponto essencial para o funcionamento do programa é o valor do angulo do ponteiro, para isso determino que a cada segundo somo o angulo do ponteiro a 6° graus:
 
  angulo =((2*PI)/60)*s-PI/2;  //ajuste de angulo a cada segundo começando peloa posição 270°
 
Para deixar o programa mais dinâmico, determinei um reinicio caso o usuário pressione a tecla Enter, e como a função millis() não pode ser resetada tive que fazer de outra forma, criando uma variável start , caso a tecla Enter seja pressionada start=millis():
 
m = millis()-start; 
void keyPressed() {
 if (keyCode == ENTER) {
  // resetar programa
  start=millis();
 }


Segue o código completo com a parte visual:

float angulo;
float angulo2;
int start;
int s;
int m;
float[] pos = new float[2];
float[] num = new float[2]; //vetor para determinar posições x e y dos numeros do cronometro

void setup(){
 size(400,500); 
frameRate(60);
textSize(25);
start = millis(); //funcao para poder reiniciar o programa
}
//converter de polar para cartesiano
float[] polar_cartesiano(float ang, float r){
  float[] posL = new float[2];
    posL[0] = r*cos(ang);
    posL[1] = r*sin(ang);
    return posL;
}
//numeros do cronometro de 1 a 12
void n_relogio(){ 
  angulo2= (3*PI/2);
  for (int i=1;i<=12;i++){
    angulo2 += (2*PI)/12; 
    if (i>=10){
    num = polar_cartesiano(angulo2-0.05,120);
    }else{
      num = polar_cartesiano(angulo2,120);
    }
    fill(0);
    text(i,width/2+num[0]-10,height/2+num[1]+10);   
  }
}
void draw(){
  background(255);
  
  m = millis()-start; 
  s=m/1000; //transformar milisegundos em segundos
  angulo =((2*PI)/60)*s-PI/2;  //ajuste de angulo a cada segundo começando peloa posição 270°
  pos = polar_cartesiano(angulo,100); 
  noStroke();
  fill(50,100,130);
  ellipse(width/2,height/2,320,320);
  fill(230,220,210); 
  ellipse(width/2,height/2,280,280);
  stroke(0);
  strokeWeight(4);
  line(width/2,height/2,width/2+pos[0],height/2+pos[1]);
  n_relogio();  
  //textos na tela
  text("Pressione ENTER para reiniciar",10,20);
  text(m+" ms",10,80);
  text(int(s)+" s",10,130);
  
}
void keyPressed() {
 if (keyCode == ENTER) {
  // resetar programa
  start=millis();
 }
}
Programa utilizando processing.js:

Comentários

Postagens mais visitadas deste blog

Exercício 6 - Bandeira do Brasil

Exercício 10 - Jogo do Pong

Execício 8 - Sensor de distância