• Lunes 16 de Diciembre de 2024, 00:29

Autor Tema:  Problema Graficando Funciones  (Leído 2205 veces)

virussx

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Problema Graficando Funciones
« en: Martes 7 de Junio de 2005, 19:55 »
0
Código: Text
  1. #include<graphics.h>
  2. #include<math.h>
  3. #include<stdlib.h>
  4. #include<float.h>
  5. #include<conio.h>
  6. #include<dos.h>
  7. #include<stdio.h>
  8.  
  9. int opcion,driver=DETECT, mode=1;
  10. float T,T1,tt,f,X,X1,X2;
  11. float x,y,y1;
  12. int i,t,maxx,maxy,x1;
  13. const float MAX_ROW = 475;
  14. const float MAX_COL = 630;
  15. int Xo;
  16. int Yo;
  17. void inicializar(),dibujar_ejes(),ejex(),uno(),seno();
  18.  
  19. void inicializar(){
  20.   initgraph(&driver,&mode,"c:\\bgi");
  21.   setbkcolor(BLUE);
  22.   maxx=getmaxx();
  23.   maxy=getmaxy();
  24.   X=50;
  25.   settextstyle(TRIPLEX_FONT, HORIZ_DIR,4);
  26.   setusercharsize(10, 10, 4, 3);
  27.   setcolor(WHITE);
  28.   outtextxy(X,20,"U");
  29.   outtextxy(X,60,"N");
  30.   outtextxy(X,100,"E");
  31.   outtextxy(X,140,"X");
  32.   outtextxy(X,180,"P");
  33.   outtextxy(X,220,"O");
  34.   X=100;
  35.   setusercharsize(7, 10, 2, 2);
  36.   outtextxy(X,80,"Ingenieria");
  37.   X=140;
  38.   outtextxy(X,110,"de");
  39.   X=105;
  40.   outtextxy(X,140,"Sistemas");
  41.   X=50;
  42.   setusercharsize(3, 4, 2, 3);
  43.   outtextxy(X,370,"Programador:");
  44.   settextstyle(SMALL_FONT, HORIZ_DIR,5);
  45.   outtextxy(X,400,"Fernandez, Edgar  Exp.:9720581");
  46.   outtextxy(X,415,"");
  47.   outtextxy(X,430,"");
  48.   outtextxy(380,450,"Presione una tecla para entrar...");
  49.   getch();
  50.  
  51.   while(opcion!=4){
  52.      cleardevice();
  53.        setcolor(WHITE);
  54.      settextstyle(SMALL_FONT, HORIZ_DIR,5);
  55.      outtextxy(250,100,"MENU DE OPCIONES");
  56.      outtextxy(140,188,"Graficar Funcion de tipo f(x)=X^2*X^(1/2) presione 1");
  57.      outtextxy(140,220,"Graficar Funcion de Tipo f(x)=sin(x)/x   presione 2");
  58.     outtextxy(140,250,"Graficar Funcion de Tipo y(t)=jt^3+ct^2+bt+a  presione 3");
  59.     outtextxy(140,285,"Para Salir Presione 4");
  60.     outtextxy(140,310,"Opcion Nø:");
  61.     gotoxy(34,21);scanf("%i",&opcion);
  62.  
  63.      switch(opcion){
  64.     case 1:
  65.         uno();
  66.     break;
  67.     case 2:
  68.             seno();
  69.     break;
  70.     case 3:
  71.             break;
  72.     case 4:
  73.         break;
  74.       }
  75.   }
  76. }
  77.  
  78.  
  79. void dibujar_ejes(){
  80.     cleardevice();
  81.    setcolor(WHITE);
  82. setbkcolor(BLUE);
  83. line(0,276,639,276);
  84. line(300,0,300,470);
  85. rectangle(1,1,638,478);
  86.      }
  87.  
  88. void uno(){
  89.   cleardevice();
  90.   settextstyle(SMALL_FONT, HORIZ_DIR,5);
  91.   dibujar_ejes();
  92.     for (i=0;i<=639;i+=1){
  93.        y=pow(i,2)*(sqrt(i));
  94.        putpixel (200+i,200-y,YELLOW);
  95.        }
  96.        outtextxy(380,450,"Presione una tecla para continuar...");
  97.   getch();
  98.  
  99. }
  100.  
  101. void seno(){
  102.   cleardevice();
  103.   settextstyle(SMALL_FONT, HORIZ_DIR,5);
  104.    dibujar_ejes();
  105.   for(i=0;i<=639;i+=1)
  106. {
  107.  
  108. putpixel(i,280-50.0*sin((i-300.0)/20)/((i-300.000061)/20),YELLOW);
  109. }
  110.      outtextxy(380,450,"Presione una tecla para continuar...");
  111.   getch();
  112.    }
  113.  
  114. int main(void){
  115.  
  116.   inicializar();
  117.  
  118. }
  119.  
  120.  
