Exercício 5 - Lançamento Balístico

                Neste exercício temos q alterar a aplicação de lançamento balístico para recálculo a
cada 0,1 segundo (= 10 fps), porém mantendo o tempo real. No código original, o frameRate era 1 e o acréscimo da variável tempo também era 1, se aumentarmos o fps para 10 quisermos manter o tempo real temos q alterar o o acréscimo de tempo para 0,1 , mas porque isso tem que ser feito?
                Bom, o frameRate significa taxa de quadros ou taxa de amostragem, por exemplo se colocar frameRate(30); o processing vai executar a uma taxa de 30 fps(em um segundo executar 30 quadros);
             
               Para ficar compatível com o tempo real um segundo no programa será um segundo real. e a lógica matemática para as proporções de fps e tempo real é:
           
              frameRate = 1/tAtual


               No ponto de vista matemática essas variáveis são inversamente proporcionais ou seja, quanto maior um valor, menor será o outro proporcionalmente.


               Segue o código modificado:

//Lançamento Balístico

float tAtual = 0 ;
int vHorizontal = 30;
float dHorizontal;
int vVertical = 100;
float dVertical;
float a = -10;
void setup() {
  size(600, 600);
  frameRate(10);
  /*o frameRate sempre será inversamente proporcional
   ao tempo frameRate = 1/tAtual para que continue com o tempo real*/

  background(255);
}

float MRU(int v, float t) {//Movimento Retilíneo Uniforme
  float d;
  d = v*t;
  return(d);
}

float MRUV(int v, float t, float a) {//Movimento Retilíneo Uniformemente Variado
  float d;
  d = v*t + a*t*t/2 ;
  return(d);
}

void mostraGrade() {//Grade de Fundo com linhas horizontais e verticais
  for (int i = 0; i < 12; i++) {
    line(i*50, 0, i*50, 600);
    line(0, i*50, 600, i*50);
  }
}
void draw() {//Usar o MRU e o MRUV para simular um lançamento balístico

  dHorizontal = MRU(vHorizontal, tAtual); 
  dVertical = MRUV(vVertical, tAtual, a);
  ellipse(dHorizontal, width-dVertical, 10, 10);
  /*dHorizontal será a posição x da ellipse 
   e o y será width- o dVertical para que ocorra a simulação*/

  println(tAtual, dHorizontal, dVertical);
  tAtual=tAtual + 0.1;
  mostraGrade();
}


                






               No código, o frameRate é 10 e o tAtual acrescenta 0.1, se quisermos deixar as coisas fluindo mais suavemente aumentando o frameRate para 20,por exemplo, fazendo os cálculos: 

          20 = 1/tAtual
       tAtual = 0.2
  
o tAtual estaria acrescentando 0.2;

Download do arquivo:Lançamento Balístico








              

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