Título: Programa de Gráficas
Publicado por: m@o_614 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é #include <stdio.h> #include <stdlib.h> void dibujar_recta(); int main() { int opcion; printf("Graficas por Computadora\n"); printf("Dibujo primitivas 2D\n"); switch(opcion) { case 1: dibujar_recta(); break; case 2://todavia me falta esta parte break; case 3://todavia me falta esta parte break; default: } return 0; } void dibujar_recta() { int pi_x,pf_x,pi_y,pf_y,m,inc_x,inc_y,Pk=0,inc_y2,inc_x2,k,num,Xk,Yk; printf("Dame el punto inicial(x,y):\n"); scanf("%d%d",&pi_x ,&pi_y ); printf("Dame el punto final(x,y):\n"); scanf("%d%d",&pf_x ,&pf_y ); m = (pf_y-pi_y)/(pf_x-pi_x); printf("pixel inicial = (%d,%d)\n",pi_x ,pi_y ); inc_x = pf_x-pi_x; inc_y = pf_y-pi_y; inc_y2 = 2*inc_y; inc_x2 = 2*inc_x; printf("%cx = %d\n",30,inc_x ); printf("%cy = %d\n",30,inc_y ); printf("2%cy = %d\n",30,inc_y2 ); printf("2%cy - 2%cx = %d - %d = %d\n",30,30,inc_y2 ,inc_x2 ,inc_y2 -inc_x2 ); Pk = 2*inc_y-inc_x; printf("Pk = 2%cy - %cx = %d - %d = %d\n\n",30,30,inc_y2 ,inc_x ,Pk ); Xk = pi_x; Yk = pi_y; printf("Hasta que numero quieres calcular?\n"); printf("K\tPk\t(Xk+1,Yk+1)\n"); k=0; do { if(Pk>=0) { Pk = Pk+inc_y2-inc_x2; Xk++; Yk++; } else { Pk = Pk+inc_y2; Xk++; } k++; }while(k<=num); }
de antemano gracias
Título: Re: Programa de Gráficas
Publicado por: Ferno en 12 Noviembre 2012, 22:59 pm
Tan solo borra el '\n' del scanf que lee "Hasta qué número quieres calcular?"
Salú!
Título: Re: Programa de Gráficas
Publicado por: m@o_614 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é void dibujar_circulo() { int r,xc,yc,Po,k,x0,y0; printf("Dame las coordenadas de centro:\n"); Po = 1-r; x0 = 0; y0 = r; printf("\n(Xo,Yo) = (%d,%d)\n",x0 ,y0 ); printf("\nPo = 1 - %d = %d\n\n",r ,Po ); printf("K\tPk\t(Xk+1,Yk+1)\t2Xk+1\t2Yk+1\n"); k=0; do { if(Po>=0) { Po = Po+(2*x0)+1; x0++; y0--; } else { Po = Po+(2*x0)+1-(2*y0); x0++; } printf("(%d,%d)\t\t%d\t%d\n",x0 ,y0 ,2*x0 ,2*y0 ); k++; }while(y0>=x0); }
Título: Re: Programa de Gráficas
Publicado por: Ferno 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
Título: Re: Programa de Gráficas
Publicado por: m@o_614 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 #include <stdio.h> #include <stdlib.h> #include <math.h> void dibujar_recta(); void dibujar_circulo(); void dibujar_elipse(); int main() { int opcion; printf("Graficas por Computadora\n"); printf("Dibujo primitivas 2D\n"); printf("Que desea dibujar?\n"); switch(opcion) { case 1: dibujar_recta(); break; case 2: dibujar_circulo(); break; case 3: dibujar_elipse(); break; default: } return 0; } void dibujar_recta() { int pi_x,pf_x,pi_y,pf_y,m,inc_x,inc_y,Pk=0,inc_y2,inc_x2,k,num,Xk,Yk; printf("***Metodo de Bresenham***\n"); printf("Dame el punto inicial(x,y):\n"); scanf("%d%d",&pi_x ,&pi_y ); printf("Dame el punto final(x,y):\n"); scanf("%d%d",&pf_x ,&pf_y ); m = (pf_y-pi_y)/(pf_x-pi_x); printf("pixel inicial = (%d,%d)\n",pi_x ,pi_y ); inc_x = pf_x-pi_x; inc_y = pf_y-pi_y; inc_y2 = 2*inc_y; inc_x2 = 2*inc_x; printf("%cx = %d\n",30,inc_x ); printf("%cy = %d\n",30,inc_y ); printf("2%cy = %d\n",30,inc_y2 ); printf("2%cy - 2%cx = %d - %d = %d\n",30,30,inc_y2 ,inc_x2 ,inc_y2 -inc_x2 ); Pk = 2*inc_y-inc_x; printf("Pk = 2%cy - %cx = %d - %d = %d\n\n",30,30,inc_y2 ,inc_x ,Pk ); Xk = pi_x; Yk = pi_y; printf("Hasta que numero quieres calcular?\n"); printf("K\tPk\t(Xk+1,Yk+1)\n"); k=0; do { if(Pk>=0) { Pk = Pk+inc_y2-inc_x2; Xk++; Yk++; } else { Pk = Pk+inc_y2; Xk++; } k++; }while(k<=num); } void dibujar_circulo() { int r,xc,yc,Po,k,x0,y0; printf("Dame las coordenadas de centro:\n"); Po = 1-r; x0 = 0; y0 = r; printf("\n(Xo,Yo) = (%d,%d)\n",x0 ,y0 ); printf("\nPo = 1 - %d = %d\n\n",r ,Po ); printf("K\tPk\t(Xk+1,Yk+1)\t2Xk+1\t2Yk+1\n"); k=0; do { if(Po>=0) { x0++; y0--; Po = Po+((2*x0)+1)-(2*y0); } else { x0++; Po = Po+(2*x0)+1; } printf("(%d,%d)\t\t%d\t%d\n",x0 ,y0 ,2*x0 ,2*y0 ); k++; }while(y0>=x0); } void dibujar_elipse() { int x0,y0,rx,ry,P1o,ry_pot,rx_pot; printf("***Metodo del punto medio***\n"); printf("Dame las coordenadas del centro:\n"); printf("Dame los radios rx, ry:\n"); printf("\n(Xo,Yo) = (0,Ry) = (0,%d)\n\n",ry ); P1o = (ry_pot)-(rx_pot)(ry)+rx_pot/4; }
Título: Re: Programa de Gráficas
Publicado por: Ferno 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?
|