📄 unit2.h
字号:
delete[] lattice;
};
void myprintCirc(char *s,double* a,int dim,int h)
{int i; double max=a[0], min=a[0];
for(i=1;i<dim;i++)
{if (max<a[i]) max=a[i];
if (a[i]<min) min=a[i];
};//end for i
PC(a,0,dim-1);
int j, **lattice=new int*[h];
for (j=0;j<h;j++)
{lattice[j]=new int[dim];
for(i=0;i<dim;i++) (lattice[j])[i]=0;
}//end for j
double r=fabs(max-min);if(abs(r) < 1E-30)r=1;
for(i=0;i<dim;i++)
(lattice[round((h-1)*(a[i]-min)/r)])[i]=1;
printf("___________circus_%s___min=_%f__max=%f___dim=%d:_____\n",
s,min,max,dim);
for (j=h-1;j>=0;j--)
{for(i=0;i<dim;i++)
if ((lattice[j])[i]) {printf("*");} else printf(" ");
printf("\n");
};//end for j
printf("----it was circus %s min= %f max=%f dim=%d ----- \n",
s,min,max,dim);
for (j=0;j<h;j++) delete[] (lattice[j]);
delete[] lattice;
};
void myprintCirc(char *s,int* a,int dim,int h)
{int i; int max=a[0], min=a[0];
for(i=1;i<dim;i++)
{if (max<a[i]) max=a[i];
if (a[i]<min) min=a[i];
};//end for i
int j, **lattice=new int*[h];
for (j=0;j<h;j++)
{lattice[j]=new int[dim];
for(i=0;i<dim;i++) (lattice[j])[i]=0;
}//end for j
int r=abs(max-min);if(r EQ 0)r=1;
for(i=0;i<dim;i++)
(lattice[round((h-1)*(a[i]-min)/r)])[i]=1;
printf("___________circus_%s___min=_%d__max=%d___dim=%d:_____\n",
s,min,max,dim);
for (j=h-1;j>=0;j--)
{for(i=0;i<dim;i++)
if ((lattice[j])[i]) {printf("*");} else printf(" ");
printf("\n");
};//end for j
printf("----it was circus %s min= %d max=%d dim=%d ----- \n",
s,min,max,dim);
for (j=0;j<h;j++) delete[] (lattice[j]);
delete[] lattice;
};
void myprint(char *s,float* a,
int xlength,int ylength,
int spaceForElement)
{ int var;float fvar;
int vol=xlength*ylength;int i; float max=float(0),min;
printf(" arr2D float %s[lenx=%d,leny=%d]",
s,xlength,ylength);
{ max=a[0]; for (i=1;i<vol;i++)
if (max<a[i]) max=a[i];
printf(" max= %f",max);
};if (max==0) max++;
{ min=a[0]; for (i=1;i<vol;i++)
if (min>a[i]) min=a[i];
printf(" min= %f",min);
};
printf("\n");
for (i=0;i<vol;i++)
{if (spaceForElement==1)
var=int(floor(9.99*(a[i]-min)/(max-min)));
else fvar=a[i];
if (spaceForElement==1)
printf("%d",var); else
if (spaceForElement==2)
printf("% 3.1f",fvar); else
if (spaceForElement==3)
printf("% 4.1f",fvar); else
if (spaceForElement==4)
printf("% 5.1f",fvar); else
if (spaceForElement==5)
printf("% 6.1f",fvar); else printf(" %f",fvar);
if (((i+1) % xlength)==0) printf("\n");
}
};
void viewCutter(unsigned char*retina2D,int xSize,int ySize,int xScreen,int yScreen)
{NPS("viewCutter: ");PV(xSize);PV(ySize);
int xTimes= xSize/xScreen;
int yTimes= ySize/yScreen,rTimes=xTimes*yTimes;
PV(xTimes);PV(yTimes);
int xSizeCut=xSize/xTimes,ySizeCut=ySize/yTimes;
int *ret2DCut=new int[xSizeCut*ySizeCut];
int i,j; for(i=0;i<xSizeCut;i++)for(j=0;j<ySizeCut;j++)
{int sum=0; int ii,jj;
for(ii=i*xTimes;ii<(i+1)*xTimes;ii++)
for(jj=j*yTimes;jj<(j+1)*yTimes;jj++)sum+=retina2D[ii+jj*xSize];
sum=round(sum/(rTimes+0.0));
ret2DCut[i+j*xSizeCut]=sum;
};
P2D(ret2DCut,xSizeCut,ySizeCut,1);
PS("viewCutter END. ");//delete[] ret2DCut;
};// END viewCutter
double *ret2DCut;
void viewCutter(double*retina2D,int xSize,int ySize,int xScreen,int yScreen)
{NPS("viewCutter: ");PV(xSize);PV(ySize);
int xTimes= xSize/xScreen;if (xTimes EQ 0) xTimes=1;
int yTimes= ySize/yScreen;if (yTimes EQ 0) yTimes=1;int rTimes=xTimes*yTimes;
PV(xTimes);PV(yTimes);
int xSizeCut=xSize/xTimes,ySizeCut=ySize/yTimes;
ret2DCut=new double[xSizeCut*ySizeCut];
int i,j; for(i=0;i<xSizeCut;i++)for(j=0;j<ySizeCut;j++)
{double sum=0; int ii,jj;
for(ii=i*xTimes;ii<(i+1)*xTimes;ii++)
for(jj=j*yTimes;jj<(j+1)*yTimes;jj++)sum+=retina2D[ii+jj*xSize];
sum=sum/(rTimes+0.0);
ret2DCut[i+j*xSizeCut]=sum;
};
P2D(ret2DCut,xSizeCut,ySizeCut,1);
PS("viewCutter END. ");//delete[] ret2DCut;
};// END viewCutter
double *retD;
void viewCutter(int*retina2D,int xSize,int ySize,int xScreen,int yScreen)
{retD=new double [xSize*ySize];int i;
for(i=0;i<xSize*ySize;i++) retD[i]=round(retina2D[i]);
viewCutter(retD,xSize,ySize,xScreen,yScreen);
}//END.
//%%%%%%%%%%%%%%%%%%%%%%% Fast integer abs,min,max:
#define ABS(a) ((a>0)?a:-a)
#define ABSI(a) (a-((a+a)&(a>>31)));
#define MINI(a,b) (b=a-b,a -= b & (b>>31))
static int int_max(int a, int b) {
b = a-b;
a -= b & (b>>31);
return a;}
static int int_abs(int a) {
return a - ((a+a) & (a>>31));}
static int int_min(int a, int b) {
b = b-a;
a += b & (b>>31);
return a;}
//%%%%%%%%%%%%%%%%%%%%%%% Write pgm "P2" from "int *", Ngray <=255
void pgmP2Write(char *fullname,
int xSize, int ySize,
unsigned char *retina2D)
{ FILE *pgmPict;
pgmPict=fopen(fullname,"w");
fprintf(pgmPict,"P2\n");fprintf(pgmPict,"%d %d\n%d\n",xSize,ySize,255);
int rSize=xSize*ySize;
int i;for(i=0;i<rSize;i++) {fprintf(pgmPict,"%d ",retina2D[i]);}
fclose(pgmPict);
};//END void pgmP2Write
//%%%%%%%%%%%%%%%%%%%%%%% Write double matrix for reading by matlab's "textread"
void writeMatrixDouble(char*matrixfile,
int xSize,int ySize,double*matrix)
{ FILE *fl;
if( (fl = fopen(matrixfile,"w")) == NULL )
{printf("\n\7 ???File '%s' was not opened\n",matrixfile );exit(1);}
int i,j,k=0;//i goes along rows
for(j=0;j<ySize;j++)
{fprintf(fl,"\n");//this pre-delimiter style is important!
for(i=0;i<xSize;i++) //fprintf(fl," %e",matrix[k++]);
fprintf(fl," %.3e",matrix[k++]);
}
fclose(fl);
};//END void writeMatrixDouble
void writeAllCircDouble(char*cfile,
int LtrList, int LdiList, int N2pi, double **circ)
{ FILE *fl;
if( (fl = fopen(cfile,"w")) == NULL )
{printf("\n\7 ???File '%s' was not opened\n",cfile );exit(1);}
int nf,cf,i;
for (nf=0;nf<LtrList;nf++)//loop along trace matrices
for (cf=0;cf<LdiList;cf++)//loop along diam. functionals
{double*c=circ[nf]+cf*N2pi; //a particular circus
for(i=0;i<N2pi;i++)fprintf(fl," %.3e",c[i]);
}
fclose(fl);
};//END void writeMatrixDouble
//%%%%%%%%%%%%%%%%%%%%%%% Write pgm "P5" from "int *", Ngray=255
void pgmP5Write(char *fullname,
int xSize, int ySize,
unsigned char *retina2D)
{ FILE *pgmPict;
pgmPict=fopen(fullname,"wb");
fprintf(pgmPict,"P5\n");fprintf(pgmPict,"%d %d\n%d\n",xSize,ySize,255);
int rSize=xSize*ySize;
fwrite(retina2D,1,rSize,pgmPict);
//int i;for(i=0;i<rSize;i++)fputc((retina2D[i]),pgmPict);
fclose(pgmPict);
};//END void pgmP2Write
//%%%%%%%%%%%%%%%%%%%%%%% Write in bytes
void writeMatrixSmall(char *matrixfile,
int xSize, int ySize, double *matrix)
{ FILE *fl;
if( (fl = fopen(matrixfile,"wb")) == NULL )
{printf("\n\7 ???File '%s' was not opened\n",matrixfile );exit(1);}
int rSize=xSize*ySize;
double max=matrix[0],min=matrix[0],m;int r;
for(r=1;r<rSize;r++){m=matrix[r];if(m>max)max=m;if(m<min)min=m;}
double delta=max-min,Co; if (delta EQ 0) Co=1; else Co=255*1.0/delta;
unsigned char ss,k,u,v; packdouble(min,&ss,&k,&u,&v);
fputc(ss,fl);fputc(k,fl);fputc(u,fl);fputc(v,fl);
packdouble(delta,&ss,&k,&u,&v);
fputc(ss,fl);fputc(k,fl);fputc(u,fl);fputc(v,fl);
for(r=0;r<rSize;r++)
fputc(round(Co*(matrix[r]-min)),fl);
fclose(fl);
};//END
void readMatrixSmall(char *matrixfile,
int xSize, int ySize, double *matrix)
// it is assumed that xSize and ySize are known
// and memory for matrix is allocated
{ FILE *fl;
if( (fl = fopen(matrixfile,"rb")) == NULL )
{printf("\n\7 ???File '%s' was not opened\n",matrixfile );exit(1);}
int rSize=xSize*ySize; unsigned char *umat=new unsigned char[8+rSize];
fread (umat, 1, 8+rSize,fl);
double min=unpackdouble(umat[0],umat[1],umat[2],umat[3]);
double delta=unpackdouble(umat[4],umat[5],umat[6],umat[7]);
int r;
for(r=0;r<rSize;r++){matrix[r]=min+(umat[r+8]/255.0 * delta);}
fclose(fl);
delete[]umat;
};//END
////-------------
void writeAllCircByParts(char *cfile, //"a part" has length N2pi
int LtrList, int LdiList, int N2pi, double **circ)
{ FILE *fl;
if( (fl = fopen(cfile,"wb")) == NULL )
{printf("\n\7 ???File '%s' was not opened\n",cfile);exit(1);}
int nf,cf;
for (nf=0;nf<LtrList;nf++)//loop along trace matrices
for (cf=0;cf<LdiList;cf++)//loop along diam. functionals
{double*c=circ[nf]+cf*N2pi; //a particular circus
double max=c[0],min=c[0],m; int r;
for(r=1;r<N2pi;r++){m=c[r];if(m>max)max=m;if(m<min)min=m;}
double delta=max-min,Co; if (delta EQ 0) Co=1; else Co=255*1.0/delta;
unsigned char ss,k,u,v; packdouble(min,&ss,&k,&u,&v);
fputc(ss,fl);fputc(k,fl);fputc(u,fl);fputc(v,fl);
packdouble(delta,&ss,&k,&u,&v);
fputc(ss,fl);fputc(k,fl);fputc(u,fl);fputc(v,fl);
for(r=0;r<N2pi;r++) fputc(round(Co*(c[r]-min)),fl);
}
fclose(fl);
};//END
void readAllCircByParts(char *cfile, //"a part" has length N2pi
int LtrList, int LdiList, int N2pi, double **circ)
// it is assumed that LtrList,LdiList,N2pi are known
// and memory for circ is allocated
{ FILE *fl;
if( (fl = fopen(cfile,"rb")) == NULL )
{printf("\n\7 ???File '%s' was not opened\n",cfile );exit(1);}
int nf,cf,r=0, rSize= LtrList*LdiList*(8+N2pi);
unsigned char *umat=new unsigned char[rSize];
fread (umat, 1, rSize,fl);
for (nf=0;nf<LtrList;nf++)//loop along trace matrices
for (cf=0;cf<LdiList;cf++)//loop along diam. functionals
{double*c=circ[nf]+cf*N2pi, //a particular circus
min=unpackdouble(umat[r],umat[r+1],umat[r+2],umat[r+3]),
delta=unpackdouble(umat[r+4],umat[r+5],umat[r+6],umat[r+7]);
r=r+8;
int i;for(i=0;i<N2pi;i++){c[i]=min+(umat[r++]/255.0 * delta);}
}
fclose(fl);
delete[]umat;
};//END
////-------------
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
unsigned char *pgmRead(char *fullname, int *pxSize, int *pySize)
//reads pgm P2 (text) and P5 (char); Ngray<=255 only
{
FILE *pgmFile;
if( (pgmFile = fopen( fullname, "rb" )) == NULL )
{printf("\n\7 ???File '%s' was not opened\n",fullname );exit(1);}
char line[100],shouldBeP25[2]; line[0]='#';
int made,allmade=-1; int numbers[3];
while(line[0]=='#') fgets(line, 100, pgmFile);//fscanf(pgmFile,"%[^\n]\n",line);
made=sscanf(line,"%2s %d %d %d",shouldBeP25,numbers,numbers+1,numbers+2);//matlab style of pgm
allmade += made; int P=0;
if(strCompare(shouldBeP25,"P2"))P=2;if(strCompare(shouldBeP25,"P5"))P=5;
if (!((P EQ 2) || (P EQ 5)))
{printf(" image file %s is not P2 or P5 \n",fullname);PAU}
while (allmade<3)
{ fgets(line, 100, pgmFile);//fscanf(pgmFile,"%[^\n]\n",line);
if (line[0] EQ '#') continue;
int num[3];
int made1=sscanf(line,"%d %d %d",num,num+1,num+2);
int i=0; for(i=0;i<made1;i++) *(numbers+allmade+i)=*(num+i);
allmade += made1;
}
*pxSize=numbers[0];*pySize=numbers[1];int Ngray=numbers[2];
if (Ngray>255)
{printf("\n\7 ???File '%s' is not 255 gray image\n",fullname);exit(1);}
int rSize=(*pxSize)*(*pySize);
unsigned char *retina2D=new unsigned char [rSize];
//unsigned char *ret=retina2D;
int u;
if(P EQ 2)for(int i=0;i<rSize;i++)
{
fscanf(pgmFile,"%d",&u);//fscanf(pgmFile,"%d",retina2D+i);
retina2D[i]= (unsigned char) (u);
}
if(P EQ 5) fread (retina2D, 1, rSize, pgmFile);
fclose(pgmFile);
return(retina2D);
};//END.
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
unsigned char*pgmRead0(int rSize0,unsigned char*retina2D,char *fullname, int *pxSize, int *pySize)
//reads pgm P2 (text) and P5 (char); Ngray<=255 only
//reads into existing array or creates bigger one
{
FILE *pgmFile;
if( (pgmFile = fopen( fullname, "rb" )) == NULL )
{printf("\n\7 ???File '%s' was not opened\n",fullname );exit(1);}
char line[100],shouldBeP25[2]; line[0]='#';
int made,allmade=-1; int numbers[3];
while(line[0]=='#') fgets(line, 100, pgmFile);//fscanf(pgmFile,"%[^\n]\n",line);
made=sscanf(line,"%2s %d %d %d",shouldBeP25,numbers,numbers+1,numbers+2);//matlab style of pgm
allmade += made; int P=0;
if(strCompare(shouldBeP25,"P2"))P=2;if(strCompare(shouldBeP25,"P5"))P=5;
if (!((P EQ 2) || (P EQ 5)))
{printf(" image file %s is not P2 or P5 \n",fullname);PAU}
while (allmade<3)
{ fgets(line, 100, pgmFile);//fscanf(pgmFile,"%[^\n]\n",line);
if (line[0] EQ '#') continue;
int num[3];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -