terça-feira, 4 de outubro de 2016

Atividade 5 - Lançamento balístico + desafio + dados na tela!

Reutilizando as funções MRU e MRUV - e diferenciando claramente as variáveis necessárias - crie uma aplicação que simula lançamentos balísticos (logicamente o tempo é o mesmo para ambos os movimentos simulados)

Bom começamos utilizando as funções de MRU e MRUV. Uma para movimento horizontal e outra vertical, respectivamente. 

float MRUV(float vv, float av, float t){
  float d;
  t=tAtual;
  d=vv*t+av*t*t/2;
  dAtualver=d;
  return (dAtualver);
  }
  
  float MRU(float vh, float t){
  float d;
  t=tempaux;
  d = vh*t;
  dAtualhor=d;
  return (dAtualhor);
  }

As duas funções retornam o cálculo da distância, uma com apenas velocidade e tempo, e a outra com acréscimo da aceleração! Esses dois movimentos ao mesmo tempo causam o lançamento balístico.

Transformando em 60fps: Mudando o frameRate para 60 e incrementar o tempo em +1.0/60.0!! 

DESAFIO:
Simule o quicar de uma bola lançada para a frente e para cima!

Para fazer a bola quicar foi a parte mais complicada para mim. Bom, acrescentei uma condição para sempre que o eixoY for maior que o tamanho da tela, sua nova posição ser o limite da tela menos o raio. Para o movimento repetir é preciso zerar o tempo e para completar a sensação de quicar a variável velver (velocidade vertical) será diminuída até tender a zero! Criei outra variável com mesmo valor de tempo porém ela não é zerada e é usada na função do movimento horizontal para fazer com que ele continue normalmente na horizontal e apenas vá reiniciando o movimento na vertical, quando quica.

Código completo:

float tAtual = 0;
float dAtualhor;
float dAtualver;
float raio=5;
float velver=70;
float velhor=15;
float eixoX;
float eixoY;
float tempaux=tAtual;

void setup(){
  frameRate (60);
  size(600,600);
  background(255);

}

void draw(){
  eixoY=600-dAtualver;
  eixoX=dAtualhor;
  
  background(255);
  mostraMundo();
  
textSize(25);
text("Distância vertical: "+dAtualver, 10, 30); 
text("Distância horizontal: "+dAtualhor, 10, 60);
text("Tempo: "+tempaux, 10, 90); 
  
  println("Distância percorrida na vertical:");
  println(MRUV(velver,-9.8,0),"metros");
  println("Distância percorrida na horizontal:");
  println(MRU(velhor,9.8),"metros");
  println("Tempo decorrido:");
  println(tAtual,"segundos");
  fill (200,2,100);
  ellipse(eixoX,eixoY,raio*2,raio*2);
  tAtual+=1.0/60.0;
  tempaux+=1.0/60.0;
  
if ((eixoY)>600) 
{
eixoY=600-raio;
tAtual=0;
velver=velver/1.5;
}


}

float MRUV(float vv, float av, float t){
  float d;
  t=tAtual;
  d=vv*t+av*t*t/2;
  dAtualver=d;
  return (dAtualver);
  }
  
  float MRU(float vh, float t){
  float d;
  t=tempaux;
  d = vh*t;
  dAtualhor=d;
  return (dAtualhor);
  }
  
  void mostraMundo(){
  for (int i=0 ; i<12 ; i++) {
    line(i*50,0,i*50,600);
    line(0,i*50,600,i*50);
  }
  }

A parte do texto é simples usando a ferramenta text, lembra bastante o já conhecido println, porém você também controla o tamanho da fonte e a posição do eixo x e y que o texto se posicionará.

Acima o gif do resultado!
Comentários
0 Comentários

Nenhum comentário:

Postar um comentário

recent posts