Ir para o conteúdo principal
Paca
  • Página inicial
  • Mais
Você acessou como visitante
Acessar
Página inicial
  1. Semestres anteriores
  2. MAC0122 2016
  3. EP8
Tarefa

EP8

Condições de conclusão
Aberto: sexta-feira, 28 out. 2016, 00:00
Vencimento: terça-feira, 8 nov. 2016, 23:55

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ódulo vetor.py; e
  • Astro no módulo astro.py.

No EP8 você utilizará essas classes e escreverá mais duas classes, são elas as classes

  • Turtleship no módulo turtleship.py; e
  • Sistema no módulo sistema.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() e
  • crie_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áximo t_max de simulação e o valor de delta_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 e astro.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 e esqueleto_turtleship.py.

  • Mude o nome dos arquivos:
    • esqueleto_ep8.py para ep8.py;
    • esqueleto_sistema.py para sistema.py; e
    • esqueleto_turtleship.py para turtleship.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ódulo turtleship.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() e crie_lista_turtleships() do módulo ep8.py. Essas funções serão necessárias para você testar a classe Sistema. 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ódulo sistema.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ódulo ep8.py.

  • Altere o nome dos arquivos:
    • ep8.py para NUSP_ep8.py;
    • sistema.py para NUSP_sistema.py; e
    • turtleship.py para NUSP_turtleship.py.
      onde NUSP é 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).

  • console.py console.py
    27 outubro 2016, 19:05 PM
  • esqueleto_ep8.py esqueleto_ep8.py
    27 outubro 2016, 19:05 PM
  • esqueleto_sistema.py esqueleto_sistema.py
    7 novembro 2016, 11:10 AM
  • esqueleto_turtleship.py esqueleto_turtleship.py
    28 outubro 2016, 12:58 PM
Você acessou como visitante (Acessar)
Resumo de retenção de dados
Baixar o aplicativo móvel.
Fornecido por Moodle