1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C++: Implementar Bubble short

Discussão em 'Programação' iniciada por Megazord32, 3 de Janeiro de 2013. (Respostas: 0; Visualizações: 640)

  1. Nota: enganei-me no titulo. Queria escrever Bubble Sort
    Boa tarde.
    Estou a tentar implementar em c++ o seguinte trabalho:


    Dada uma lista de pontos(x,y) num ficheiro .txt, tenho que os ordenar pelo ângulo que formam com uma recta horizontal que passa pelo ponto de menor abcissa (ordenando os ângulos é possivel desenhar um poligono)


    Já identifiquei o ponto com a menor abcissa (Ponto de referência). Para calcular os ângulos usei atan2. Até aqui funciona tudo bem.


    Agora tenho que usar o Bubble Sort para ordenar os ângulos mas nao sei como o implementar, pois quando crio o array para pôr os ângulos o atan2 deixa de funcionar. Como faço?


    A lista de pontos é apresentada da seguinte forma (.txt)


    Código:
    //poligono.h
    
    
    class Poligono
    {
    
    
    private:
          Ponto p1, p2;
    
    
         COLORREF cor;
         struct No{ // estrutura do nó da lista ligada
                No * proximo;
                Ponto ponto;
    };
    No * primeiro; // apontador para o primeiro nó da lista
    
    
    public: 
    
    
    //(etc..)
    
    
    
    
         Poligono(Ponto p1, Ponto p2, HWND janId);
         void ordenar();
    
    
    };
    
    poligono.cpp
    Código:
    void Poligono::ordenar(){
    
    
        if (primeiro==NULL){return;}
        No*aux=primeiro;
        int px_ref,py_ref,x_menor; //px_ref,py_ref -> ponto de referência = ponto com menor x
        p1 = aux->ponto;
        px_ref = p1.obterX();
        py_ref = p1.obterY();
    
    
        aux=aux->proximo;
    
    
        while(aux!=NULL)
        {
            p1=aux->ponto;
            x_menor=p1.obterX();
    
    
    
    
            if (px_ref<=x_menor)
                aux=aux->proximo;
    
    
            else
            {
                px_ref=p1.obterX();
                py_ref=p1.obterY();
                aux=aux->proximo;    
    
    
            }
    
    
    
    
    
    
        }
        Ponto p1(px_ref,py_ref);
        printf("Ponto de referencia: %d,%d\n",p1.obterX(),p1.obterY()); //escreve o valor do menor x
        Ponto p2(p2.obterX(),p2.obterY());
    
    
        if(primeiro == NULL) 
            return;
    
    
        No * aux2 = primeiro;
    
    
        while(aux2->proximo != NULL)
        { 
            p1=aux2 -> ponto;
            aux2 = aux2 -> proximo;
            p2 = aux2 -> ponto;
    
    
            float yy= (p2.obterY()-py_ref);
            float xx= (p2.obterX()-px_ref);
            float angulo = atan2(yy,xx) * 180 / PI;
    
    
            printf("angulo entre o ponto de referencia (%d,%d) e o ponto (%d,%d): %.f graus\n",px_ref,py_ref,p2.obterX(),p2.obterY(),angulo);
    
    
        }
    
    
    
    
    
    
    }
     
    Última edição: 3 de Janeiro de 2013

Partilhar esta Página