Funções
Trajectória de Projéctil
DI/FCT/UNL
1º Semestre 2004/2005
1
Trajectória Óptima de Projéctil
• O cálculo de uma trajectória pode ser feito por simulação de forma
semelhante à da queda de um corpo (será visto mais à frente).
• Podendo-se calcular várias trajectórias, coloca-se muitas vezes a
questão de saber qual a “melhor” de entre elas.
• Naturalmente a noção de melhor tem de ser precisada (maior
alcance, maior velocidade no solo, mais alta???).
• Vamos determinar qual a trajectória com maior alcance.
Entrada
Velocidade Inicial
Coeficiente de Atrito
Resultados
Trajectória
“Óptima”
de Projéctil
Alcance Máximo
2
Trajectória Óptima de Projéctil
• A forma mais simples de determinar a melhor trajectória, é testar
as várias possíveis e escolher a melhor.
• Sendo necessário calcular várias trajectórias, é conveniente
abstrair todo o cálculo da trajectória numa função, cujos
detalhes de implementação podem ser estudados posteriormente.
• Esta forma de proceder, tem muitas vantagens, já que permite:
– Estruturar um programa nos seus componentes básicos
– Reutilizar esses componentes básicos noutros programas
• Vamos pois considerar uma função, alcance, que corresponde ao
alcance de um projéctil lançado inicialmente com velocidade vi e
ângulo de disparo, alfa, num meio com coeficiente de atrito, ka
alcance(vi, alfa, ka)
3
Programas e Funções
A utilização desta função torna o programa trivial:
% inicialização de variáveis
entra vi;
entra ka;
dist  0;
% ciclo de geração e teste
para alfa de 0 a 90 fazer
x  alcance(vi,alfa,ka); % x evita 2
se x > dist então
% chamadas de
dist  x;
% alcance!
fim se; se alcance(vi,alfa,ka) > dist
fim para;
então dist  alcance(vi,alfa,ka)
% apresentação de resultados
sai dist
4
Especificação da Função
A função que foi abstraída, alcance, deverá determinar, com
base na situação inicial (velocidade e ângulo inicial do
projéctil), e para um determinado coeficiente de atrito, a
distância percorrida, pelo projéctil.
Existe pois uma correspondência óbvia entre funções e
programas
Entrada
Velocidade Inicial
Ângulo Inicial
Coeficiente deAtrito
Resultados
Algoritmo de
Trajectória
de Projéctil
Distância percorrida
5
Tipos de Dados da Função Alcance
Os valores iniciais de vi, alfa e ka são dados como parâmetros de
entrada da função (dt pode ser fixado).
A partir de vi e alfa, são calculados os valores iniciais das
velocidades, vx e vy. Como posição inicial arbitra-se o ponto (0,0).
Se se pretenderem gráficos para a posição (em coordenadas x, y) é
conveniente manter as posições por onde passa o projéctil num
conjunto de vectores T, X, Y. Caso contrário serão representados
por variáveis t, x e y respectivamente.
Os valores das velocidades e das acelerações ao longo do tempo,
não se pretendendo calcular os seus gráficos podem ser
representados por variáveis vx e vy, ax e ay que representam os
valores correntes destas grandezas.
6
Trajectória de Projéctil - Bases Físicas
• A trajectória de um projéctil é uma generalização da queda de
corpos em que se têm de considerar 2 dimensões para o
movimento vertical (y) e horizontal (x) e não apenas vertical.
• Todas as grandezas de interesse para o movimento, posição,
velocidade e aceleração, devem pois ser definidas nestas duas
dimensões.
• Por exemplo, a velocidade, pode ser decomposta nas suas duas
componentes (regra do paralelograo)
v
vy
θ
v2 = vx2 + vy2 ; Θ = atan(vy/vx)
vx = v  cos Θ ; vy = v  sin Θ
vx
7
Trajectória de Projéctil - Bases Físicas
• Na horizontal, só existe uma causa de aceleração, provocada
pelo atrito, que consideramos proporcional, e oposta, à
velocidade:
ax = - ka  vx
• Na vertical, há que considerar a aceleração da gravidade para
além da provocada pelo atrito. Temos pois, como na queda dos
corpos:
ay = - ka  vy - g
Condições iniciais
• Tipicamente, estamos interessados em determinar a trajectória de
um projéctil quando a este é lançado com uma determinada
velocidade inicial vi num ângulo θ0
8
Aceleração, Velocidade e Posição
Tal como no problema da queda dos corpos, podemos considerar
as seguintes aproximações (em cada uma das dimensões):
x(t+dt)  x(t) + vx(t)  dt
vx(t+dt)  vx(t) + ax(t)  dt
y(t+dt)  y(t) + vy(t)  dt
vy(t+dt)  vy(t) + ay(t)  dt
sendo a aceleração do projéctil dada por:
ax = - ka  vx
ay = - ka  vy - g
9
Estrutura do Algoritmo
Estamos agora em condições de especificar o algoritmo para
simulação da trajectória de um projéctil, que como
habitualmente pode ser decomposto em 3 “componentes”
1. Inicialização de Variáveis
2. Ciclo de Simulação da Queda
3. Apresentação de Resultados
Entrada
Velocidade Inicial
Ângulo Inicial
Coeficiente deAtrito
Resultados
Algoritmo de
Trajectória
de Projéctil
Distância percorrida
10
1. Inicialização de Variáveis
função alcance(vi, alfa, ka)
% vi, alfa e ka são dados de entrada
% alcance é o valor final
alfa  alfa*2/360;
dt 0.01;
g  9.8;
t  0;
x  0;
y  0;
vx  vicos(alfa);
vy  visin(alfa);
ax  -kavx ;
ay  -kavy - g;
%
%
%
%
%
%
%
%
%
%
Ângulo em Radianos
Intervalo de tempo
Aceleração da Gravidade
Valor iniciais do tempo
Valor iniciais do x
Valor iniciais do y
valores correntes de vx e vy
inicializados com vi
valores correntes de ax e ay
inicializados com vs iniciais
11
2. Ciclo de Simulação
• Os valores da posição, velocidade e aceleração vão sendo
calculados nas sucessivas iterações do ciclo de simulação.
enquanto y >= 0 fazer
t  t + dt;
x  x + vxdt;
y  y + vydt;
vx  vx + axdt;
vy  vy + aydt;
ax  -kavx;
ay  -kavy - g;
fim enquanto;
12
3. Apresentação de Resultados
• O resultado que se pretende apresentar é o alcance do projéctil.
• Como a função está definida com o nome alcance, deverá ser
atribuído a uma “variável” com esse nome o valor final de x,
que representa o alcance do projéctil.
alcance  x
• Na realidade, não existe nenhuma variável com esse nome (a
variável existe no programa que chama a função). A atribuição
acima é apenas a forma de apresentar o resultado.
13
Algoritmo Completo – Programa Principal
% Inicialização de Variáveis
entra vi;
entra ka;
dist  0;
% Ciclo de Geração e Teste
para alfa de 0 a 90 fazer
x  alcance (vi,alfa,ka);
se x > dist então
dist  x;
fim se;
fim para;
% Apresentação de Resultados
sai dist
14
Algoritmo Completo – Função Alcance
função alcance(vi, alfa,
alfa  alfa*2/360;
dt 0.01;
g  9.8;
t  0; x  0; y  0;
vx  vicos(alfa);
vy  visin(alfa);
ax  -kavx ;
ay  -kavy - g;
enquanto y >= 0 fazer
t  t + dt;
x  x + vxdt;
y
vx  vx + axdt; vy
ax  -kavx;
ay
fim enquanto;
alcance  x;
fim função;
ka)
% Ângulo em Radianos
% Intervalo de tempo
% Aceleração da Gravidade
% Valores iniciais de t, x e y
% Valores correntes de vx e vy
% inicializados com vi
% valores correntes de ax e ay
% inicializados com vs iniciais
 y + vydt;
 vy + aydt;
 -kavy - g;
