terça-feira, 8 de abril de 2014

Lançamento Oblíquo

Em um lançamento oblíquo o móvel se deslocará para a frente em uma trajetória que vai até uma altura máxima e depois volta a descer, formando uma trajetória parabólica.




Para analisar o lançamento oblíquo é necessário considerá-lo como resultante de outros dois movimentos, um MRU na Horizontal e um MRUV na Vertical.

Na simulação  realizada são fornecidos dois valores, o ângulo e velocidade inicial . Através destes valores é possível calcular a velocidade inicial dos dois movimento, que pode ser encontrada através das equações abaixo:

v0X = v0 * cos(angulo)   e  v0Y = v0 * sin(angulo);

Abaixo está o código implementado:



int relogio;
int intervalo=100;


//Váriaveis do Projétil
float dVert =height-1;
float dHoriz =1;

float angulo = 60;

float v0 = 100;
float v0X;
float v0Y;

float t = 0;
float a = -9.8;


//Variáveis do Alvo
float posXRect = 420;
float posYRect = 310;
float largRect = 50;
float altRect = 50;

void setup(){
  relogio=millis();
  size(700,700);
  
  //Cálculo da velocidade inicial nas direções
  //horizontal e vertical
  v0X = cos(radians(angulo)) * v0;
  v0Y = sin(radians(angulo)) * v0;

}

void draw(){

  if (millis() > relogio+intervalo){
    relogio=millis();

    lancBalist();
    t=t+0.1;
  }    
  
}

void lancBalist(){
    dHoriz = v0X * t;  //deslocamento horizontal(MRU)
    dVert = (v0Y * t) + a*(t*t)/2;//deslocamento Vertical(MRUV)
     
    background(255);
    desenhaGrade();
    mostraInfo();
    ellipse(dHoriz, height-dVert, 25, 25);
    
    
    //teste colisão sentido horizontal
    if((dHoriz+12.5 >= posXRect) && (dHoriz-12.5<=posXRect+largRect)){
        //teste colisão sentido vertical
        if((height-dVert >= posYRect) && (height-dVert<=posYRect + altRect) ){
        text("Colidiu",320, 310);
        fill(255, 0, 0);
        }
    }
}


void desenhaGrade(){
  for(int i = 0; i<=width; i+=100){
    text(height-i,0, i-5);
    text(i,i+5, height); 
    line(i, 0, i, height);
    line(0, i, width, i);
  }
  rect(posXRect, posYRect , largRect, altRect);
}

void mostraInfo(){
  textSize(10);
  fill(0);
  text("Deslocamento Vertical:" + dVert  +
       "\nDeslocamento Horizontal: "+ dHoriz+
       "\nVelocidade Vertical:" + (v0Y + a * t) +
       "\nVelocidade Horizontal: "+ v0X +
       "\nTempo: "+ t , width/2+10,20); 
}




Nenhum comentário:

Postar um comentário