Projeto MAC331 - Geometria Computacional

Fecho Convexo no Plano
  • Um Algoritmo Ingênuo
  • Algoritmo de Graham


  • por:

    Elidia Yumi Kawahara Itikawa

    Marcio Calixto Cabral

    Roberto Augusto Pires da Mota

    Professor Responsável pela Disciplina

    Prof. Dr. José Coelho de Pina


    Objetivo

    Introdução

              Encontrar o fecho convexo de n pontos no plano quando n é muito grande, pode demorar um bom tempo, dependendo do algoritmo. Algoritmos mais "ingênuos" podem chegar a gastar O(n4) e  O(n3). Algoritmos mais rápidos, como o de Jarvis, constroem o fecho convexo de um conjunto de n pontos no plano em tempo O(nh), onde h é o número de vértices do fecho convexo que será dado como resposta - ou seja, o algoritmo é output-sensitive. O algoritmo de Graham foi o primeiro algoritmo com complexidade de tempo O(n log n) para o problema do fecho convexo planar que mais tarde foi provado como tempo ótimo para o problema.

    Algoritmo Ingênuo ( Arestas-Extremas )

    Algoritmo de Graham

    Implementação

            Implementamos o algoritmo em C, utilizando a biblioteca OpenGL para fazer os desenhos.
            Os arquivos do projeto são os seguintes:

                        Makefile
                        const.h
                        embrulho.c
                        fecho1
                        fecho2
                        graham.c
                        rotinas.c
                        rotinas.h
                        rotinasEmbrulho.c
                        rotinasEmbrulho.h
     
                Faça o download

                Compilamos e testamos o programa na rede Linux. Para compilar digite:

                                make Graham
                                make Ingênuo

                Para rodar:

                                 Graham     <ArqPontos>     1 | 2

                                      ArqPontos: Arquivo de entrada contendo os pontos
                                      1: modo normal, sem passo a passo
                                      2: modo passo a passo. Digite 'n' dentro da janela gráfica para rodar um passo da execução do programa

                                 Ingênuo    <ArqPontos>     WaitTime

                                      ArqPontos: Arquivo de entrada contendo os pontos
                                      WaitTime:   Tempo de espera entre cada passo. '0' é o mais rápido possível.

    Testes

              Ao fim de execução de cada programa, mostramos no terminal modo texto o número de comparações feito por cada algoritmo.    Veja aqui alguns resultados:
     

    Bibliografia