Advertisement
Guest User

Untitled

a guest
May 19th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*******************************************************************************
  2. *                     Amanda Safady Luiz              NUSP 6426594             *
  3. *                     Mateus Brandao de Pontes        NUSP 6427208             *
  4. *                                                                              *
  5. *                     Exercicio de CG - Algoritmo de Brasenham                 *
  6. *                                                                              *
  7. ********************************************************************************/
  8.  
  9. #include <GL/gl.h>
  10. #include <GL/glut.h>
  11. #include <stdlib.h>
  12. #include <math.h>
  13. #include <windows.h>
  14. #include <stdio.h>
  15. #define NTESTES 20
  16.  
  17.  
  18. SYSTEMTIME inicio, fim;                //Armazenarao o retorno da funçao de tempo
  19. long int minicio, mfim, tdec;          //Armazenarao tempo em milisegundos
  20.  
  21. void cronometro_comecar()  {
  22.    GetSystemTime(&inicio);                //Inicializa inicio
  23.    minicio = inicio.wMilliseconds + inicio.wSecond*1000 + inicio.wMinute*60000;    //Acumula o total de ms
  24. }
  25.  
  26. void cronometro_parar()  {
  27.    GetSystemTime(&fim);                 //Inicializa fim
  28.    mfim = fim.wMilliseconds + fim.wSecond*1000 + fim.wMinute*60000;               //Acumula o total de ms
  29. }
  30.  
  31. /*Funcao que projeta as coordenas inteiras nos 8 octantes*/
  32. void CirclePoints(int x, int y)  {
  33.    glBegin(GL_POINTS);
  34.       glVertex2i( x, y);
  35.       glVertex2i( x, -y);
  36.       glVertex2i(-x, y);
  37.       glVertex2i(-x, -y);
  38.       glVertex2i( y, x);
  39.       glVertex2i( y, -x);
  40.       glVertex2i(-y, x);
  41.       glVertex2i(-y, -x);
  42.    glEnd();
  43. }
  44.  
  45. /*Funcao que projeta as coordenas reias nos 8 octantes*/
  46. void CirclePointsf(float x, float y)  {
  47.    glBegin(GL_POINTS);
  48.       glVertex2f( x, y);
  49.       glVertex2f( x, -y);
  50.       glVertex2f(-x, y);
  51.       glVertex2f(-x, -y);
  52.       glVertex2f( y, x);
  53.       glVertex2f( y, -x);
  54.       glVertex2f(-y, x);
  55.       glVertex2f(-y, -x);
  56.    glEnd();
  57. }
  58.  
  59. /*Calcula o valor das coordenadas a serem projetas, atraves do algoritmo de Senos/Cossenos*/
  60. void SinCosin(float r)  {
  61.    double ang = 45;
  62.    float x,y;
  63.    while(ang <= 90)       //Varre o octante.
  64.    {
  65.       x = r*cos(ang);    //X obtido em coordenadas polares
  66.       y = r*sin(ang);    //Y obtido em coordenadas polares
  67.       CirclePointsf(x,y);
  68.       ang = ang+1/r;
  69.    }
  70. }
  71.  
  72. /*Calcula o valor das coordenadas a serem projetas, a partir do algoritmo de Bresenhan*/
  73. void MidPointCircleInt(int r)  {
  74.    int x, y, d;
  75.    /* Valores iniciais. Comeca do topo do segundo octante*/
  76.    x = 0;
  77.    y = r;
  78.    d = 1 - r;
  79.    CirclePoints(x,y);
  80.    while (y > x){   //Varre o octante do angulo de 90º para o de 45º
  81.       if (d < 0){
  82.       /* Seleciona E, ou seja, adiciona 1 no eixo X */
  83.          x++;
  84.          d = d + 2 * x + 3;
  85.       }
  86.       else  {
  87.          /*Seleciona SE, ou seja, adiciona 1 no eixo X e reduz 1 no eixo Y*/
  88.          x++;
  89.          y--;            
  90.          d = d + 2 * (x - y) + 5;
  91.       }
  92.       CirclePoints(x,y);
  93.    }
  94. }
  95.  
  96.  
  97. void display()  {
  98.  
  99.    int r = 150;     //Raio usado para o desenho das circunferencias
  100.    int r1 = 1000;
  101.    int i;
  102.    float media = 0;   //Variavel que ir armazenam a media dos tempos
  103.      
  104.    glClear (GL_COLOR_BUFFER_BIT);
  105. //   glFlush();
  106.    do  {
  107. //      printf("\n***************************************************************\n");                      
  108.      // printf("\nAlgoritmo de Bresenhan\n");
  109. //      printf("Raio: %d\n",r);      
  110.       for (i = 0; i < NTESTES; i++) {
  111.   //       time_t  inicio, fim;
  112.     //     glColor3f (1.0,1.0,1.0);    //Cor preta
  113. //         cronometro_comecar();
  114.          MidPointCircleInt(r);       //Chamada do algoritmo de Bresenhan
  115.   //       cronometro_parar();
  116. //         media = media +(mfim-minicio);
  117.   //       glClear (GL_COLOR_BUFFER_BIT);
  118.     //     glFlush();      
  119.       }
  120. //      printf("Media do tempo decorrido (ms): %lf\n", media/20);
  121.   //    printf("\n***************************************************************\n\n");        
  122.    
  123.       media = 0;    
  124.     //  printf("\n***************************************************************\n");                
  125.       //printf("\nAlgoritmo Sinos/Cossenos\n");      
  126. //      printf("Raio: %d\n",r);
  127.       for (i = 0; i < NTESTES; i++) {
  128.          glColor3f (1.0, 0.0, 1.0);    //Cor magenta
  129.       //   cronometro_comecar();
  130.          SinCosin((float)r1);           //Chamada do algoritmo Senos/Cossenos
  131.         // cronometro_parar();
  132.          //media = media +(mfim-minicio);            
  133.       //   glClear (GL_COLOR_BUFFER_BIT);
  134.         // glFlush();            
  135.       }
  136. //      printf("Media do tempo decorrido (ms): %lf\n", media/20);
  137.   //    printf("\n***************************************************************\n\n");        
  138.      
  139.       r = r*2;    //Incrementa o raio
  140.       r1 = r1*2;
  141.        glFlush();            
  142.    } while (r < 60000);
  143. }
  144.  
  145. void init ()  {
  146.    /* Seleciona a cor de fundo para limpeza da tela */
  147.    glClearColor (0.0, 0.0, 0.0, 0.0);
  148.  
  149.    /* Inicializa os valores de visualização */
  150.    glMatrixMode(GL_PROJECTION);
  151.  
  152.  
  153.    /* Faz com que a matriz corrente seja inicializada com a matriz identidade
  154.    (nenhuma transformação é acumulada) */
  155.    gluOrtho2D(-60000,60000,-60000,60000);
  156. }
  157.  
  158.  
  159.  
  160. /* Cria a janela */
  161. int main(int argc, char** argv)  {
  162.  
  163.    /* Estabelece o modo de exibição a ser utilizado pela janela a ser criada
  164.     neste caso utiliza-se de um buffer simples, ou seja, a apresentação será imediata à
  165.     execução. Define o modo de cores como RGBA */
  166.    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
  167.  
  168.    /*Determina o tamanho em pixels da janela a ser criada*/
  169.    glutInitWindowSize (700,700 );
  170.  
  171.    /*Estabelece a posição inicial para criação da janela*/
  172.    glutInitWindowPosition (100, 100);
  173.  
  174.    /* Cria uma janela com base nos parâmetros especificados
  175.    nas funções glutInitWindowSize e glutInitWindowPosition
  176.    com o nome de título especificado em seu argumento */
  177.    glutCreateWindow ("Bresenhan VS. Senos/Cossenos");
  178.  
  179.    /* Especifica os parâmetros inicias para as variáveis de estado do OpenGL*/
  180.    init ();
  181.  
  182.    // Associa a função display como uma função de callback
  183.    glutDisplayFunc(display);
  184.  
  185.    /* Inicia a execução do programa OpenGL.
  186.    O programa irá executar num loop infinito devendo
  187.    o desenvolvedor especificar as condições de saída do mesmo
  188.    através de interrupções no próprio programa ou através
  189.    de comandos de mouse ou teclado como funções de callback*/
  190.    glutMainLoop();
  191.  
  192.    return 0;
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement