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:
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
Postar um comentário