hey!!!! he tenido problemas grafican algunas funciones tales como f(x)=X^2*X^(1/2) y f(x)=sin(x)/x
ya q en la primera funcion los pusntos me sale tan separados y otros no salen y en la funcion del seno no se si esta bien.... ayudaaaaaaaa por favor

virussx

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Problema Graficando Funciones
« Respuesta #1 en: Miércoles 8 de Junio de 2005, 04:28 »
0
alguien ayudaaaaaaa!!!!!!!

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Problema Graficando Funciones
« Respuesta #2 en: Miércoles 8 de Junio de 2005, 04:41 »
0
La primera función que usas se dispara rápidamente dando valores muy grandes cuando la variable i apenas está tomando el número 10, por lo que estos no se veran en la pantalla cuando mandas a pintar los pixeles. Si quieres graficar los valores que toma esta función variando la i desde 0 hasta 639, debes de escalar los valores mínimo y máximo que pueda tomar la función en ese intervalo, con los valores mínimo y máximo de los valores en el eje Y de la pantalla.

virussx

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Problema Graficando Funciones
« Respuesta #3 en: Miércoles 8 de Junio de 2005, 05:57 »
0
como podria escalar esos puntos, lo q pasa es q en realidad estoy aprendiendo la inctruccion putpixel y tengo un libro al lado pero no es d emucha ayuda..... como podria hacer???

pitukilloloco

  • Miembro MUY activo
  • ***
  • Mensajes: 104
    • Ver Perfil
Re: Problema Graficando Funciones
« Respuesta #4 en: Miércoles 8 de Junio de 2005, 08:12 »
0
Para escalar, digamos, los valores que van del intervalo (-950.45, 1527.63) a los valores del eje Y (10, 450) puedes hacerlo por medio de la ecuación de la recta entre dos puntos. La ecuación general de la recta entre los puntos (x1, y1) y (x2, y2) viene dada por la fórmula
Citar
y = [(y2 - y1) / (x2 - x1)] *  (x - x1) + y1
Para aplicar esta fórmula en la transformación del intervalo (-950.45, 1527.63) en el segundo (10, 450) debemos poner como primer punto (x1, y1) a (-950.45, 10) y a el segundo punto (x2, y2) como (1527.63, 450), entonces la fórmula quedaría como
Citar
y = [(450 - 10) / (1527.63 - (-950.45))] *  (x - (-950.45)) + 10
lo cual simplificando quedaría como
Citar
y = (440 / 2478.08) * (x + 950.45) + 10
si te fijas, al darle a esta ecuación el valor de x = -950.45, y tomaría el valor de 10, y al darle x = 1527.63, y tomaría el valor de 450. Así esta ecuación mapea el intervalo (-950.45, 1527.63) en el intervalo (10, 450) (claro que tienes que truncar los valores que da la ecuación a enteros para poder mandarlos a la función que pinta un pixel). En general, si tienes una función f(x) que va a tomar valores en el intervalo (a1, a2) y quieres graficarla, entonces tienes que hacer dos veces lo expuesto arriba. Tienes que mapear el intervalo (a1, a2) en el intervalo del eje X de la pantalla (puedes elegir de 0 a 639 u otro que tu elijas). Y tienes que mapear el intervalo (b1, b2) al eje Y de la pantalla, en donde b1 sería el mínimo valor que toma la función f(x) y b2 el máximo. En el caso particular tuyo de la primera función que se hace demasiado grande rápidamente, sólo tienes que escalar en el eje Y, ya que los valores que le das a la función van de 0 a 639, que es precisamente el intervalo del eje X de la pantalla.

virussx

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Problema Graficando Funciones
« Respuesta #5 en: Jueves 9 de Junio de 2005, 01:21 »
0
entonces tengo q escalar y de la funcion... esta al meterla en la funcion pupixel como lo haria es decir para escalar "y" tendria q multiplicar por 450 o dividir entre 450 el valor de y..........

pd gracias pot tu explicacion...........