EP8
EP8 - Ah, gravity . . . - Parte II
``Ah, gravity - thou art a heartless bitch.'',
Dr. Sheldon Cooper MSc, PhD.,
Theoretical physicist,
California Institute of Technology
Objetivos
Neste exercício programa você continuará a praticar um pouco de programação orientada a objetos e trabalhar com tópicos como:
- objetos: referências, clones, mutabilidade;
- classes nativas versus classes definidas pelo usuário;
- atributos de estado e métodos;
- método especial construtor:
__init__()
; - método especial:
__str__()
; - sobrecarga de operadores e os métodos especiais:
__add__()
,__sub__()
,__mul__()
- criação e manipulação de vários objetos de uma mesma classe.
Simulação
Este EP8 simulará o movimento de uma ou mais turtleships em um campo gravitacional gerado por vários astros. Como resultado dessa simulação obteremos imagens como as que estão logo abaixo. Vemos na imagens os rastros produzidos pelo movimentos das turtleships durante o movimento. Como um bônus deste EP, você poderá observar uma ou duas das Leis de Kepler em ação.
Dojo do "andar de soquinho"
O único ponto deste EP7 que utiliza a lei da gravitação universal é o método Astro.aceleracao_gravitacional()
. Na simulação do EP8, o vetor aceleração de cada turtleship será o resultado da ação do campo gravitacional dos astros sobre a turtleship. O Cálculo dessa aceleração será a tarefa realizada pelo método aceleracao_resultante()
da classe Turtleship
. Esses são possivelmente os únicos pontos do EP8 que usam física. O outro ponto chave da simulação utiliza uma ideia bastante intuitiva, o andar de soquinho. Essa ideia também é conhecida como Método de Euler para resolver as equações de Newton. O andar de soquinho estará presente no método Turtleship.mova()
.
Sobre a lei de Newton necessária para escrever o método Turtleship.aceleracao_resultante()
, e sobre ideia de andar de soquinho basta ler o texto que está aqui.
O que você deve fazer
No EP7 você implementou as classes.
Vetor
no módulovetor.py
; eAstro
no móduloastro.py
.
No EP8 você utilizará essas classes e escreverá mais duas classes, são elas as classes
Turtleship
no móduloturtleship.py
; eSistema
no módulosistema.py
.
As especificações dessas classes e seus métodos estão nos arquivos esqueleto_turtleship.py
e esqueleto_sistema.py
.
Você também escreverá duas funções do módulo ep8.py
crie_lista_astros()
ecrie_lista_turtleships()
As especificações dessas funções estão no arquivo esqueleto_ep8.py
.
O EP8 utilizará ainda um módulo console.py
que está totalmente implementado. Não modifique esse módulo.
Arquivo de dados
Quando todo o programa estiver pronto, para executá-lo e obter imagens como as que estão neste enunciado, você necessitará de arquivos com configurações de um sistema de astros e turtleships. Esses arquivos deverão ser fornecidos ao programa. As mensagens exibidas pelo programa no console são como as seguintes.
Digite o nome do arquivo >>> 4t-4a.txt
main(): vou processar os dados em '4t-4a.txt'
main(): peguei os dados em '4t-4a.txt'
main(): vou criar a lista de objetos da classe Astro
main(): lista de objetos da classe Astro criada
main(): vou criar a lista de objetos da classe Turtleship
main(): lista de objetos da classe Turtleship criada
main(): vou criar o objeto da classe Sistema
main(): objeto da classe Sistema criado
main(): vou criar o objeto da classe Console
main(): objeto da classe Console criado
main(): vou começar a simulação
main(): simulação encerrada
Click na janela da animação para fechá-la.
main(): fim do processamento
Alguns arquivos com configurações para testes podem ser copiados daqui
O formato desses arquivos é bem simples. Você precisará saber esse formato se pretende criar as suas próprias imagens com trajetos de turtleships. Uma linha começando com
's'
contém o tempo máximot_max
de simulação e o valor dedelta_t
para o "andar de soquinhos";'a'
contém informações sobre um astro: nome, cor, coordenada x, coordenada y, massa e raio;'t'
contém informações sobre uma turtleship: nome, cor, coordenada x, coordenada y, velocidade x, velocidade y;
Tudo que estiver depois de um '#'
é considerado um comentário. Um exemplo de um arquivo de entrada é:
# início do arquivo com a configuração do sistema a ser simulado
# dados sobre a simulação
s 1000 0.001
# astros: nome, cor, x, y, massa e raio
a Terra blue -192200 0 5.97e+24 6378
a Lua green 192200 0 7.35e+22 1738
a Marte red 0 -192200 6.41e+23 3396
a Mercurio magenta 0 192200 3.30e+23 2439
# turtleship: nome, cor, x, y, v_x e v_y
t Leonardo yellow 100000 0 0 4000
t Raphael red 130000 0 0 3000
t Donatello blue 150900 0 0 2000
t Michelangelo magenta 170000 0 0 3000
# fim do arquivo
Galeria
Você pode usar da sua criatividade e tentar produzir obtidas bonitas. A seguir estão as imagens feitas pelos programas de Christian Kazuyoshi Miyoshi, Joao Loula Guimaraes de Campos, Lucas Rebelo Dal Bello, Mateus Kenji Shimada, Matheus de Souza Ramos, Raul da Silva Souza (duas), Vanessa Araujo Rodrigues.
Roteiro
-
Copie os módulos
vetor.py
eastro.py
que você fez para o EP7 para a sua pasta do EP8. -
Faça o download dos arquivos
console.py
,esqueleto_ep8.py
,esqueleto_sistema.py
eesqueleto_turtleship.py
. - Mude o nome dos arquivos:
esqueleto_ep8.py
paraep8.py
;esqueleto_sistema.py
parasistema.py
; eesqueleto_turtleship.py
paraturtleship.py
.
-
Abra os esqueletos no Spyder ou em qualquer outro editor ou ambiente apropriado para desenvolver programas em Python. Esses serão os arquivos que você deve editar.
-
Leia e preencha o cabeçalho de cada arquivo com o seu nome, nusp, etc. Não modifique o resto do cabeçalho.
-
Saindo do casco: Primeiramente, implemente a classe
Turtleship
do móduloturtleship.py
. Essa classe será usados por todos os outros módulos. Antes de escrever cada método, leia atentamente a especificação do método e os exemplos. Teste cada método separadamente das demais usando o console do Spyder (= Python Shell ou IPython) -
Caminhando na areia: Em seguida, implemente as funções
crie_lista_astros()
ecrie_lista_turtleships()
do móduloep8.py
. Essas funções serão necessárias para você testar a classeSistema
. Antes de escrever essas funções leia atentamente as especificações e os exemplos. Teste cada método separadamente das demais usando o console do Spyder (= Python Shell ou IPython) -
Dominando os mares. Chegou agora a vez de implementar a classe
Sistema
do módulo do módulosistema.py
. Antes de escrever cada método, leia atentamente a especificação do método e os exemplos. -
Um pequeno passo para uma tartaruga, um grande ... Finalmente, após testar cada função e cada método de suas classes com vários exemplos, finalmente você pode testar o EP8 por completo executando a função
main()
do móduloep8.py
. - Altere o nome dos arquivos:
ep8.py
paraNUSP_ep8.py
;sistema.py
paraNUSP_sistema.py
; eturtleship.py
paraNUSP_turtleship.py
.
ondeNUSP
é o seu número USP e entregue esses três arquivos.
-
Não deixe de seguir as Instruções para entrega de EPs.
Agradecimento
Aqui vão os nossos agradecimentos a Wilson Kazuo Mizutani do grupo USPGameDev pelas dicas com a modelagem da simulação. Se você têm interesse em desenvolver jogos, entre em contato com o grupo.
Entrega
A primeira entrega deve ser feita até o dia 8/11 (até 23h55m).
O EP receberá comentários até o dia 10/11.
Uma nova versão poderá ser entregue até o dia 12/11 (até 23h55m).
- 27 outubro 2016, 19:05 PM
- 27 outubro 2016, 19:05 PM
- 7 novembro 2016, 11:10 AM
- 28 outubro 2016, 12:58 PM