Trabalho Pratico 1
Monografias: Trabalho Pratico 1. Pesquise 861.000+ trabalhos acadêmicosPor: Marii • 20/5/2014 • 1.192 Palavras (5 Páginas) • 448 Visualizações
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
...