segunda-feira, 28 de abril de 2014

Lançamento balistico utilizando ângulos

Exercício proposto para criação de uma função que receba como parâmetro um ângulo e a velocidade do disparo.

Print de um instante de execução do código


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
int relogio = millis();
int intervalo = 1000;
float dx;
float dy = 600;

float t;

ArrayList pontos = new ArrayList();

void setup()
{
   size(600,600);
  background(100); 
}

void draw()
{
  t = millis()/100; //contador de tempo
  disparoBalistico(70,100);
  desenhaTrajeto(pontos);
  
}


void disparoBalistico(int ang, int velLancamento)
{
  /*
  Essa função funciona a partir da decomposição dos vetores de movimento
  o Vo da formula é o valor velLancamento, passado por parametro.
  O V utilizado no dx é o resultado da decomposição do eixo X do vetor de movimentação
           |  /
V do MRUV  | /  a linha de / = resultante do vetor, ou hipotenusa, responsável pela direção do projétil
           |/___
            Velocidade do MRU
     eixo y = hipotenusa * seno(angulo)
     eixo x = hipotenusa * cos(angulo)     
  */
  background(100);
  float a = -9.8; //declaro a aceleração, uma CONSTANTE.
  float hipo = velLancamento/sin(radians(ang)); // descubro o valor da hipotenusa, necessária para descobrir o eixo X do vetor
  float velFixo = hipo * cos(radians(ang)); //Descubro o eixo X do vetor.
  //A partir daqui é apenas aplicação de formula.
 pontos.add(dx);    //pontos utilizados para a função desenhaTrajeto.
 pontos.add(dy+600);
 dx = velFixo*t;
 dy = (velLancamento*t + (a*t*t/2))*-1;
 pontos.add(dx);
 pontos.add(dy+600);
 ellipse(dx,600 + dy, 30,30);
 
}

void desenhaTrajeto(ArrayList pontos)
{
 for(int i = 3; i < pontos.size(); i+=2)
{
   line((Float)pontos.get(i-3),(Float)pontos.get(i-2),(Float)pontos.get(i-1),(Float)pontos.get(i));
   
} 
}

Nenhum comentário:

Postar um comentário