Me podran decir como graficar una funcion cualesquiera porfa
Sale chido por sus aportaciones nos vemos salu2
/***************************************************************************/
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <graphics.h>
#include <math.h>
//M es un arreglo de caracteres que contiene los valores del menu principal.
char *M[]={"VELOCIDAD","AMPLITUD","PRESICION"," GRANDE"," PUNTO","LINEA","DEFAULT"};
//Esta funcion es para poner el eje X y Y
void Ejes(int C1,int C2)
{ setcolor(C2); //Color del marco
rectangle(0,30,getmaxx(),getmaxy()); //Dibuja el marco
setcolor(C1); // color de la linea
line(getmaxx()/2,50,getmaxx()/2,getmaxy()-50); //Dibuja el Eje X
line(50,getmaxy()/2,getmaxx()-50,getmaxy()/2); //Dibuja el Eje Y
outtextxy(getmaxx()/2-3,40,"x(T)"); //Imprime X(T)
outtextxy(getmaxx()-40,getmaxy()/2-3,"T"); //Imprime T
}
//esta funcion dibuja la se¤al senoidal
//X es La posicion X donde inicia el grafico.
//Y es La posicion Y donde inicia el grafico.
//P para mayor precision
//f para aumentar la frecuencia
//V Para mayor velocidad
//C1 color del punto
//C2 color de la linea
//Ver Para ver Puntos o Lineas, o ambas
void Funcion(float X,float Y,int p,int f,int V, int E,int C1,int C2,int Ver)
{ double xx=0,yy=0; //va contener los valores de la funcion.
int i=0; setcolor(C2);//Color de la linea
moveto(getmaxx()+1,0); //Poner el punto inicial fuera de la pantalla
for (; i<=V*10; i++) //Ciclo desde 0 has el numero de Vueltas
{yy = cos(xx+=0.05*p)*f; //Se evalua la Funcion
switch(Ver)// para ver que es lo que se va agraficar si Puntos o lineas.
{ case 0: putpixel(X-xx*E,1+Y-yy*E,C1);break;//Se Pintan los pixeles
case 1: lineto(X-xx*E,Y-yy*E); break;//Se pinta la linea
case 2: lineto(X-xx*E,Y-yy*E); //Se pinta la linea
putpixel(X-xx*E,1+Y-yy*E,C1);break;//Se Pintan los pixeles
void main(void) //Funcion principal.
{ int tarj=DETECT,modo,x=0,xw=0; //Variables iniciales.
int P=4,//Presicion
A=1,//Amplitud
CP=15,//Color Punto
CL=8,//Color Linea
E=40,//Escala
V2=2, //VER LINEA Y PUNTO
T=100;//TIEMPO
char *CAD; //Varible de tipo cadena.
int op,a=0;// para que sean manejadas en el menu..
detectgraph(&tarj,&modo); //Para dectectar los graficos.
initgraph(&tarj,&modo,"..\\bgi");//Inicializa los graficos.
setfillstyle(1,8);bar(0,10,getmaxx(),25);//Pinta la pantalla de negro
setcolor(7); outtextxy(30,14,"ONDA SENOIDAL...");//Escribe este letrero.
setcolor(0); outtextxy(230,14,"Utilizar Las teclas +,-, P,L,D, Esc->Salir");//Escribe este letrero.
setcolor(8);
outtextxy(45,445,"100"); outtextxy(125,445,"1"); outtextxy(210,445,"4");//Escribe este letrero.
outtextxy(290,445,"40"); outtextxy(360,445,"15"); outtextxy(430,445,"8");//Escribe este letrero.
for(a=0;a<=6;a++){ outtextxy(20+x,460,M[a]); x+=80; }//Escribe el menu
setcolor(7); outtextxy(20,460,M[0]); a=x=0;// Seleciona la primera opcion del menu
for(;;)// Ciclo infinito
{ Ejes(8,8);//Dibuja los ejes, X y Y color Gris
Funcion(getmaxx()+300-x,getmaxy()/2,P,A,100,E,CP,CL,V2);//Dibuja la funcion
delay(T);//Retarda un tiempo.
Funcion(getmaxx()+300-x,getmaxy()/2,P,A,100,E, 0,0,V2);//Dibuja la funcion
x+=5; //Desplaza e pixeles a la grafica.
if(x>=250) x=0;// si se pasa del limite del dezplasamiento reinicia.
if(kbhit())//si presiono una tecla.. entonces:
{ op=getch(); setcolor(0); //Capturo la tecla y almaceno en Op
//selecciona la opcion en el menu
outtextxy(45,445,itoa(T,CAD,10)); outtextxy(125,445,itoa(A,CAD,10));
outtextxy(210,445,itoa(P,CAD,10)); outtextxy(290,445,itoa(E,CAD,10));
outtextxy(360,445,itoa(CP,CAD,10)); outtextxy(430,445,itoa(CL,CAD,10));
setcolor(8); outtextxy(20+xw,460,M[a]);
//checar que tecla presione
switch(op)
{ case 27:exit(0);break; //si es ESC salir del programa.
case 75: a--;xw-=80;if(a<0){a=6; xw=480;}break; //si es <-
case 77: a++;xw+=80;if(a>6){a=0; xw=0;}break; //Si ->
case '+':switch(a) //Si es la tecla +
//verificar que valor tiene a
{case 0:T-=10; if(T<0)T=0;break;//Aumenta el tiempo
case 1:A++; break;//Aumenta el amplitud
case 2:P--; break;//Aumenta Precision
case 3:E+=5; break;//Aummneta el tama¤o
case 4:CP++;if(CP>15)CP=15; break;//Aumnet el color Punto
case 5:CL++;if(CL>15)CL=15; break;//aumenta el color de la Linea..
break;
case '-':switch(a)//disminuye
{ case 0:T+=10; if(T>200)T=200;break;//disminuye el tiempo
case 1:A--;break;//disminuye la amplitud
case 2:P++;break;//disminuye la Presicion
case 3:E-=5; break;//disminuye escala
case 4:CP--; if(CP<1)CP=1;break;//disminuye el color del punto
case 5:CL--; if(CL<1)CL=1;break;//disminuye el color de la linea.
case 'P': case 'p':V2=0;break;//Dibuja solo Puntos
case 'L': case 'l':V2=1;break;//Dibuja Solo lineas
case 'D': case 'd':V2=2;break;//Dibuja pintos y lineas
case 13: if(a==6){T=100;A=1;P=4;E=40;V2=2; CP=15; CL=8; } break;//valores por default
//actualizar los cvalres que se muestran en pantalla
setcolor(7); outtextxy(20+xw,460,M[a]);
Copyright © 2024 ANSWERS.MX - All rights reserved.
Answers & Comments
Verified answer
/***************************************************************************/
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <graphics.h>
#include <math.h>
/***************************************************************************/
//M es un arreglo de caracteres que contiene los valores del menu principal.
char *M[]={"VELOCIDAD","AMPLITUD","PRESICION"," GRANDE"," PUNTO","LINEA","DEFAULT"};
/***************************************************************************/
//Esta funcion es para poner el eje X y Y
void Ejes(int C1,int C2)
{ setcolor(C2); //Color del marco
rectangle(0,30,getmaxx(),getmaxy()); //Dibuja el marco
setcolor(C1); // color de la linea
line(getmaxx()/2,50,getmaxx()/2,getmaxy()-50); //Dibuja el Eje X
line(50,getmaxy()/2,getmaxx()-50,getmaxy()/2); //Dibuja el Eje Y
outtextxy(getmaxx()/2-3,40,"x(T)"); //Imprime X(T)
outtextxy(getmaxx()-40,getmaxy()/2-3,"T"); //Imprime T
}
/***************************************************************************/
//esta funcion dibuja la se¤al senoidal
//X es La posicion X donde inicia el grafico.
//Y es La posicion Y donde inicia el grafico.
//P para mayor precision
//f para aumentar la frecuencia
//V Para mayor velocidad
//C1 color del punto
//C2 color de la linea
//Ver Para ver Puntos o Lineas, o ambas
void Funcion(float X,float Y,int p,int f,int V, int E,int C1,int C2,int Ver)
{ double xx=0,yy=0; //va contener los valores de la funcion.
int i=0; setcolor(C2);//Color de la linea
moveto(getmaxx()+1,0); //Poner el punto inicial fuera de la pantalla
for (; i<=V*10; i++) //Ciclo desde 0 has el numero de Vueltas
{yy = cos(xx+=0.05*p)*f; //Se evalua la Funcion
switch(Ver)// para ver que es lo que se va agraficar si Puntos o lineas.
{ case 0: putpixel(X-xx*E,1+Y-yy*E,C1);break;//Se Pintan los pixeles
case 1: lineto(X-xx*E,Y-yy*E); break;//Se pinta la linea
case 2: lineto(X-xx*E,Y-yy*E); //Se pinta la linea
putpixel(X-xx*E,1+Y-yy*E,C1);break;//Se Pintan los pixeles
}
}
}
/***************************************************************************/
void main(void) //Funcion principal.
{ int tarj=DETECT,modo,x=0,xw=0; //Variables iniciales.
int P=4,//Presicion
A=1,//Amplitud
CP=15,//Color Punto
CL=8,//Color Linea
E=40,//Escala
V2=2, //VER LINEA Y PUNTO
T=100;//TIEMPO
char *CAD; //Varible de tipo cadena.
int op,a=0;// para que sean manejadas en el menu..
detectgraph(&tarj,&modo); //Para dectectar los graficos.
initgraph(&tarj,&modo,"..\\bgi");//Inicializa los graficos.
setfillstyle(1,8);bar(0,10,getmaxx(),25);//Pinta la pantalla de negro
setcolor(7); outtextxy(30,14,"ONDA SENOIDAL...");//Escribe este letrero.
setcolor(0); outtextxy(230,14,"Utilizar Las teclas +,-, P,L,D, Esc->Salir");//Escribe este letrero.
setcolor(8);
outtextxy(45,445,"100"); outtextxy(125,445,"1"); outtextxy(210,445,"4");//Escribe este letrero.
outtextxy(290,445,"40"); outtextxy(360,445,"15"); outtextxy(430,445,"8");//Escribe este letrero.
for(a=0;a<=6;a++){ outtextxy(20+x,460,M[a]); x+=80; }//Escribe el menu
setcolor(7); outtextxy(20,460,M[0]); a=x=0;// Seleciona la primera opcion del menu
for(;;)// Ciclo infinito
{ Ejes(8,8);//Dibuja los ejes, X y Y color Gris
Funcion(getmaxx()+300-x,getmaxy()/2,P,A,100,E,CP,CL,V2);//Dibuja la funcion
delay(T);//Retarda un tiempo.
Funcion(getmaxx()+300-x,getmaxy()/2,P,A,100,E, 0,0,V2);//Dibuja la funcion
x+=5; //Desplaza e pixeles a la grafica.
if(x>=250) x=0;// si se pasa del limite del dezplasamiento reinicia.
if(kbhit())//si presiono una tecla.. entonces:
{ op=getch(); setcolor(0); //Capturo la tecla y almaceno en Op
//selecciona la opcion en el menu
outtextxy(45,445,itoa(T,CAD,10)); outtextxy(125,445,itoa(A,CAD,10));
outtextxy(210,445,itoa(P,CAD,10)); outtextxy(290,445,itoa(E,CAD,10));
outtextxy(360,445,itoa(CP,CAD,10)); outtextxy(430,445,itoa(CL,CAD,10));
setcolor(8); outtextxy(20+xw,460,M[a]);
//checar que tecla presione
switch(op)
{ case 27:exit(0);break; //si es ESC salir del programa.
case 75: a--;xw-=80;if(a<0){a=6; xw=480;}break; //si es <-
case 77: a++;xw+=80;if(a>6){a=0; xw=0;}break; //Si ->
case '+':switch(a) //Si es la tecla +
//verificar que valor tiene a
{case 0:T-=10; if(T<0)T=0;break;//Aumenta el tiempo
case 1:A++; break;//Aumenta el amplitud
case 2:P--; break;//Aumenta Precision
case 3:E+=5; break;//Aummneta el tama¤o
case 4:CP++;if(CP>15)CP=15; break;//Aumnet el color Punto
case 5:CL++;if(CL>15)CL=15; break;//aumenta el color de la Linea..
}
break;
case '-':switch(a)//disminuye
{ case 0:T+=10; if(T>200)T=200;break;//disminuye el tiempo
case 1:A--;break;//disminuye la amplitud
case 2:P++;break;//disminuye la Presicion
case 3:E-=5; break;//disminuye escala
case 4:CP--; if(CP<1)CP=1;break;//disminuye el color del punto
case 5:CL--; if(CL<1)CL=1;break;//disminuye el color de la linea.
}
break;
case 'P': case 'p':V2=0;break;//Dibuja solo Puntos
case 'L': case 'l':V2=1;break;//Dibuja Solo lineas
case 'D': case 'd':V2=2;break;//Dibuja pintos y lineas
case 13: if(a==6){T=100;A=1;P=4;E=40;V2=2; CP=15; CL=8; } break;//valores por default
}
//actualizar los cvalres que se muestran en pantalla
outtextxy(45,445,itoa(T,CAD,10)); outtextxy(125,445,itoa(A,CAD,10));
outtextxy(210,445,itoa(P,CAD,10)); outtextxy(290,445,itoa(E,CAD,10));
outtextxy(360,445,itoa(CP,CAD,10)); outtextxy(430,445,itoa(CL,CAD,10));
setcolor(7); outtextxy(20+xw,460,M[a]);
}
}
}