#include<chandra.h>
// Global Variable Declaration..
int GraphDriver = DETECT; /* Request auto-detection */
int GraphMode;
void func_gen(float ,float ,float ,int, int, int);
void drawAxis();
void graph();
float mod(float );
void yx1(float );
void yx2(float );
float graphFunction(float );
//Main Function
void main()
{
initgraph( &GraphDriver, &GraphMode, "../bgi" );
char c;
int zoom_factor=10, xsh=0, ysh=0;
float precision=0.01, min_range=-30, max_range=30;
func_gen(precision,min_range,max_range,zoom_factor,xsh,ysh);
do{
c=getch();
if(c=='w'||c=='W')
{
precision=precision/10;
func_gen(precision,min_range,max_range,zoom_factor,xsh,ysh);
}
if(c=='q'||c=='Q')
{
precision=precision*10;
func_gen(precision,min_range,max_range,zoom_factor,xsh,ysh);
}
if(c=='+')
{
zoom_factor +=2;
func_gen(precision,min_range,max_range,zoom_factor,xsh,ysh);
}
if(c=='-')
{
zoom_factor -=2;
func_gen(precision,min_range,max_range,zoom_factor,xsh,ysh);
}
if(c=='x' || c=='x')
{
ysh += 2;
func_gen(precision,min_range,max_range,zoom_factor,xsh,ysh);
}
if(c=='s' || c=='S')
{
xsh += 2;
func_gen(precision,min_range,max_range,zoom_factor,xsh,ysh);
}
if(c=='c' || c=='C')
{
ysh -= 2;
func_gen(precision,min_range,max_range,zoom_factor,xsh,ysh);
}
if(c=='A' || c=='a')
{
xsh -= 2;
func_gen(precision,min_range,max_range,zoom_factor,xsh,ysh);
}
if(c=='R' || c=='r')
{
ysh = 0;
xsh = 0;
precision = 0.1;
zoom_factor=10;
func_gen(precision,min_range,max_range,zoom_factor,xsh,ysh);
}
}
while(c=='w'||c=='W'||c=='q'||c=='Q'||c=='+'||c=='-'||c=='s'||c=='S'||c=='x'||c=='X'||c=='a'||c=='A'||c=='c'||c=='C'||c=='r'||c=='R');
closegraph();
}
//Mod Function
float mod(float x)
{
if(x<0)
return (-1)*x;
else
return x;
}
// COORDINATE AXIS
void yx1(float min_range, float max_range)
{
float x=min_range;
while(x<=max_range)
{ float y;
y = x;
float xcord=320+10*x;
float ycord=240-10*y;
if((xcord<=640 && xcord>=0) && (ycord>=0 && ycord<=480))
putpixel(xcord,ycord,50);
x += 0.1;
}
}
void yx2(float min_range, float max_range)
{
float x=min_range;
while(x<=max_range)
{ float y;
y = -1*x;
float xcord=320+10*x;
float ycord=240-10*y;
if((xcord<=640 && xcord>=0) && (ycord>=0 && ycord<=480))
putpixel(xcord,ycord,50);
x += 0.1;
}
}
void drawAxis()
{
int i=0;
while(i!=480)
{ putpixel(320,i,1);
i++;
}
i=0;
while(i!=640)
{ putpixel(i,240,1);
i++;
}
}
/*
void graph()
{
int k=20, i=0;
while(k<480)
{
while(i<640)
{
putpixel(i,k,5);
i++;
}
i=0;
k += 20;
}
k=20, i=0;
while(k<640)
{
while(i<480)
{
putpixel(k,i,5);
i++;
}
i=0;
k += 20;
}
}
*/
void func_gen(float precision,float min_range, float max_range, int zoom_factor, int xsh, int ysh)
{
cleardevice();
// graph();
drawAxis();
yx1(min_range, max_range);
yx2(min_range, max_range);
int color=(34);
float x=min_range;
while(x<=max_range)
{ float y;
y = graphFunction(x); //define a function
// outtextxy(0,0,"Func_gen By Sunil Kumar Dheendhwal");
float xcord=320+zoom_factor*x+xsh;
float ycord=240-zoom_factor*y+ysh;
if((xcord<=640 && xcord>=0) && (ycord>=0 && ycord<=480))
putpixel(xcord,ycord,random(color));
x=x+precision;
}
}
float graphFunction(float x)
{
return x+10;
}