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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


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


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Programa de Gráficas
« en: 12 Noviembre 2012, 20:50 pm »

Saludos

Estoy haciendo un programa de gráficas que me tiene que dar las coordenadas de una recta,  un circulo y un elipse, aún no lo he terminado porque el programa compila pero cuando entra al ciclo do-while se congela y no hace nada, no se por qué

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void dibujar_recta();
  5.  
  6. int main()
  7. {
  8.    int opcion;
  9.    printf("Graficas por Computadora\n");
  10.    printf("Dibujo primitivas 2D\n");
  11.    printf("Que desea hacer?\n");
  12.    printf("1)Linea\n");
  13.    printf("2)Circulo\n");
  14.    printf("3)Elipse\n");
  15.    scanf("%d",&opcion);
  16.    switch(opcion)
  17.    {
  18.        case 1:
  19.           dibujar_recta();
  20.           break;
  21.        case 2://todavia me falta esta parte
  22.           break;
  23.        case 3://todavia me falta esta parte
  24.           break;
  25.        default:
  26.           printf("Opcion no valida\n");
  27.    }
  28.    return 0;
  29. }
  30.  
  31. void dibujar_recta()
  32. {
  33.    int pi_x,pf_x,pi_y,pf_y,m,inc_x,inc_y,Pk=0,inc_y2,inc_x2,k,num,Xk,Yk;
  34.    printf("Dame el punto inicial(x,y):\n");
  35.    scanf("%d%d",&pi_x,&pi_y);
  36.    printf("Dame el punto final(x,y):\n");
  37.    scanf("%d%d",&pf_x,&pf_y);
  38.    system("cls");
  39.  
  40.    m = (pf_y-pi_y)/(pf_x-pi_x);
  41.  
  42.    printf("pixel inicial = (%d,%d)\n",pi_x,pi_y);
  43.    inc_x = pf_x-pi_x;
  44.    inc_y = pf_y-pi_y;
  45.    inc_y2 = 2*inc_y;
  46.    inc_x2 = 2*inc_x;
  47.  
  48.    printf("%cx = %d\n",30,inc_x);
  49.    printf("%cy = %d\n",30,inc_y);
  50.    printf("2%cy = %d\n",30,inc_y2);
  51.    printf("2%cy - 2%cx = %d - %d = %d\n",30,30,inc_y2,inc_x2,inc_y2-inc_x2);
  52.    Pk = 2*inc_y-inc_x;
  53.    printf("Pk = 2%cy - %cx = %d - %d = %d\n\n",30,30,inc_y2,inc_x,Pk);
  54.    Xk = pi_x;
  55.    Yk = pi_y;
  56.  
  57.    printf("Hasta que numero quieres calcular?\n");
  58.    scanf("%d\n",&num);
  59.    printf("K\tPk\t(Xk+1,Yk+1)\n");
  60.    k=0;
  61.    do
  62.    {
  63.        printf("%d\t%d",k,Pk);
  64.        if(Pk>=0)
  65.        {
  66.            Pk = Pk+inc_y2-inc_x2;
  67.            Xk++;
  68.            Yk++;
  69.        }
  70.        else
  71.        {
  72.            Pk = Pk+inc_y2;
  73.            Xk++;
  74.        }
  75.        printf("(%d,%d)\n",Xk,Yk);
  76.        k++;
  77.    }while(k<=num);
  78. }
  79.  

de antemano gracias


En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Programa de Gráficas
« Respuesta #1 en: 12 Noviembre 2012, 22:59 pm »

Tan solo borra el '\n' del scanf que lee "Hasta qué número quieres calcular?"

Salú!


En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: Programa de Gráficas
« Respuesta #2 en: 13 Noviembre 2012, 23:14 pm »

Muchas gracias Ferno  por tu respuesta

una última duda ya estoy empezando con la función para sacar las coordenadas del círculo pero tengo un problema a la hora de calcular Po, que en vez de iterar de positivo a negativo siempre me da números negativos y no entiendo por qué

Código
  1. void dibujar_circulo()
  2. {
  3.    int r,xc,yc,Po,k,x0,y0;
  4.    printf("Dame el radio:\n");
  5.    scanf("%d",&r);
  6.    printf("Dame las coordenadas de centro:\n");
  7.    scanf("%d%d",&xc,&yc);
  8.    Po = 1-r;
  9.  
  10.    x0 = 0;
  11.    y0 = r;
  12.  
  13.  
  14.    printf("\n(Xo,Yo) = (%d,%d)\n",x0,y0);
  15.    printf("\nPo = 1 - %d = %d\n\n",r,Po);
  16.    printf("K\tPk\t(Xk+1,Yk+1)\t2Xk+1\t2Yk+1\n");
  17.    k=0;
  18.    do
  19.    {
  20.        printf("%d\t%d\t",k,Po);
  21.        if(Po>=0)
  22.        {
  23.            Po = Po+(2*x0)+1;
  24.            x0++;
  25.            y0--;
  26.        }
  27.        else
  28.        {
  29.            Po = Po+(2*x0)+1-(2*y0);
  30.            x0++;
  31.        }
  32.        printf("(%d,%d)\t\t%d\t%d\n",x0,y0,2*x0,2*y0);
  33.        k++;
  34.    }while(y0>=x0);
  35. }
  36.  
En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Programa de Gráficas
« Respuesta #3 en: 14 Noviembre 2012, 13:26 pm »

El problema es meramente de análisis matemático. No creo que haya problemas en el code. Primero corroborá que las fórmulas en el code estén bien escritas.

La verdad no entiendo bien a qué hacer referencia Po ni las fórmulas que escribiste para dibujar las coordenadas.
Yo creo que con la fórmula original de la circunferencia (x^2 + y^2 = R, con R = Radio) sale más sencillo :P
En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: Programa de Gráficas
« Respuesta #4 en: 18 Noviembre 2012, 05:19 am »

saludos

ya se en que estaba mal es que tenia las fórmulas al reves cuando Po>=0 o es menor ;D pero ahora que estoy empezando la función de dibujar_elipse me aparece el siguiente error:

called object is not a function en la última línea

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. void dibujar_recta();
  6. void dibujar_circulo();
  7. void dibujar_elipse();
  8.  
  9.  
  10. int main()
  11. {
  12.    int opcion;
  13.    printf("Graficas por Computadora\n");
  14.    printf("Dibujo primitivas 2D\n");
  15.    printf("Que desea dibujar?\n");
  16.    printf("1)Linea\n");
  17.    printf("2)Circulo\n");
  18.    printf("3)Elipse\n");
  19.    scanf("%d",&opcion);
  20.    switch(opcion)
  21.    {
  22.        case 1:
  23.           dibujar_recta();
  24.           break;
  25.        case 2:
  26.           dibujar_circulo();
  27.           break;
  28.        case 3:
  29.           dibujar_elipse();
  30.           break;
  31.        default:
  32.           printf("Opcion no valida\n");
  33.    }
  34.    return 0;
  35. }
  36.  
  37. void dibujar_recta()
  38. {
  39.    int pi_x,pf_x,pi_y,pf_y,m,inc_x,inc_y,Pk=0,inc_y2,inc_x2,k,num,Xk,Yk;
  40.    printf("***Metodo de Bresenham***\n");
  41.    printf("Dame el punto inicial(x,y):\n");
  42.    scanf("%d%d",&pi_x,&pi_y);
  43.    printf("Dame el punto final(x,y):\n");
  44.    scanf("%d%d",&pf_x,&pf_y);
  45.    system("cls");
  46.  
  47.    m = (pf_y-pi_y)/(pf_x-pi_x);
  48.  
  49.    printf("pixel inicial = (%d,%d)\n",pi_x,pi_y);
  50.    inc_x = pf_x-pi_x;
  51.    inc_y = pf_y-pi_y;
  52.    inc_y2 = 2*inc_y;
  53.    inc_x2 = 2*inc_x;
  54.  
  55.    printf("%cx = %d\n",30,inc_x);
  56.    printf("%cy = %d\n",30,inc_y);
  57.    printf("2%cy = %d\n",30,inc_y2);
  58.    printf("2%cy - 2%cx = %d - %d = %d\n",30,30,inc_y2,inc_x2,inc_y2-inc_x2);
  59.  
  60.    Pk = 2*inc_y-inc_x;
  61.    printf("Pk = 2%cy - %cx = %d - %d = %d\n\n",30,30,inc_y2,inc_x,Pk);
  62.    Xk = pi_x;
  63.    Yk = pi_y;
  64.  
  65.    printf("Hasta que numero quieres calcular?\n");
  66.    scanf("%d",&num);
  67.    printf("K\tPk\t(Xk+1,Yk+1)\n");
  68.    k=0;
  69.    do
  70.    {
  71.        printf("%d\t%d\t",k,Pk);
  72.        if(Pk>=0)
  73.        {
  74.            Pk = Pk+inc_y2-inc_x2;
  75.            Xk++;
  76.            Yk++;
  77.        }
  78.        else
  79.        {
  80.            Pk = Pk+inc_y2;
  81.            Xk++;
  82.        }
  83.        printf("(%d,%d)\n",Xk,Yk);
  84.        k++;
  85.    }while(k<=num);
  86.  
  87. }
  88.  
  89. void dibujar_circulo()
  90. {
  91.    int r,xc,yc,Po,k,x0,y0;
  92.    printf("Dame el radio:\n");
  93.    scanf("%d",&r);
  94.    printf("Dame las coordenadas de centro:\n");
  95.    scanf("%d%d",&xc,&yc);
  96.    Po = 1-r;
  97.  
  98.    x0 = 0;
  99.    y0 = r;
  100.  
  101.  
  102.    printf("\n(Xo,Yo) = (%d,%d)\n",x0,y0);
  103.    printf("\nPo = 1 - %d = %d\n\n",r,Po);
  104.    printf("K\tPk\t(Xk+1,Yk+1)\t2Xk+1\t2Yk+1\n");
  105.    k=0;
  106.    do
  107.    {
  108.        printf("%d\t%d\t",k,Po);
  109.        if(Po>=0)
  110.        {
  111.            x0++;
  112.            y0--;
  113.            Po = Po+((2*x0)+1)-(2*y0);
  114.        }
  115.        else
  116.        {
  117.            x0++;
  118.            Po = Po+(2*x0)+1;
  119.        }
  120.        printf("(%d,%d)\t\t%d\t%d\n",x0,y0,2*x0,2*y0);
  121.        k++;
  122.    }while(y0>=x0);
  123. }
  124.  
  125. void dibujar_elipse()
  126. {
  127.    int x0,y0,rx,ry,P1o,ry_pot,rx_pot;
  128.    printf("***Metodo del punto medio***\n");
  129.    printf("Dame las coordenadas del centro:\n");
  130.    scanf("%d%d",&x0,&y0);
  131.    printf("Dame los radios rx, ry:\n");
  132.    scanf("%d%d",&rx,&ry);
  133.    printf("\n(Xo,Yo) = (0,Ry) = (0,%d)\n\n",ry);
  134.    ry_pot = pow(ry,2);
  135.    rx_pot = pow(rx,2);
  136.    P1o = (ry_pot)-(rx_pot)(ry)+rx_pot/4;
  137.    printf("P1o = %d\n",P1o);
  138. }
  139.  
En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Programa de Gráficas
« Respuesta #5 en: 18 Noviembre 2012, 19:03 pm »

No estoy seguro a qué hace referencia, pero lo que si estoy seguro es que tenés que agregar el comando "-lm" al FINAL del comando para poder compilar correctamente, en este caso, la función "pow".

¿Compilás por consola o desde algún IDE?
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
gRAFICAS
Programación Visual Basic
systemita 3 2,678 Último mensaje 26 Mayo 2005, 01:15 am
por Slasher-K
Graficas en ASP.NET
.NET (C#, VB.NET, ASP)
versus7 1 5,204 Último mensaje 27 Mayo 2006, 07:40 am
por BADBYTE-K
3DMark 11: última versión del famoso programa para gráficas
Noticias
wolfbcn 0 2,014 Último mensaje 5 Diciembre 2010, 01:50 am
por wolfbcn
Gráficas en Dev C++
Programación C/C++
rakk12 0 3,443 Último mensaje 8 Septiembre 2011, 21:21 pm
por rakk12
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines