Autor
|
Tema: Programa de Gráficas (Leído 1,791 veces)
|
m@o_614
Desconectado
Mensajes: 389
|
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
|
|
|
En línea
|
|
|
|
Ferno
Desconectado
Mensajes: 375
|
Tan solo borra el '\n' del scanf que lee "Hasta qué número quieres calcular?"
Salú!
|
|
|
En línea
|
|
|
|
m@o_614
Desconectado
Mensajes: 389
|
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); }
|
|
|
En línea
|
|
|
|
Ferno
Desconectado
Mensajes: 375
|
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
|
|
|
En línea
|
|
|
|
m@o_614
Desconectado
Mensajes: 389
|
saludos ya se en que estaba mal es que tenia las fórmulas al reves cuando Po>=0 o es menor 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; }
|
|
|
En línea
|
|
|
|
Ferno
Desconectado
Mensajes: 375
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
gRAFICAS
Programación Visual Basic
|
systemita
|
3
|
2,701
|
26 Mayo 2005, 01:15 am
por Slasher-K
|
|
|
Graficas en ASP.NET
.NET (C#, VB.NET, ASP)
|
versus7
|
1
|
5,224
|
27 Mayo 2006, 07:40 am
por BADBYTE-K
|
|
|
3DMark 11: última versión del famoso programa para gráficas
Noticias
|
wolfbcn
|
0
|
2,034
|
5 Diciembre 2010, 01:50 am
por wolfbcn
|
|
|
Gráficas en Dev C++
Programación C/C++
|
rakk12
|
0
|
3,457
|
8 Septiembre 2011, 21:21 pm
por rakk12
|
|