15
Programa Octave
• Em Octave, o programa e a função são muito semelhantes aos
apresentados em pseudo-código.
• No entanto eles devem ser escritos em dois ficheiros m (“m
files”) distintos, que devem residir na mesma directoria (a
menos que se utilizem instruções de alteração da directoria
corrente).
• O nome do ficheiro onde uma função é definida deve ter o
nome dessa função.
• Por exemplo, a função alcance deverá ser definida num
ficheiro com o nome “alcance.m”.
• De notar que a função pode ser invocada a partir de qualquer
ficheiro e mesmo do terminal.
16
Programa Octave
O programa principal, maior_alcance, guardado no
ficheiro “maior_alcance.m” chama a função alcance.
vi
ka
= input("Qual a velocidade inicial (em m/s) ? ");
= input("
e o coeficiente de atrito (1/s) ? ");
dist = 0;
for alfa = 0:90
x = alcance(vi,alfa,ka);
if x > dist
dist = x;
endif;
endfor;
disp(" O alcance máximo (em metros) é de "),
disp(dist)
17
Função Octave
A função alcance é guardada no ficheiro “alcance.m”, que
começa com a declaração de função.
function a = alcance(vi, alfa, ka)
dt = 0.01; g = 9.8 ;
t = 0; x = 0; y = 0;
vx = vi*cos(alfa*pi/180) ; vy = vi*sin(alfa*pi/180);
ax = - ka * vx
; ay = -g - ka * vy;
while y >= 0
t = t + dt;
x = x + vx * dt
; y = y + vy * dt;
vx = vx + ax * dt
; vy = vy + ay * dt;
ax = - ka * vx
; ay = -g - ka * vy;
endwhile;
a = x;
endfunction;
18
Programa Octave
• O programa pode ser testado com vários valores para os
diferentes parâmetros. Por exemplo
Nenhum atrito
• vi = 30;
ka = 0.0
Pouco atrito
• vi = 30;
ka = 0.2
Muito atrito
• vi = 30;
ka = 2.0
• De notar que embora se saiba o alcance máximo, o programa
apresentado não nos indica para que ângulo de disparo ele é
atingido. Para esse efeito basta reformular um pouco o
programa, para nos devolver esse ângulo.
19
Programa Octave
vi
ka
= input("Qual a velocidade inicial (em m/s) ? ");
= input("
e o coeficiente de atrito (1/s) ? ");
dist = 0;
angulo = 0;
for alfa = 0:90
x = alcance(vi,alfa,ka);
if x > dist
dist = x;
angulo = alfa;
end;
end;
disp(" O alcance máximo (em metros) é de "),
disp(dist)
disp(" com um disparo num ângulo (graus) de "),
disp(angulo)
20
Programa Octave
• No entanto, existem várias características da trajectória que
ficaram abstraídas na computação da função e que não são
acessíveis ao utilizador, tais como:
– A altura atingida pelo projéctil
– O tempo que demora a atingir essa altura
– O tempo total da trajectória
– A velocidade com que o projéctil atingiu o solo
– A aceleração com que o projéctil atingiu o solo,
– ...
• Para obter essas características há que reformular um pouco a
função e permitir que ela “devolva” mais do que um valor.
21
Download

Trajectória de Projéctil