TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Trabalho Pratico 1

Monografias: Trabalho Pratico 1. Pesquise 861.000+ trabalhos acadêmicos

Por:   •  20/5/2014  •  1.192 Palavras (5 Páginas)  •  448 Visualizações

Página 1 de 5

1. INTRODUÇÃO

Este trabalho tem por objetivo aprimorar os conhecimentos já utilizados anteriormente no trabalho prático 0 (TP0). A primeira questão do trabalho consiste na implementação do código utilizado no TP0, de modo que as partículas nele contidas colidam entre si. Já na segunda questão o código enviado pelo professor realiza a ordenação de vetores com vários métodos que serão estudados no curso, a implementação desse código consistia em fazer a contagem de quantas comparações e trocas eram feitas em cada método de ordenação.

2. DESENVOLVIMENTO

2.1 Relatório (Questão 1 - Colisão de Partículas)

Foi criada uma função testa_colisao para retornar o resultado da colisão, em booleano, ou seja, Verdadeiro ou Falso. Para isso foi criado uma variável que recebia a diferença entre o valor x e y de duas partículas distintas, em seguida calculada a distância entre o raio das mesmas. Depois é criada uma comparação retornando verdadeiro ou falso se a distância é menor ou maior que a soma dos raios.

bool Particula::testa_colisao(Particula& p)

{

double dx = x()-p.x();

double dy = y()-p.y();

double dist = sqrt(dx*dx+dy*dy);

return dist <= r()+p.r();

}

O código abaixo faz com que as partículas colidam entre si, caso o teste de colisão seja verdadeira.

void Particula::colide(Particula& p)

{

double vx = p.x() - x();

double vy = p.y() - y();

Normaliza as velocidades.

normaliza(vx,vy);

Modifica a direçao de outra partícula.

p.m_vx += vx;

p.m_vy += vy;

Normaliza para um lado.

normaliza(p.m_vx,p.m_vy);

Define a Direção das partículas.

m_vx -= vx;

m_vy -= vy;

Normaliza para o outro.

normaliza(m_vx,m_vy);

while(testa_colisao(p)) //esse pedaço é de Wallace

{

double a = sqrt(vx*vx + vy*vy);

m_vx/=sqrt(a);

m_vy/=sqrt(a);

andar(); // ... Andam até não colidir mais

p.andar(); // ... Andam até não colidir mais

}

Em canvas.cpp foram criadas as variáveis p1, que faz referência a partícula[i], e p2, que faz referência à particula[j], a variável j, por sua vez, é criada para criar um loop ond para cada particula[i] será rodado um “n”.

Particula& p1 = m_particulas[i];

for(int j=0; j<n; ++j)

{

if(i==j) continue;

Particula& p2 = m_particulas[j];

if(p1.testa_colisao(p2))

{

p1.colide(p2);

}

No cabeçalho particula.h, foram criadas funções para testar a colisão, fazerem as partículas colidirem e normalizar o sentido das partículas.

bool testa_colisao(Particula& p);

void colide(Particula& p);

void normaliza(double &vx, double &vy);

2.2 Relatório (Questão 2 - Contagem e Comparação dos Métodos de Ordenação)

Para a implementação do código foi criada duas variáveis denominadas troca e compara que foram igualadas a zero, e posteriormente inseridas nas funções contidas no arquivo canvas.cpp, que realizavam os métodos de ordenação. Essas variáveis nos loop de repetição e no If, sucessivamente em cada método sendo que essas variáveis funcionavam como contador para cada comparação e cada troca realizada por cada método, sendo que em alguns métodos não eram necessários a inicialização destas variáveis sendo que o método apresentava uma função recursiva, por isso estas variáveis era, passadas por referencias.

int partition(int l, int r, int &compara, int &troca);

void merge(int l, int m, int r,int &compara, int &troca);

Sendo que toda alteração feita nas funções eram modificadas no arquivo canvas.h afim de que pertencessem a mesma classe, ao fim do programa para imprimir o resultado de forma gráfica foi necessário pesquisar na internet segundo orientação do aluno Luciano que nos auxiliou na implementação do código uma função do própio qt (QMessageBox msgBox; msgBox.setText(msgcomparar); msgBox.exec();), além disso foi preciso inserir outra

...

Baixar como (para membros premium)  txt (6.8 Kb)  
Continuar por mais 4 páginas »
Disponível apenas no TrabalhosGratuitos.com