Anda di halaman 1dari 6

SCC 0650 Computao Grfica Engenharia de Computao ICMC/USP

Prof. Agma Juci Machado Traina

Relatrio
Converso Matricial de Circunferncias

Membros: Danilo Souza Pires de Albuquerque Marcelo Alves Baratela 6766127 6765940

17 de abril de 2012

1. Introduo
Este trabalho tem como objetivo a comparao entre os algoritmos de converso matricial de circunferncias: algoritmo de Meio-Ponto, segundo Foley; utilizao de coordenadas polares. Os parmetros a serem comparados so o tempo de execuo do algoritmo e sua eficincia. Tais dados sero demonstrados nos itens abaixo.

2. Detalhes da implementao
Foi utilizada a linguagem C em conjunto com a biblioteca grfica SDL para a exibio das circunferncias geradas. Para otimizao do algoritmo, calcula-se as coordenadas dos pixels da primeira metade do primeiro quadrante. O restante gerado espelhando para os outros setores os valores calculados anteriormente. Desse modo no preciso calcular as coordenadas para todos os pontos, sendo possvel desenhar oito pixels para cada par ordenado encontrado. No algoritmo que utiliza coordenadas polares, a variao de ngulo utilizada foi de um grau. Como j especificado, o ngulo varia at 45. Tal valor no pode ser usado como parmetro nas funes trigonomtricas da biblioteca math.h, j que o padro utilizado radianos. Desse modo, uma converso necessria.

3. Guia de utilizao
Como foi utilizada a biblioteca SDL, a compilao do arquivo .c requer a seguinte linha de comando: Para Windows: gcc Circle.c -o Circle.exe -Wall -lmingw32 -lSDLmain lSDL Para GNU/Linux: gcc Circle.c -o Circle -Wall `sdl-config --cflags --libs`

Sendo que Circle o nome do arquivo fonte. Para a execuo, so necessrios dois parmetros: o raio e a opo que identifica qual algoritmo ser utilizado. A opo correspondente ao algoritmo do MeioPonto 1 e a opo 2 se refere ao algoritmo que utiliza coordenadas polares. Desse modo, utiliza-se a seguinte linha de comando: Circle <raio> <opo>

4. Avaliao de desempenho
Para obter-se um valor mais preciso do tempo de execuo, um mesmo circulo desenhado 2.000 vezes e utilizada a mdia dos tempos. Para uma melhor comparao, variamos o raio de 5 at 300, a um passo de cinco, para ambos algoritmos. Essa variao nos permite verificar a proporo entre tempo de execuo e raio.

Tempo (s)
5,00E-05 4,00E-05 3,00E-05 2,00E-05 1,00E-05 0,00E+00 0 25 50

Comparao de desempenho

Polares MeioPonto

75

100 125 150 175 200 225 250 275 300 325

Raio
Grfico 1: Tempo de execuo dos algoritmos utilizados.

Como possvel ver no grfico 1, o tempo de execuo do algoritmo de MeioPonto linear. J o de coordernadas polares aproximadamente constante. Tal fato evidenciado pelo nmero fixo de pixels que so desenhados nesse algoritmo, independentemente do raio. Podemos observar que para um raio inferior a 150, o algoritmo de Meio-Ponto recomendado. A princpio, para raios maiores que esse valor, o algoritmo de coordenadas polares seria recomendado. No entanto, como o nmero de pixels desenhados constante, a circunferncia adquire um aspecto pontilhado com o crescimento do raio. Essa descontinuidade comea a ser percebida a partir do raio 70. Poderamos pensar que a reduo no intervalo entre os ngulos jogaria a descontinuidade para outros valores de raios ainda maiores, pois um nmero maior de pixels seriam desenhados. No entanto, essa alterao no resolve o problema. Ao se reduzir o intervalo, a diferena dos valores de senos e cossenos vizinhos se tornam irrelevantes. Como as variveis x e y (referentes as coordenadas) so inteiras, uma mnima alterao no valor do seno e cosseno no alterar o valor da varivel. Desse modo, mesmo reduzindo o intervalo e desenhando mais pixels, estes pixels adicionais sero desenhados sobre os j existentes, no alterando a descontinuidade.

Figura 1: Circunferncia de raio 150 obtida com coordenadas polares com intervalo de ngulo de 1 grau.

A figura 1 nos apresenta a circunferncia de raio 150 desenhada a partir do algoritmo de coordenadas polares para intervalos de ngulo de um grau, enquanto a figura 2 mostra a mesma circunferncia com intervalo de ngulo de meio grau. Podemos ver que ambas so idnticas, comprovando o que foi dito anteriormente.

Figura 2: Circunferncia de raio 150 obtida com coordenadas polares com intervalo de ngulo de 0.5 grau.

5. Concluso
O algoritmo de coordenadas polares ineficiente. Em raios pequenos, seu tempo de execuo extremamente grande. Alm disso, a partir do raio 70, conseguimos visualizar uma discretizao da circunferncia, o que no nada desejvel, uma vez que a circunferncia deve ser desenhada por completo. Portanto, mesmo o algoritmo de Meio-Ponto tendo menor desempenho para raios maiores que 150, ele continua sendo o preferencial na gerao das circunferncias.

6. Referncias
http://www.libsdl.org/ http://equipe.nce.ufrj.br/adriano/c/apostila/sdl/index.html http://agora.tidia-ae.usp.br/access/content/group/ac5d01ca-18a2-486dae9b-f1fea232782b/Apresentacoes/apostilas2.pdf http://www.friedspace.com/cprogramming/sdlpixels.php

Anda mungkin juga menyukai