#include
#include
#include
#include
#include
#include
#include
#include
#define XMIN 10
#define XMAX 380
#define YMIN 10
#define YMAX 320
void graph (float *,float *,int ,int *,int *,int *,float *,);
void mashtab (float * ,float *,float * ,int * , int *);
minless(float);
float ratg (float, float);
float ratl (float, float);
float alg (float);
void myfont(int ,int ,float ,unsigned char * ,int ,int );
void fnt(int ,int ,int );
unsigned char v_m();
void graph (xx,yy,nlines,npoints,col,coordgr,bound,title,names)
float bound[4];
int nlines,* npoints,* col,coordgr[4];
float *xx, *yy;
unsigned char title[2][20],* names;
{
/*
xx,yy -массивы коодинат
nlines -количество линий
npoints - массив с количеством точек по линиям
col - массив цветов
coordgr - массив кооpдинат поля
title[2][20] - наименование осей
names - названия кpивых
*/
int xm,ym;
struct xycoord view;
float xmax,ymax,xmin,ymin,gstepx,gstepy,l,ll,kx,ky;
int nx,ny,j,i,ii,npmax=0,npx,npxx,npyy,npp,nppn;
char point[4][2][9]={
-2,-1, 0, 1, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0,-2,-1, 1, 0,
-2,-1, 2, 1, 2,-2,-1, 1, 0, -2,-1,-2, 1, 2, 2, 1,-1, 0,
-2,-1, 0, 1, 2, 1, 0,-1, 0, 0,-1,-2,-1, 0, 1, 2, 1, 0,
-1, 0, 1, 1, 1, 0,-1,-1, 0, -1,-1,-1, 0, 1, 1, 1, 0, 0 };
/* так как из фортрана получаем строки без \0*/
// попробуем определить, в каком режиме мы находимся
v_m(&xm,&ym);
// xm=640;
// ym=480;
if (strlen(title[0])>20)
{
for (i=18;title[0][i]==' ';i--);
title[0][i+1]='\0';
}
if (strlen(title[1])>20)
{
for (i=18;title[1][i]==' ';i--);
title[1][i+1]='\0';
}
for (i=0;inpmax) npmax=npoints[i];
if (bound[1]<=bound[0] | bound[2]>=bound[3])
{
xmax=xx[0];
xmin=xx[0];
ymax=yy[0];
ymin=yy[0];
for(j=0;j=xx[npx+i])
xmin=xx[npx+i];
if (ymax<=yy[npx+i])
ymax=yy[npx+i];
else
if (ymin>=yy[npx+i])
ymin=yy[npx+i];
}
}
}
else
{
xmin=bound[0];
xmax=bound[1];
ymin=bound[2];
ymax=bound[3];
}
/* определение масштаба по обоим осям*/
if(xmax==xmin) exit(1);
mashtab(&xmax, &xmin, &gstepx, &nx, &npxx);
mashtab(&ymax, &ymin, &gstepy, &ny, &npyy);
_setcolor(3);
/* вертикальная сетка*/
l=(xmax-xmin)/nx;
ll=(coordgr[2]-coordgr[0]-30.)/nx;
_setviewport(0,0,xm-1,ym-1);
_setlinestyle(0xF0F0);
myfont( coordgr[2]-9,coordgr[3]-7,xmax,"",col[0],npxx);
for(i=0;i5 && npoints[j]<10) npp=npoints[j]/2;
else if ( npoints[j]<30) npp=npoints[j]/5;
else if ( npoints[j]<100) npp=npoints[j]/10;
else if ( npoints[j]<150) npp=npoints[j]/15;
_moveto_w (xx[npx],yy[npx]);
_setcolor(col[j]);
for(i =nppn=1;inpp)
{
view = _getcurrentposition();
nppn=0;
for (ii=0;ii<9;ii++)
_setpixel_w(xx[npx+i]+kx*point[j][0][ii],yy[npx+i]+ky*point[j][1][ii]);
}
*/
}
// А теперь сбоку что есть что
// _moveto(coordgr[2]-coordgr[0]-60,coordgr[3]-coordgr[1]-30-(coordgr[3]-coordgr[1]-15)/20*j);
// _lineto(coordgr[2]-coordgr[0]-50,coordgr[3]-coordgr[1]-30-(coordgr[3]-coordgr[1]-15)/20*j);
// for (ii=0;ii<9;ii++)
// _setpixel(coordgr[2]-coordgr[0]-50+point[j][0][ii],coordgr[3]-coordgr[1]-30-(coordgr[3]-coordgr[1]-15)/20*j+point[j][1][ii]);
// _lineto(coordgr[2]-coordgr[0]-40,coordgr[3]-coordgr[1]-30-(coordgr[3]-coordgr[1]-15)/20*j);
// fnt(j,coordgr[2]-coordgr[0]-39,coordgr[3]-coordgr[1]-33-(coordgr[3]-coordgr[1]-15)/20*j);
}
_setviewport(0,0,xm-1,xm-1);
}
float ratg (float x, float n)
{
return ( (int)(x / n + .9999999) * n);
}
float ratl (float x, float n)
{
return (minless(x/n) * n);
}
float alg (float x)
{
if (x==0)
return 0;
else
return(log10(x));
}
void mashtab (xmax, xmin, gstep, n, n_d)
/* 'допустимые значения шагов*/
float * xmax,* xmin, * gstep;
int * n, *n_d;
{
float h[4],delta,delta1;
int k,i,numb,n_l[4];
h[0] = 1; n_l[0]=1;
h[1] = .5; n_l[1]=2;
h[2] = .25; n_l[2]=3;
h[3] = .2; n_l[3]=2;
delta = * xmax - * xmin;
k = minless(alg(delta));
//printf("\nmashtab\nxmin=%f, xmax=%f",*xmin,*xmax);
//printf("delta=%f,pow(10,k)=%f",delta,pow(10,k));
//printf("\ndelta/pow(10,k)=%f",delta/pow(10,k));
delta1 = delta /pow(10, k) + 1.;
//printf("\ndelta1=%.20f",delta1);
delta1=(int)delta1;
if (delta1>=5)
{
* gstep = 1;
* n_d=2;
}
else
for (i = 1;i< 4;i++)
{
numb = (int)(delta1 / h[i] + .999999);
if (numb>11) goto m1;
if (numb>5)
{
*gstep = h[i];
*n_d = n_l[i]+1;
goto m1;
}
}
m1:
/* 'xmin = ближайшему меньшему кратному шагу*/
* gstep = * gstep * pow(10,k);
* xmin = ratl(*xmin, *gstep);
* xmax = ratg(*xmax, *gstep);
* n = (int)( (* xmax - * xmin) / * gstep+.5);
//printf("\nxmin=%f, xmax=%f, gstep=%f, n=%d, n_p=%d",*xmin,*xmax,*gstep,*n,*n_d);
}
minless(float x)
{
if ( x<=0 & (int)x!=x )
return(int)(x-1.);
else
return(int)(x);
}
void myfont( int xc,int yc,float n,unsigned char * text,int col,int np)
{
unsigned int i,j;
unsigned char numbuf[20];
float a;
char c[10];
if (np<20)
{
gcvt( n,np, numbuf );/* это число */
np=(np>strlen(numbuf))? strlen(numbuf): np;
for (i=0;i14 ) return;
_moveto(x+fntx[n][1],y+fnty[n][0]);
for(i=1;i 0 )
{
strcpy( list, "t'Courier'h10w8b" );
if( _setfont( list ) > 0 )
{
int x=XMAX+20,y;
//_setgtextvector( 1, 0 );
_moveto( x, 10 );
_outgtext("REGIONS:" );
_moveto( x, 25 );
_outgtext("1 - critical," );
_moveto( x, 50 );
_outgtext("2 - U-type beta distribution," );
_moveto( x, 75 );
_outgtext("3 - J-type beta distribution," );
_moveto( x, 100 );
_outgtext("4 - beta distribution," );
_moveto( x, 125 );
_outgtext("DISTRIBUTIONS:" );
_moveto( x, 150 );
_outgtext("5 - even distribution," );
_moveto( x, 175 );
_outgtext("6 - normal distribution," );
_moveto( x, 200 );
_outgtext("7 - exponential distribution" );
_moveto( x, 225 );
_outgtext("8 - gamma distribution," );
_moveto( x, 250 );
_outgtext("9 - logarithm normal distribution," );
_moveto( x, 275 );
_outgtext("10 - STUDENT distribution" );
}
}
_setcolor(7);
_moveto(322,85);
_outgtext("1");
_moveto(219,109);
_outgtext("2");
_moveto(321,192);
_outgtext("3");
_moveto(137,132);
_outgtext("4");
_moveto(40,63);
_lineto(70,25);
_outgtext("5");
_moveto(40,98);
_lineto(52,133);
_outgtext("6");
_moveto(380,276);
_lineto(326,282);
_outgtext("7");
_moveto(169,166);
_lineto(134,194);
_outgtext("8");
_moveto(265,255);
_lineto(225,254);
_outgtext("9");
_moveto(50,190);
_outgtext("10");
getch();
_setvideomode(_DEFAULTMODE);
}