elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  algoritmo de bresenham
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: algoritmo de bresenham  (Leído 4,354 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
algoritmo de bresenham
« en: 27 Septiembre 2014, 00:04 am »

Saludos

Tengo el siguiente codigo en C, que me tiene que dibujar algunas lineas mediante el algoritmo de bresenham. Para esto estoy utilizando GLUT, la cual ya le instale correctamente. El problema es que dentro del main donde tengo la llamada a funcion de init() y glutDisplayFunc(estrella); me aparece init y estrella not declared in this scope, por qué será esto??

Código
  1. #include <windows.h>
  2. #include <GL/glut.h>
  3.  
  4. int main(int argc, char** argv)
  5. {
  6.    glutInit(&argc, argv);//inicialización de GLUT
  7.    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//único búfer de refresco en la ventana de visualización y el modo de color RGB
  8.    glutInitWindowPosition(50, 100); // posición inicial, esq sup izq
  9.    glutInitWindowSize(400, 300); //alto y ancho de la ventana en pixeles
  10.    glutCreateWindow("Primer Practica");// creación de ventana de visualización y título de la misma
  11.    init();
  12.    glutDisplayFunc(estrella); // muestra la línea en la ventana de visualización
  13.    glutMainLoop(); // bucle infinitoque comprueba entrada de disp
  14.    return EXIT_SUCCESS;
  15. }
  16.  
  17. void bresenham(int x0,int y0,int x1,int y1)
  18. {
  19.    int dx,dy,p,x,y,s1,s2,e,i,intercambio;
  20.  
  21.    x = x1;
  22.    y = y1;
  23.  
  24.    dx = abs(x1-x0);
  25. dy = abs(y1-y0);
  26.  
  27. s1 = signo(x1-x0);
  28. s2 = signo(y1-y0);
  29.  
  30. if(y > x)
  31.    {
  32.        p = dx;
  33.    dx = dy;
  34.    dy = p;
  35.    }
  36.    else
  37.       intercambio = 1;
  38.    e=2*dy-dx;
  39.    for(i = 0;i <= dx;i++)
  40.    {
  41.        if(e >= 0)
  42.        {
  43.            if(intercambio == 1)
  44.               x = x+s1;
  45.            else
  46.               y = y+s2;
  47.        }
  48.        e = e-(2*dx);
  49.    }
  50.    if(intercambio == 1)
  51.       y = y+s2;
  52.    else
  53.       x = x+s1;
  54.    e = e+2*dy;
  55. }
  56.  
  57. int signo(int num)
  58. {
  59.    int resultado;
  60.    if(num < 0)
  61.       resultado = -1;
  62.    else if(num > 0)
  63.       resultado = 1;
  64.    else if(num == 0)
  65.       resultado = 0;
  66.    return resultado;
  67. }
  68.  
  69. void init(void)
  70. {
  71.    glClearColor(1.0, 1.0, 1.0, 0.0); // colorde la ventana, blanco
  72.    glMatrixMode(GL_PROJECTION);//  proyección de la imagen en la ventana devisualización
  73.    gluOrtho2D(0.0, 400.0, 0.0, 300.0);//  proyección en 2D
  74. }
  75.  
  76. void estrella(void)
  77. {
  78.   bresenham(0,0,0,130);/*
  79.    bresenham();
  80.    bresenham();
  81.    bresenham();*/
  82. }
  83.  

de antemano gracias


En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: algoritmo de bresenham
« Respuesta #1 en: 27 Septiembre 2014, 01:08 am »

Porque estrella e init están declaradas y definidas después del main por eso desde ésta última no sabe qué es estrella ni init pues todavía no están declaradas. Puedes arreglarlo añadiendo la declaración junto a la inclusión de los archivos de cabecera, tal que así:
Código
  1. #include <windows.h>
  2. #include <GL/glut.h>
  3.  
  4. void init(void);
  5. void estrella(void);
  6.  
  7. int main(int argc, char** argv)
  8. {
  9.   glutInit(&argc, argv);//inicialización de GLUT
  10.   glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//único búfer de refresco en la ventana de visualización y el modo de color RGB
  11.   glutInitWindowPosition(50, 100); // posición inicial, esq sup izq
  12.   glutInitWindowSize(400, 300); //alto y ancho de la ventana en pixeles
  13.   glutCreateWindow("Primer Practica");// creación de ventana de visualización y título de la misma
  14.   init();
  15.   glutDisplayFunc(estrella); // muestra la línea en la ventana de visualización
  16.   glutMainLoop(); // bucle infinitoque comprueba entrada de disp
  17.   return EXIT_SUCCESS;
  18. }
  19.  
  20. void bresenham(int x0,int y0,int x1,int y1)
  21. {
  22.   int dx,dy,p,x,y,s1,s2,e,i,intercambio;
  23.  
  24.   x = x1;
  25.   y = y1;
  26.  
  27.   dx = abs(x1-x0);
  28. dy = abs(y1-y0);
  29.  
  30. s1 = signo(x1-x0);
  31. s2 = signo(y1-y0);
  32.  
  33. if(y > x)
  34.   {
  35.       p = dx;
  36.   dx = dy;
  37.   dy = p;
  38.   }
  39.   else
  40.      intercambio = 1;
  41.   e=2*dy-dx;
  42.   for(i = 0;i <= dx;i++)
  43.   {
  44.       if(e >= 0)
  45.       {
  46.           if(intercambio == 1)
  47.              x = x+s1;
  48.           else
  49.              y = y+s2;
  50.       }
  51.       e = e-(2*dx);
  52.   }
  53.   if(intercambio == 1)
  54.      y = y+s2;
  55.   else
  56.      x = x+s1;
  57.   e = e+2*dy;
  58. }
  59.  
  60. int signo(int num)
  61. {
  62.   int resultado;
  63.   if(num < 0)
  64.      resultado = -1;
  65.   else if(num > 0)
  66.      resultado = 1;
  67.   else if(num == 0)
  68.      resultado = 0;
  69.   return resultado;
  70. }
  71.  
  72. void init(void)
  73. {
  74.   glClearColor(1.0, 1.0, 1.0, 0.0); // colorde la ventana, blanco
  75.   glMatrixMode(GL_PROJECTION);//  proyección de la imagen en la ventana devisualización
  76.   gluOrtho2D(0.0, 400.0, 0.0, 300.0);//  proyección en 2D
  77. }
  78.  
  79. void estrella(void)
  80. {
  81.  bresenham(0,0,0,130);/*
  82.    bresenham();
  83.    bresenham();
  84.    bresenham();*/
  85. }

Saludos, avesudra.


« Última modificación: 27 Septiembre 2014, 02:39 am por avesudra » En línea

Regístrate en
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines