D
Äh ... Der Code ist schon uralt, mal schauen, ob ich den überhaupt noch kapier
//Zeichnung des eigentlichen Funktionsschaubildes...
for(i = -1;i<2;i+=2)
{
int nFirst = 1;
double Y=0.0;
dc.MoveTo(POS_REL_TO_CENTER(0,C*FAKTOR));
for(double X=0.0;;X+=i*(1.0/100.0))
{
//Das ist im Grunde die wichtige Zeile:
Y=A*pow(X,nExp)+B*X+C;
//Sie berechnet den Y-Achsenabschnitt für die angegebene Formel
//Der Rest ist eigentlich nur zum zeichnen und um Grenzwerte wie "Unendlich" rauszufiltern ...
//Spiel halt mal eine wenig mit dem Code rum, dann wirst schon sehen, was das alles bringt ;)
//Weiss es ehrlich gesagt im Moment auch net mehr so genau ..
if((!rct.PtInRect(CPoint((X*FAKTOR)+CENTER_X,(Y*FAKTOR)+CENTER_Y)))||(Y>INT_MAX||Y<INT_MIN))
{
if(nExp>=0||(nExp<0&&!nFirst))
{
if(_finite(Y))
dc.LineTo(POS_REL_TO_CENTER(X*FAKTOR,Y*FAKTOR));
break;
}
else
continue;
}
if(X<0 && ((int)nExp!=nExp))
continue;
if(X == 0 && (nExp<0))
continue;
int n = Y;
if(nFirst)
{
if(nFirst==2)
nFirst=0;
else
nFirst = 2;
double X2 = X-i*(1.0/100.0);
double Y2=A*pow(X2,nExp)+B*X2+C;
if(_finite(Y2))
{
dc.MoveTo(POS_REL_TO_CENTER(X2*FAKTOR,Y2*FAKTOR));
dc.LineTo(POS_REL_TO_CENTER(X*FAKTOR,Y*FAKTOR));
}
else
dc.MoveTo(POS_REL_TO_CENTER(X*FAKTOR,Y*FAKTOR));
}
else
dc.LineTo(POS_REL_TO_CENTER(X*FAKTOR,Y*FAKTOR));
}
}