Example of contour functions in Turbo C++ typedef struct PT_XY { double dblXX, dblYY; } PT_XY; #define MAX_PTX (int)30 PT_XY funcY(double dblXX, PT_XY ptx[MAX_PTX]); double fFac(double dblX); double fFac2(double dblX); double fWF1(double dblX, double dblN); double fWF2(double dblX, double dblN); FILE *fCalc; PT_XY xy, ptxy[MAX_PTX], pti[MAX_PTX]; double dblY, dblX, dblX2, dblXX, dblDOld; int i,ii,dxchk, mp; char szT[300]; double dblDX[201], dblDY[201],dblTot, dblN, dblDT; BOOL bDELTAYGROOT; if ((fCalc = fopen("hallo.lxt", "wb")) != NULL) { // delta X step init... dxchk = (int)111; // te verdelen punten... dblN = (double)1111.0; // opvatting van delta x verdeling... bDELTAYGROOT = (BOOL)TRUE; // bDELTAYGROOT = (BOOL)FALSE; for (mp=0;mp0;mp--) { ptxy[mp] = ptxy[mp-1]; } ptxy[0] = xy; dblDX[i] = xy.dblXX; dblDY[i] = xy.dblYY; dblX = (double)(i+(int)1)/(double)dxchk; xy = funcY(dblX, ptxy); // ptxy = xy; dblDX[i] = fabs(dblDX[i] - xy.dblXX); dblDY[i] = fabs(dblDY[i] - xy.dblYY); if (bDELTAYGROOT) { // AFGELEIDE grote delta y -> x veel punten if (dblDX[i] != (double)0.0) { dblDX[i] = dblDY[i] / dblDX[i]; } else { dblDX[i] = (double)1.0; } } else { // AFGELEIDE kleine delta y -> x veel punten if (dblDY[i] != (double)0.0) { dblDX[i] = dblDX[i] / dblDY[i]; } else { dblDX[i] = (double)1.0; } } /* // hoek verandering relativeren... // ?????? if (i>(int)0) { dblDT = dblDX[i]; dblDX[i] = dblDX[i] / dblDOld; dblDOld = dblDT; } else { dblDOld = dblDX[(int)0]; dblDX[(int)0] = (double)1.0; } */ dblTot = dblTot + dblDX[i]; } for (i=0;i0;mp--) { ptxy[mp] = ptxy[mp-1]; } ptxy[0] = xy; sprintf(szT, "%.10lf, %.10lf,\n", xy.dblXX, xy.dblYY); fputs(szT, fCalc); } } dblX = (double)i/(double)dxchk; xy = funcY(dblX, ptxy); for (mp=MAX_PTX-1;mp>0;mp--) { ptxy[mp] = ptxy[mp-1]; } ptxy[0] = xy; sprintf(szT, "%.10lf, %.10lf,\n", xy.dblXX, xy.dblYY); fputs(szT, fCalc); strcpy(szT, "\n\n\n"); fputs(szT, fCalc); fclose(fCalc); /* for (i=-10;i<=10;i++) { dblX = (double)i; dblY = pow(dblX,(double)3) + pow(dblX, (double)2) + dblX + pow (fabs(dblX),(double)0.5); sprintf(szT, "%.10lf, %.10lf,\n", dblX, dblY); fputs(szT, fCalc); } strcpy(szT, "\n\n\n"); fputs(szT, fCalc); fclose(fCalc); */ } LineFuncData.hDC = ps.hdc; SetTextAlign( ps.hdc, TA_BOTTOM ); LineDDA( 0, 0, 0, rect.bottom / 2, lpLineFunc, (LPSTR) &LineFuncData ); EndPaint( hWnd, &ps ); FreeProcInstance( lpLineFunc ); } PT_XY funcY(double dblXX, PT_XY ptx[MAX_PTX]) { double dblX2, dblYY, dblXH, dblYY2; PT_XY xy2, xyh; int mp,mps, mpg; dblXH = dblXX; dblXX = dblXX * (double)1.0 * M_PI; xy2.dblXX = dblXX * dblXX * cos(dblXX); xy2.dblYY = dblXX * sin(dblXX); // dblXX = dblXX * (double)0.5 * M_PI + (double)0.25 * M_PI; // xy2.dblXX = dblXX * dblXX; // xy2.dblYY = pow(sin(dblXX), (double)3.0); // dblXX = dblXX * (double)0.5 * M_PI; // xy2.dblXX = sin(dblXX); // xy2.dblYY = pow(cos(dblXX), (double)3.0); // dblXX = dblXX * M_PI; // xy2.dblXX = pow(dblXX, (double)2.0); // xy2.dblYY = sin(dblXX); // dblXX = dblXX * (double)4.0; // xy2.dblXX = sqrt(dblXX); // xy2.dblXX = pow(dblXX, (double)0.2); // dblXX = dblXX - (double)2.0; // xy2.dblYY = pow(dblXX, (double)5.0); // xy2.dblXX = dblXX; // dblXX = dblXX * (double)0.5 * M_PI; // xy2.dblYY = cos(dblXX); // if (dblXX >= (double)0.25 * M_PI) // { // dblXX = dblXX - (double)0.25 * M_PI; // xy2.dblYY = xy2.dblYY * pow(cos(dblXX), (double)2.0); // } // xy2.dblXX = (ptx[1].dblXX + ptx[6].dblXX) * 0.1 + (ptx[1].dblYY + ptx[6].dblYY) * 0.25; // xy2.dblYY = (ptx[2].dblYY + ptx[3].dblYY) * 0.25 + (ptx[2].dblXX + ptx[3].dblXX) * 0.1; // xy2.dblXX = sin(ptx[2].dblXX + cos(ptx[5].dblYY)); // xy2.dblYY = cos(0.5 * ptx[3].dblXX * ptx[5].dblXX); // xy2.dblXX = 3+fabs(sin(fabs(log(ptx[0].dblXX + ptx[5].dblYY)))); // xy2.dblYY = 3+fabs(cos(fabs(log(ptx[0].dblXX + ptx[10].dblYY)))); // xy2.dblXX = fabs(log10(ptx[0].dblXX + ptx[1].dblYY)); // xy2.dblYY = fabs(sqrt(ptx[0].dblXX + ptx[2].dblYY)); // xy2.dblXX = dblXX; // xy2.dblYY = sqrt(1-dblXX*dblXX); // xy2.dblXX = sqrt(ptx[4].dblXX + ptx[3].dblYY); // xy2.dblYY = ptx[2].dblXX + ptx[5].dblYY; // xy2.dblXX /= 100000000; // xy2.dblYY /= 100000000; // mps=20; // dblX2 = (double)0.0; // dblYY = (double)0.0; // for (mp=0;mp (double)0.0) { while (dblX > (double)0.0) { dblRet = dblRet * dblX; dblX = dblX - (double)2.0; } } return(dblRet); } double fFac(double dblX) { double dblRet; dblRet = (double)1.0; if (dblX > (double)0.0) { while (dblX > (double)0.0) { dblRet = dblRet * dblX; dblX = dblX - (double)1.0; } } return(dblRet); } double fWF1(double dblX, double dblN) { double dblRet, dblNN, dblTel, dblSGN; dblRet = (double)0.0; dblNN = (double)1.0; dblTel = (double)1.0; dblSGN = (double)1.0; while (dblTel <= dblN) { dblRet = dblRet + dblSGN * pow(cos(dblX), dblNN) / fFac(dblNN); dblSGN = dblSGN * (double)-1.0; dblNN = dblNN + (double)2.0; dblTel = dblTel + (double)1.0; } return(dblRet); } double fWF2(double dblX, double dblN) { double dblRet, dblNN, dblTel, dblSGN; dblRet = (double)0.0; dblNN = (double)2.0; dblTel = (double)1.0; dblSGN = (double)1.0; while (dblTel <= dblN) { dblRet = dblRet + dblSGN * pow(cos(dblX), dblNN) / fFac(dblNN); dblSGN = dblSGN * (double)-1.0; dblNN = dblNN + (double)2.0; dblTel = dblTel + (double)1.0; } return(dblRet); } /* double fWF1(double dblX, double dblN) { double dblRet, dblNN, dblTel, dblSGN; dblRet = (double)0.0; dblNN = (double)1.0; dblTel = (double)1.0; dblSGN = (double)1.0; while (dblTel <= dblN) { dblRet = dblRet + dblSGN * sin(dblX*dblNN) / (dblNN * dblNN); dblSGN = dblSGN * (double)-1.0; dblNN = dblNN + (double)2.0; dblTel = dblTel + (double)1.0; } return(dblRet); } */