









Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Enunciado do exercício-programa 3 de 2010
Tipologia: Exercícios
1 / 16
Esta página não é visível na pré-visualização
Não perca as partes importantes!










Departamento de Ciência da Computação IME-USP
Jim Lovell: We just put Sir Isaac Newton in the driver's seat. Apollo 13
O programa espacial norte americano Apollo durou de 1961 a 1975 e seu principal objetivo foi levar humanos a pousar pela primeira vez na Lua. O programa foi concebido durante o governo do Presidente Dwight D. Eisenhower e conduzido pela National Aeronautics and Space Administration (NASA). O programa ganhou um gigantesco impulso depois do discurso do Presidente John F. Kennedy em 25 de maio de 1961 em uma sessão especial para o Congresso dos EUA declarando como objetivo nacional pousar um homem na Lua até o nal da década. Cada uma das naves das missões Apollo contava com uma medida de salvaguarda fazendo parte do plano de vôo. Se por alguma razão os foguetes da nave deixassem de funcionar propriamente, a nave seguiria um caminho que havia sido planejado de tal maneira que fosse possível a nave ser estilingada (slingshot) em volta da Lua em uma trajetória livre de retorno (free-return trajectory), voltando à Terra utilizando apenas as forças gravitacionais da Lua e da Terra.
Em 1968 a missão Apollo 8 foi a primeira a escapar da ação gravitacional da Terra, a primeira a ser capturada e escapar da ação gravitacional de outro corpo celeste e a primeira a retornar à Terra vinda de outro corpo celeste. Este outro corpo celeste era a Lua. Na missão Apollo 8 o caminho da nave foi levemente ajustado por três propulsões curtas que gastaram bem pouco combustível. A primeira propulsão da Apollo 8 colocou-a em órbita elíptica em torno da Lua e a segunda colocou-a em órbita circular. Apollo 8 realizou 10 voltas ao redor da Lua e depois realizou uma terceira propulsão que colocou-a no caminho de volta à Terra (trans earth injection). Essas propulsões e a trajetória de vôo foram planejadas com extrema precisão bem antes da Apollo 8 deixar a Terra.
Apollo 13 foi lançada em 1970. Esperava-se que a sua tripulação fosse a quinta a orbitar e a terceira a pousar na Lua. Após 56 horas do início da missão, uma explosão em um dos tanques de oxigênio desapontou a tripulação pois estes, imediatamente, sa- biam que o pouso na Lua teria que ser cancelado. Em poucos minutos, o desapontamento transformou-se em medo já que eles perceberam que as suas vidas estavam em sério risco. A opção de mudar a trajetória dando meia volta e retornando a Terra foi imediatamente descartada pela NASA pois acreditava-se que a integridade dos motores da nave poderia ter sido comprometida devido à explosão do tanque de oxigênio. Eles não tiveram, por- tanto, outra alternativa além de continuar o vôo até a Lua e voltar a Terra através da trajetória de retorno livre. Devido ao oxigênio que escapou, a trajetória de vôo teve que ser levemente corrigida durante a viagem. Essencialmente, o efeito estilinge ao redor da Lua funcionou como planejado. A sobrevivência da tripulação da Apollo 13 não teria sido possível se não fosse pela medida de salvaguarda do plano de vôo.
A tarefa deste exercício programa^1 será simular e investigar a (versão bidimensional) da trajetória de retorno livre de uma nave sob a ação gravitacional da Terra e da Lua. Essa trajetória é capaz de enviar uma nave à Lua e retorná-la em segurança à Terra sem utilizar os motores depois da propulsão inicial (trans lunar injection).
Atenção, neste exercício-programa utilizaremos quilômetros (km) para medir distân- cias, quilogramas (kg) para medir massa e horas (hr) para medir tempo.
A lei de força mais antiga conhecida é a lei da gravitação universal que Isaac Newton^2 publicou no seu Principia Mathematica [2]. Esta lei exprime as forças de interação entre dois corpos, um corpo de massa m 1 em um ponto P 1 e um corpo de massa m 2 em um ponto P 2 , cujo deslocamento relativo é −→r (^2) , 1 =
P 2 P 1. Ela diz que: −→ F (^2) , 1 =
Gm 1 m 2 r 2 , 1
r ˆ 2 , 1 = −
na qual r 2 , 1 é a distância entre os centros de massa dos corpos e ˆr 2 , 1 = −→r (^2) , 1 /r 2 , 1 é o vetor unitário da direção que vai do corpo 2 ao corpo 1. Em palavras, (1) diz que a magnitude da força gravitacional é proporcional ao produto das massa dos corpos e inversamente proporcional ao quadrado da distância que os separa. A força está dirigida ao longo da
reta que passa pelos centros de massa dos dois corpos e é atrativa se a força
F (^2) , 1 exercida pelo corpo 1 sobre o corpo 2 está dirigida para o corpo 1, em sentido −→r (^2) , 1.
A constante proporcional G que aparece em (1) é uma constante universal, ou seja, é a mesma para quaisquer corpos. Essa constante é chamada constante gravitacional. Seu valor é
G ≈ 8. 65 × 10 −^13 km^3 kg−^1 hr−^2 (2) (^1) Este EP é baseado em uma tarefa da The North Carolina School of Science & Mathematics. (^2) As leis de Newton do movimento é um dos tópicos da disciplina Física I.
Suponha agora que desejemos determinar para cada instante t o vetor posição −→r (t) = (x(t), y(t)) de uma nave que está sob a atração gravitacional da Terra e da Lua. Sabemos que o vetor aceleração instantânea é
−→a = d
−→v
dt
d^2 −→r dt^2
e que seus componentes (ax, ay) são tais que
ax =
dvx dt
d^2 x dt^2
e ay =
dvy dt
d^2 y dt^2
As equações de Newton (7) reduzem o problema de determinar o vetor posição −→r (t) = (x(t), y(t)) para subproblemas unidimensionais. Na próxima seção mostramos como as equações de Newton podem ser usadas para determinarmos computacionalmente uma aproximação de x(t) e, similarmente, de y(t), vx(t) e vy(t).
Sejam A e B dois corpos celestes. O ponto na linha que liga os centros de massas dos dois corpos onde a aceleração gravitacional resultante das forças gravitacionais de A e B é nula é chamado de ponto de Langrange L 1.
L
A B
λ D^ −^ λ
Suponha que o corpo A está na posição de coordenadas cartesianas (xa, ya) e tem massa mA e que o corpo B está na posição de coordenadas cartesianas (xb, yb) e tem massa mB. Se D é a distância entre os centros de massa de A e B, então a distância λ do ponto de Lagrange L 1 ao corpo A é solução da equação
G mA λ^2
G mB (D − λ)^2
Em outras palavras, λ é raiz da equação
(mA − mB ) λ^2 − 2 mAD λ + mAD^2 = 0. (8)
Note que se mA = mB , então a equação acima é de 1o^ grau. Se λ é a raiz de (8), 0 < λ < D, então o ponto de Lagrange L 1 em relação aos corpos A e B é o ponto (x, y) onde
x = xa + λ(xb − xa), e (9) y = ya + λ(yb − ya). (10)
O cálculo do ponto de Lagrange L 1 em relação a dois corpos será uma parte deste exercício programa.
Finalmente, seja A um corpo de massa mA e considere um ponto a distância r do centro de massa de A. A velocidade de escape de A no ponto é a menor velocidade ve a
partir da qual um objeto ou nave nesse ponto e com velocidade inicial ve pode viajar sem nunca voltar ao corpo A devido a sua força gravitacional. Por exemplo, a velocidade de escape da Terra na sua superfície é aproximadamente de 40320 km/hr, cerca de 34 vezes a velocidade do som.
Essa velocidade ve pode ser deduzida a partir da lei de conservação de energia e seu valor é
ve =
2 G mA r
onde G é a constante gravitacional.
Consideremos a equação da segunda lei de Newton na sua versão unidimensional Fx = m ax para um objeto de massa m. No nosso caso a força Fx é a gravitacional e pela lei da gravitação universal é função da posição x, de modo que a equação diferencial para a velocidade se escreve:
ax =
dvx dt
Para obter a posição, recorremos à relação entre posição e velocidade,
vx =
dx dt
Se conhecermos a posição e a velocidade do objeto num certo instante, estas equações nos permitem determinar vx(t) e x(t) em qualquer instante t. No entanto, no caso geral, não podemos resolver estas equações analiticamente. Isso signica que temos que recorrer ao computador através de um método numérico. Esse método deverá ser capaz de estimar a velocidade e posição do objeto num certo instante, dadas, por exemplo, a posição e velocidade x 0 e v 0 em um instante inicial t 0.
O método numérico mais simples para resolver equações diferenciais consiste em subs- tituir as derivadas por razões entre variações da função e da respectiva variável. No caso presente temos que
dvx dt
∆vx ∆t
⇒ ∆vx ≈ ax∆t dx dt
∆x ∆t
⇒ ∆x ≈ vx∆t
A ideia do ∆t é substituir a variável contínua t por uma variável discreta; ou seja, fazemos o t andar de soquinho. Assim, dado um instante t, o instante seguinte é t + ∆t.
Outras denições que serão usadas pelo programa estão presentes no arquivo esqueleto.c.
Passamos a listar essas opções e descrever o comportamento do programa para cada uma dessas opções:
Opção 'a': o programa deve ler, nessa ordem, a:
a1) posição de um corpo celeste em coordenadas cartesianas,
a2) sua massa, e
a3) posição de uma nave em coordenadas cartesianas.
Nesta opção, o programa deve calcular e imprimir o vetor aceleração (A_X,A_Y) da força gravitacional exercida pelo corpo sobre a nave (essencialmente, equação (4)).
Opção 'A': o programa deve ler, nessa ordem, a:
A1) posição de um corpo celeste 1 em coordenadas cartesianas;
A2) massa do corpo celeste 1;
A3) posição de um corpo celeste 2 em coordenadas cartesianas;
A4) massa do corpo celeste 2; e
A5) posição de uma nave em coordenadas cartesianas.
Nesta opção, o programa deve calcular e imprimir o:
Opção 'e': o programa deve ler, nessa ordem, a:
e1) posição de um corpo celeste em coordenadas cartesianas;
e2) massa do corpo celeste;
e3) posição de uma nave em coordenadas cartesianas.
Nesta opção, o programa deve imprimir a distância da nave ao corpo, e calcular e imprimir a velocidade de escape do corpo na posição da nave (equação (11)).
Opção 'L': o programa deve ler, nessa ordem, a:
L1) posição de um corpo celeste 1 em coordenadas cartesianas;
L2) massa do corpo celeste 1;
L3) posição de um corpo celeste 2 em coordenadas cartesianas;
L4) massa do corpo celeste 2;
Nesta opção, o programa deve calcular e imprimir as coordenadas cartesianas do ponto Lagrangeano, ou seja, as coordenadas cartesianas (X,Y) do ponto cujo vetor aceleração (A_X,A_Y) da força gravitacional resultante exercida pelos corpos 1 e 2 é nulo (equações (9) e (10)).
Opção 's': o programa deve ler, nessa ordem, a:
z1) posição inicial de uma nave em coordenadas cartesianas;
z2) as componentes (V_X,V_Y) do vetor velocidade inicial da nave;
z3) tempo máximo de simulação;
z4) o intervalo ∆t entre um instante e o instante seguinte da simulação.
Nesta opção, o programa deve calcular a trajetória da nave, sujeita às forças gravitacionais da Terra e da Lua, começando na posição inicial com velocidade (V_X,V_Y). O instante inicial da simulação é 0 e o instante seguinte a um dado instante t é o instante t + ∆t. A simulação da trajetória deverá terminar quando o tempo de simulação ultrapassar o tempo máximo de simulação ou quando a nave chegar na Terra ou na Lua. Um mapa com as posições da Terra, Lua e nave deve ser mostrado na tela no início e durante a simulação. Durante a simulação, o mapa deve ser mostrado somente quando a nave muda de quadrante, conforme explicação na seção 4.1. Juntamente ao mapa, o programa deve mostrar:
O arquivo de entrada conterá uma lista de opções a serem tratadas pelo programa. A seguir, um exemplo de um arquivo de entrada no qual cada opção, seguido pelos respec- tivos dados conforme especicado anteriormente, aparece uma vez.
a 0 0 5.97e+ 6563 0
0 0 8e+ 100000 0 5e+ 80000 0
e 0 0 5.97e+ 6378 0
0 0 8e+ 100000 0 5e+
s 6563 0 39300 0 0.1 0.
A saída do programa quando executado usando como entrada o arquivo com o conteúdo acima é mostrada a seguir. Os dois mapas na saída foram reduzidos para caber na página. Os mapas produzidos pelo programa são maiores. Os números do tipo float impressos pelo programa devem conter apenas 2 casas após o ponto decimal como, por exemplo, 3.14 e 2.71.
Arquivo de entrada : entrada.txt
Opcao [a] Posicao do corpo : ( 0.00 , 0.00 ) Massa do corpo : 5.97e+ Posicao da nave : ( 6563.00 , 0.00 ) Aceleracao gravitacional : ( -119890.73 , -0.00 )
Tecle
Opcao [A] Posicao do corpo 1 : ( 0.00 , 0.00 ) Massa do corpo 1 : 8.00e+
Posicao do corpo 2 : ( 100000.00 , 0.00 ) Massa do corpo 2 : 5.00e+ Posicao da nave : ( 80000.00 , 0.00 )
Aceleracao gravitacional (corpo 1) : ( -10.81 , -0.00 ) Aceleracao gravitacional (corpo 2) : ( 10.81 , -0.00 ) Aceleracao gravitacional resultante: ( 0.00 , -0.00 )
Tecle
Opcao [e] Posicao do corpo : ( 0.00 , 0.00 ) Massa do corpo : 5.97e+ Posicao da nave : ( 6378.00 , 0.00 ) Distancia da nave ao corpo : 6378. Velocidade de escape : 40240.
Tecle
Opcao [L] Posicao do corpo 1 : ( 0.00 , 0.00 ) Posicao do corpo 2 : ( 100000.00 , 0.00 ) Massa do corpo 1 : 8.00e+ Massa do corpo 2 : 5.00e+ Ponto Lagrangeano : ( 80000.00 , 0.00 )
Tecle
Opcao [s]
+--------------------------------------------------------------------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | TA L | | | | | | | | | | | || || | | | | | | | | | | +--------------------------------------------------------------------------------+
O seu EP deverá implementar e utilizar, obrigatoriamente, as funções especicadas abaixo. O protótipo das funções (tipo de valor de retorno, nome da função, tipo e ordem dos parâmetros) NÃO deve ser alterado. Você pode escrever mais funções se achar coveniente e pode usar qualquer função da biblioteca math.h se julgar necessário.
f1) float distancia(float x1, float y1, float x2, float y2) ;
Recebe as coordenadas (x1,y1) e (x2,y2) de dois pontos. Retorna a distância entre os pontos.
f2) float velocidade_esc(float xA, float yA, float mA, float x, float y) ; Recebe as coordenadas (xA,yA) e a massa mA de um corpo A, e as coordenadas (x,y) de uma nave. Retorna o valor da velocidade de escape do corpo na posição da nave (equação (11)).
f3) void aceleracao_gravitacional(float xA, float yA, float mA, float x, float y, float ax, float ay) ; Recebe as coordenadas (xA,yA) e a massa mA de um corpo A, e as coordenadas (x,y) de uma nave. Devolve em (ax,ay) o vetor aceleração da força gravitacional exercida pelo corpo A sobre a nave (essencialmente, equação (4)).
f4) void aceleracao_resultante(float xA, float yA, float mA, float xB, float yB, float mB, float x, float y, float ax, float ay) ; Recebe as coordenadas (xA,yA) e a massa mA de um corpo A, as coordenadas (xB,yB) e a massa mB de outro corpo B, e as coordenadas (x,y) de uma nave. Devolve em (ax,ay) o vetor aceleração da força gravitacional resultante exercida pelos corpos sobre a nave (essencialmente, equação (6)).
f5) void ponto_L1(float xA, float yA, float mA, float xB, float yB, float mB, float x, float y) ; Recebe as coordenadas (xA,yA) e a massa mA de um corpo A, as coordenadas (xB,yB) e a massa mB de outro corpo B. Devolve em (x,y) as coordenadas cartesianas do ponto Lagrangeano, ou seja, as coordenadas do ponto cujo vetor aceleração da força gravitacional resultante exercida pelos corpos A e B é nula (equações (9) e (10)).
f6) Funções a serem usadas para mostrar a trajetória da nave:
void quadrante(float x, float y, int *i, int *j) ;
Recebe as coordenadas (x,y) de uma nave. Devolve em (i,j) o quadrante corres- pondente a (x,y) no mapa (seção 4.1).
void mostre_dados(float hora, float distancia_percorrida, float x, float y, float vx, float vy, float ax, float ay) ;
Recebe o tempo de simulação hora, a distância distancia_percorrida percorrida pela nave, as coordenadas (x,y) de uma nave, o vetor velocidade (vx,vy) e o vetor aceleração (ax, ay) da nave. Imprime todas essas informações além das distâncias da nave à Terra e à Lua.
Além dessas funções, as seguintes funções que podem ser usadas no seu EP estão no arquivo esqueleto.c que foi fornecido.
F1) int sao_iguais(float x_1, float x_2) ;
Veja descrição na seção 5.
F2) void espere_enter() ;
Função cuja execução termina quando o usuário tecla Enter.
F3) int mostre_mapa(int iT, int jT, int iL, int jL, float x, float y, int *iN, int jN) Recebe o quadrante (iT,jT) da Terra no mapa, o quadrante (iL,jL) da Lua no mapa, as coordenadas atuais (x,y) da nave, e o quadrante (iN, jN) no mapa em que a nave estava no instante anterior da simulação. Se o quadrante em que a nave está atualmente for diferente do quadrante (iN, jN), então a função imprime o mapa na tela e devolve em (iN, *jN) o novo quadrante em que está a nave. Retorna 1 se o mapa é impresso e 0 em caso contrário.
A seguir estão algumas constantes que serão usadas pelo seu programa. Elas já fazem parte do arquivo esquelo.c que foi fornecido.
Constante Notação Valor Massa da Terra MTERRA 5. 97 × 1024 kg Massa de Lua MLUA 7. 35 × 1022 kg Distância da Terra a Lua D 384400 km Constante gravitacional G 8. 65 × 10 −^13 km^3 kg−^1 hr−^2 Raio da Terra RTERRA 6378 km Raio da Lua RLUA 1738 km
ser o comportamento do seu programa em alguma situação, veja como se comporta este executável.
O seu programa não precisa fazer consistência de dados. O pro- grama pode supor que todos os dados lidos (opções, número,... ) estão corretos. Todo exercício programa deve seguir as observações contidas na pá- gina www.ime.usp.br/~mac2166/infoeps, onde estão descritas as diretrizes para forma de entrega do exercício, aspectos importantes na avaliação etc.
[1] Pedro Vieira Alberto, Alguns métodos numéricos para resolver equações de Newnton, http://nautilus.fis.uc.pt/personal/pvalberto/apontamentos/metodos_ode.pdf, Fevereiro 2004.
[2] Herch Moysés Nussenzveig, Curso de Física Básica: 1-Mêcanica, Edgard Blücher,
[3] Hugh D. Young e Roger A. Freedman, Sears e Zemansky's Física I: Mecânica, Addison Wesley, 2003.