Files
TempleOS-Rijn/TempleOS/Demo/Graphics/Cartesian.CPP
T
2018-09-08 21:45:52 +02:00

49 lines
979 B
C++

//x must be global.
//Might as well make y global.
F64 x,y,y_last;
U0 Cartesian()
{
U8 *st;
I64 ch=0,h,v;
Bool first;
CDC *dc=DCAlias;
do {
DocClear;
"Enter algebraic equation to graph.\n"
"Example: y=2*x\n"
"y=";
if (st=MGetS) {
if (*st) {
h=Fs->win_pixel_width/2;
v=Fs->win_pixel_height/2;
dc->color=RED;
GrLine(dc,h,0,h,2*v+1);
GrLine(dc,0,v,2*h+1,v);
first=TRUE;
dc->color=BLACK;
for (x=-h;x<=h;x++) {
y=-ExePrint("ToF64(%s);",st)(F64);
if (!first)
GrLine(dc,x-1+h,y_last+v,x+h,y+v);
y_last=y;
first=FALSE;
}
ch=GetChar;
} else
ch=CH_SHIFT_ESC;
Free(st);
} else
ch=CH_SHIFT_ESC;
DCFill;
} while (ch!=CH_SHIFT_ESC && ch!=CH_ESC);
DCDel(dc);
}
Cartesian;
/*$WW,1$
For better performance, compile the expression entered by the user one time with $LK,"LexExpression2Bin","MN:LexExpression2Bin"$() and use $LK,"Call","MN:Call"$(). See $LK-A,"::/TempleOS/Demo/CompileDemo.CPP"$.
*/