新四季網

利用多種傳感技術的手寫輸入設備的製作方法

2023-07-26 04:07:16 1

>I.從裝置中讀出<![CDATA[/*這個程序同步地從圖形書寫板和加速度計中讀數據intread_point_tablet_pen(unsignedportbase,intread_pen,  structpoint_tablet*tablet,  structpoint_penpen[8]){intind_package=0,reply,debug[10],i;unsignedcharpackage[7]={0,0,0,0,0,0,0);if(read_pen)  read_point_pen(pen);i=0;/*Waitingforsynchro-bit*/do{if((reply=SerGetChar(portbase))<0)  returnreply;debug[i++]=reply;if((package=(char)reply)SYNCROBIT)  break;}while(ind_package++<10);/*Error-Nosynchro-bitin10bytes*/if(ind_package>=10)  returnSER_SYNCROBIT;/*從書寫板中讀下面的6個字節,及從加速度計中讀6點for(ind_package=1;ind_package<7;ind_package++){if(read_pen){  read_point_pen(pen[ind_package]);}if((reply=SerGetChar(portbase))<0)  returnreply;package[ind_package]=(char)reply;}/*讀加速度計中最後的點*/if(read_pen)  read_point_pen(pen[ind_package]);/*計算書寫板的信號值*/tablet->x=(package0×03)<<14;tablet->x+=(package[1]0×7f)<<7;tablet->x+=(package[2]0×7f);if(package0×04)  tablet->x=-tablet->x;tablet->y=(package[3]0×03)<<14;tablet->y+=(package[4]0×7f)<<7;tablet->y+=(packaqe[5]0×7f);tablet->p=0;if(!(package0×40))  tablet->p=99;if(package[3]0×04)  tablet->y=-tablet->y;if(package[6]0×20)  tablet->p=(package[6]0×1f);return0;}]]>II.預處理III.參數提取<![CDATA[/*根據輸入入信號計算一個符號的參數。*/intmake_par(chararg_ch){structpoint{unsignedintx12;unsignedinty12;unsignedintz12;unsignedintpen4;}point,points[500];intread_next_symbol(FILE*,structpoint[]);charfile_name[40];intlen,number_points=0;FILE*in_file,*out_file[10],*out_letter,*out_bin;floatparam[6][NUMBER_POINT],sum_par[6][NUMBER_POINT];intindex=0,max_point;intind,start;intcur_x,cur_y,cur_z,cur_p;floatarr_x[MAX_POINT],arr_y[MAX_POINT],arr_z[MAX_POINT],arr_p[MAX_POINT];/*初始化結果陣列到零*/for(ind=0;ind<6;ind++)  for(index=0;index<NUMBER_POINT;index++){  param[ind][index]=0.0;  sum_par[ind][index]=0.0;  }/*識別數據的文件*/sprintf(file_name,*%03d.smb*,(int)arg_ch);if((in_file=fopen(file_name,"rb"))==NULL){  strcpy(ext_err,file_name);  return-4;}start=0;/*讀文件的數據*/while((max_point=read_next_symbol(in_file,points))>0){for(index=0;index<max_point;index++){  arr_x[index]=(float)points[index].x;  arr_y[index]=(float)points[index].y;  arr_z[index]=(float)points[index].z;  arr_p[index]=(float)points[index].pen;}arr_p=arr_p[max_point-1]=1;start++;number_points+=max_point;/*調用Make_par_let程序計算參數1-6make_par_let(arr_x,arr_y,arr_z,arr_p,param,max_point-1./*計算每個參數的平均值*/for(ind=0;ind<6;ind++)for(index=0;index<NUMBER_POINT;index++)(  sum_par[ind][index]+=param[ind][index];}}for(ind=0;ind<6;ind++)for(index=0;index<NUMBER_POINT;index++)  sum_par[ind][index]/=start;sum_par=(float)number_points/start;fclose(in_file);/*writeavginBinaryfile*/sprintf(file_name,"%03d.par",(int)arg_ch);out_letter=fopen(file_name,"wb+");for(index=0;index<6;index++)  fwrite(sum_par[index],sizeof(float),NUMBER_POINT,out_letter);fclose(out_letter);returnstart;}voidmake_par_let(floatarr_x[],floatarr_y[],floatarr_z[],  floatarr_p[],fioatparam[6][NUMBER_POINT],intmax_point){floatend_smooth;floatnew_arr_x[500],new_arr_y[500],new_arr_z[500],new_arr_p[500];intind,index;/*調用用戶預處理*/normal(max_point,arr_x,NUMBER_POINT,new_arr_x);normal(max_point,arr_y,NUMBER_POINT,new_arr_y);normal(max_point,arr_z,NUMBER_POINT,new_arr_z);normal(max_point,arr_p,NUMBER_POINT,new_arr_p);max_point=NUMBER_POINT;for(ind=0;ind<max_point;ind+++){  arr_x[ind]=new_arr_x[ind];  arr_y[ind]=new_arr_y[ind];  arr_z[ind]=new_arr_z[ind];  arr_p[ind]=new_arr_p[ind];}while((end_smooth=smooth1(max_point,arr_x))>NUMBER_POINT/10);while((end_smooth=smooth1(max_point,arr_y))>NUMBER_POINT/10);while((end_smooth=smooth1(max_point,arr_z))>NUMBER_POINT/10);/*lnitializationofparameters*/param=(float)arr_pparam[1]=(arr_z-arr_z);param[2]=0.0;param[3]=0.0;param[4]=0.0;param[5]=0.0;param[1]=(float)arr_p[1]/*Calculationofparameters*/param[1][1]=(arr_z[1]-arr_z);elev(arr_x[2]-arr_x,arr_y[2]-arr_y,arr_z[2]-arr_z,  param[2][1],param[3][1]);param[4][1]=0.0;param[5][1]=0.0;for(index=2;index<max_point-2;index++)[  param[index]=(float)arr_p[index];  param[1][index]=(arr_z[index]-arr_z);elev(arr_x[index+1]-arr_x[index-1],arr_y[index+1]-arr_y[index-1],arr_z[index+1]-arr_z[index-1]  param[2][index],param[3][index]);angles(arr_x[index+2]-arr_x[index],  arr_y[index+2]-arr_y[index],  arr_z[index+2]-arr_z[index],  arr_x[index]-arr_x[index-2],  arr_y[index]-arr_y[index-2],  arr_z[index]-arr_z[index-2],  param[4][index],param[5][index]);index=index;}param[index]=(float)arr_p[index];param[1][index]=(arr_z[index]-arr_z);elev(arr_x[index+1]-arr_x[index-1],arr_y[index+1]-arr_y[index-1],arr_z[index+1]-arr_z[index-1],  param[2][index],param[3][index]);param[4][index]=0.0;param[5][index]=0.0;index++;/*Calculationofparametersforlastpoint*/param[index]=(float)arr_p[index];param[1][index]=(arr_z[index]-arr_z);param[2][index]=0.0;param[3][index]=0.0;param[4][index]=0.0;param[5][index]=0.0;/*該程序用於計算上升角的正弦和餘弦*/voidelev(floatx,floaty,floatz,float*cos_ug,float*sin_ug){floatnorma;norma=(float)sqrt(x*x+y*y+z*z);if(norma<.00001){*cos_ug=0.0;*sin_ug=0.0;return;}*cos_ug=((float)sqrt(x*x-/*y))/norma*sm_ug=z/norma;return;}]]>/*該程序計算β角的正弦和餘弦*/voidangles(floatx1,floaty1,floatz1,floatx2,floaty2,floatz2,float*cos_ug,float*sin_ug){floatnorma1,norma2,x3,y3,z3;norma1=(float)sqrt(x1*x1+y1*y1+z1*z1);norma2=(float)sqrt(x2*x2+y2*y2+z2*z2);if(norma1<.0001‖norma2<.0001){*cos_ug=0.0;*sm_ug=0.0;return;}*cos_ug=(x1*x2+y1*y2+z1*z2)/norma1/norma2;x3=(y1*z2-z1*y2);y3=(x2*z1-x1*z2);z3=(x1*y2-x2*y1);*sin_ug=((float)sqrt(x3*x3+y3*y3+z3*z3))/norma1/norma2;return;}IV.訓練程序<![CDATA[/*初級教導程序**/intfirst_teach(void){FILE*fp;FILE*fpout;inti;charbuf[4],NdxStr[4],symbols[256];intndx=0,max_symb=0intnum_sym;comment("convertingdatafiles,pleasewait",0,1);if((fp=fopen("symbols.dat」,"r"))==NULL){strcpy(ext_err,"symbols.dat");hide_comment("convertingdatafiles,pleasewait",0);return(-4);}while(fscanf(fp,"%s",buf)>0)symbols[max_symb++]=buf;fclose(fp);fpout=fopen("text.adp","w");for(ndx=0;ndx<max_symb;ndx++){sprintf(NdxStr,"%03d",ndx);if((num_sym=make_par(symbols[ndx]))<=0){hide_comment("convertingdatafiles,pleasewait",0);return(num_sym);}elsefor(i=0;i<num_sym;i++)  fprintf(fpout,"%c",symbols[ndx]);}fclose(fpout);hide_comment("convertingdatafiles,pleasewait",0);return(0);}/*適用的原型的程序*/floathuge*all_par[100];intfirst_adap(void){floatold_rec,new_rec;intcount=0,temp;char*text;charstr[80];if((temp=read_text("try.txt",text))<0)return(temp)read_param;new_rec=recogn("try.prl,text,0,0);sprintf(str,"%3f-beforeadaptation",new_rec);comment(str,-1,1);do{if(new_rec<0){hide_comment(str,-1);while(all_par[temp]!=NULL){  farfree(all_par[temp++]);}return((int)new_rec);}if(new_rec>.995)break;old_rec=new_rec;new_rec=recogn("try.prl",text,1,0);if(new_rec<0){hide_comment(str,-1);while(all_par[temp]!=NULL){  farfree(all_par[temp++]);}return((int)new_rec);}hide_comment(str,-1);sprintf(str,「%3f-inadaptation",new_rec);comment(str,-1,1);new_rec=recogn("try.prl",text,0,0);hide_comment(str,-1);sprintf(str,"%3f-afteradaprion」,new_rec);comment(str,-1,1);if(new_rec<0){  hide_comment(str,-1);  while(all_par[temp]!=NULL){  farfree(all_par[temp++]);  }  return((int)new_rec);}}while(fabs(old_rec-new_rec)>.005count++<9);hide_comment(str,-1);farfree(text);while(all_par[temp]!=NULL){farfree(all_par[temp++]);}return0;}]]>V.符號的識別<![CDATA[structpoint(unsignedintx12;unsignedinty12;unsignedintz12;unsignedintpen4;};structreply{intndx;floatweight;};floatrecogn(char*file_pen,char*text,intadapt,intwords){floatold_rec,new_rec,probs[10][20];intcount=0;charsymbols[256],buf[4];unsignedlongttt;intmax_symb;FILE*in_file,*file_symb,*temp_word;intsymb;unsignedlongstart_word,end_word;floatparam[6][NUMBER_POINT];intindex=0,max_point;structreply*repl;inttemp;intNgood=0;intind,NumSymbols,ndx;structpointsymb_pnts[MAX_POINT];floatarr_x[MAX_POINT],arr_y[MAX_POINT],arr_z[MAX_POINT],arr_p[MAX_POINT];intmap[256];intorder=0;charletters[10][20],dict_wrds[10][20];intend_of_word=0;intwrdlen;floatsum[10],maxsum,ndx_maxsum;charorg_wrd[20],f_word[20];inttxt_width;inti;if((file_symb=fopen("symbols.dat","r"))==NULL){strcpy(ext_err."symbolsdat");return(-4);}for(ind=0;ind<256;ind++)mad[ind]=-1;max_symb=0;while(fscanf(file_symb,"%s",buf)>0){map[buf]=max_symb;symbols[max_symb++]=buf;}fclose(file_symb);symbols[max_symb]=0;for(ind=0ind<6ind++)for(index=0index<NUMBER_POINT;index++){  param[ind][index]=0.0;}if((in_file=fopen(file_pen,"rb"))==NULL){strcpy(ext_err,file_pen);return-4;}index=0NumSymbols=0;symb=-1;  if(adapt)  repl=make_corr(param,symbols,symb);  else{  repl=make_corr(param,symbols,-1);  }  if(repl.ndx<0)  return(repl.weight);  if(repl.ndx==symb)  Ngood++;  else  Ngood=Ngood;  }fclose(in_file);if(NumSymbols==0)return0;  elsereturn(Ngood/(float)NumSymbols);}/*計算所有原型及所識別符號的所有特徵的相似性*/externfloathuge*all_par[100];structreply{intndx;floatweight;};staticintcomm_count=0,abs_count=0;intobj_funct(float[100][7],int,int,float[100],float[7],int[10]);floatcorrel_hem(float[NUMBER_POINT],float[NUMBER_POINT],float);floatcorrel(float[NUMBER_POINT],float[NUMBER_POINT]);structreply*make_corr(fioatcur_par[6][NUMBER_POINT],char*symbols,intsymb){FILE*cur_file;intind_repl,ind_corrct,ind,max_symb,ind_symb,index;structreplyarr_repl[30];intarr_ind[10];floatres[100].nres[7].old_max_pnt=cur_par,com_wight;floatold_max_pnt2,corr[100][7].tmp_par[6][NUMBER_POINT];charbuf[8];intiterat;structreplyrt;inti,j;max_symb=strlen(symbols);for(ind_symb=0;ind_symb<max_symb;ind_symb++){for(i=0;i<6;i++)  for(j=0;j<NUMBER_POINT;j++)  tmp_par[i][j]=all_par[ind_symb][i*100+j];if(tmp_par>0){  cur_par=old_max_pnt;  corr[ind_symb][N_PAR-1]=1.0*(1-  min(fabs(tmp_par-cur_par)/cur_par,1));  old_max_pnt=cur_par;  tmp_par=1.;  cur_par=1.;  corr[ind_symb]=correl_hem(cur_par,tmp_par,.9);  for(ind=1;ind<N_PAR-1;ind++){  corr[ind_symb][ind]=correl(cur_par[ind],tmp_par[ind]);  }}elsefor(ind=1;ind<N_PAR-1;ind++){  corr[ind_symb][ind]=0.0;}}if(symb<0){  index=obj_funct(corr,max_symb,N_PAR,res,nres,arr_ind);  iterat=20;}else{  sprintf(buf,"%03d.par",(int)symbols[symb]);  for(i=0;i<6;i++)  for(j=0;j<NUMBER_POINT;j++)  tmp_par[i][j]=all_par[symb][i*100+j];  iterat=0;  while((index=obj_funct(corr,max_symb,N_PAR,res,nres,arr_ind))>0  (arr_ind!=symb))  {  if(iterat>19)break;  for(ind=0,ind_corrct=0;ind<N_PAR-1;ind++)  if(corr[symb][ind]<0.95*nres[ind])  {  ind_corrct++;  for(index=0;index<NUMBER_POINT;index++)  tmp_par[ind][index]=tmp_par[ind][index]*9  +cur_par[ind][index]*1;  }  if(corr[symb][ind]<0.95*nres[ind])  {  ind_corrct++;  tmp_par=tmp_par*9+old_max_pnt*.1;  }  if(lind_corrct){  iterat=20;  break;  }iterat++;  cur_par=old_max_pnt;  corr[symb][N_PAR-1]=1-fabs(tmp_par-cur_par)/cur_par;  old_max_pnt=cur_par;  old_max_pnt2=tmp_par;  tmp_par=1.;  cur_par=1.;  corr[symb]=correl_hem(cur_Par,tmp_par,.9);  for(ind=1;ind<N_PAR-1;ind++){  corr[symb][ind]=correl(cur_par[ind],tmp_par[ind]);  }  cur_par=old_max_pnt;  tmp_par=old_max_pnt2;}/*while*/}/*else*/if((iterat<20)(index>0)(iterat>0)){  cur_file=.fopen(buf,"w+b");  for(index=0;index<N_PAR-1;index++)  fvrite(tmp_par[index],sizeof(float),NUMBER_POINT,cur_file);  fclose(cur_file);  for(i=0;i<6;i++)  for(j=0;j<NUMBER_POINT;j++)  all_par[symb][i*100+j]=tmp_par[i][j];}index=min(index,g);arr_ind[index]=-1;res[arr_ind[index]]=-1;for(i=0;i<=index;i++){  arr_repl[i].ndx=arr_ind[i];  arr_repl[i].weight=-res[arr_ind[i]];}returnarr_repl;}/*計算兩個矢量之間的相關性*/floatcorrel(floatfirst[NUMBER_POINT],floatsecond[NUMBER_POINT]){floatsumxy=0.0,sumx=0.0,sumy=0.0,sumx2=0.0,sumy2=0.0;inti_d,i_s;for(i_s=0;i_s<NUMBER_POINT;i_s++){  sumxy+=first[i_s]*second[i_s];  sumx+=first[i_s];  sumy+=second[i_s];  sumx2+=first[i_s]*first[i_s];  sumy2+=second[i_s]*second[i_s];}if((sumx2-sumx*sumx/NUMBER_POINT)<0‖  (sumy2-sumy*sumy/NUMBER_POINT)<0)  return0;  if((sumxy=(sumxy-sumx*sumy/NUMBER_POINT)/sqrt(sumx2-sumx*sumx/NUMBER_POINT)/  sqrt(sumy2-sumy*sumy/NUMBER_PCINT))<.5)  return0;returnsumxy;}/*筆向上/向下參數的相似性函數*/floatcorrel_hem(floatpar1[NUMBER_POINT],floatpar2[NUMBER_POINT],floatborder){intindex;floatresult=0.0;for(index=1;index<NUMBER_POINT;index++)result+=fabs(par1[index]-par2[index]);result/=NUMBER_POINT;result=1-result;if(result<border)return0;returnresult;}/*選擇可能被識別的符合表*/intobj_funct(floatarr[100][7],intn_symb,intn_par,  floatres[100],floatnres[7],intarrrindex[30]){intind_s,ind_p,ind_arr=0;floatmax_res=0.0,cur_res,abs_res=0.0;intresult=-1;for(ind_s=0;ind_s<n_symb;ind_s++){for(ind_p=0,cur_res=0.0;ind_p<n_par;ind_p++)  cur_res+=arr[ind_s][ind_p];res[ind_s]=cur_res;if(cur_res>max_res){result=ind_s;max_res=cur_res;}}abs_res=max_res*.85;do{arrindex[ind_arr++]=result;res[result]=-res[result];for(ind_s=0,max_res=0.0;ind_s<n_symb;ind_s++)if(res[ind_s]>max_res){result=ind_s;max_res=res[ind_s];}}while(max_res>abs_resind_arr<30);for(ind_p=0,ind_p<n_par,ind_p++)for(ind_s=0,nres[ind_p]=-5;ind_s<n_symb;ind_s++)nres[ind_p]=max(arr[ind_s][ind_p],nres[ind_p])returnind_arr;}]]>附錄B根據第二種方法的識別圖形書寫板識別I.開始<![CDATA[  oidmain(void)  voidinit_map(void);inti,j;for(i=0;i<NUM_SYMBOLS;i++)for(j=0;j<2;j++)map_char[i][j]=0;init_map;extemintmap_char[NUM_SYMBOLS][2];oidsave_map(void)FILE*fp;inti;fp=fopen("map_ch","wb");for(i=0;i<NUM_SYMBOLS;i++)fprintf(fp,"%d%d\n",map_char[i],map_char[i][1]);fclose(fp);oidinit_map(void)inti,j;for(i=97,j=0;i<123;j++,i++){map_char[j]=i;∥a-zmap_char[j][1]=0;}for(i=65,j=26;i<91;j++,i++){map_char[j]=i;∥A-Zmap_har[j][1]=0;}for(i=48,j=52;i<58;j++,i++){map_char[j]=i;map_char[j][1]=0;∥0123456789}for(i=43,j=62;i<47;j++,i++){map_char[j]=ipr=0;break;}}}}for(count=0;count<num_lig;count++){temp=ARR_LIG1[count].x_end;ARR_LIG1[count].x_end=ARR_LIG1[count].x_beg;ARR_LIG1[count].x_beg=temp;temp=ARR_LIG1[count].y_end;ARR_LIG1[count].y_end=ARR_LIG1[count].y_beg;ARR_LIG1[count].y_beg=temp;temp=ARR_LIG1[count].pns_end;ARR_LIG1[count].pns_end=ARR_LIG1[count].pns_beg;ARR_LIG1[count].pns_beg=temp;}return(num_lig);}/***************************************************************functionord_1_lig1definesoneorderrightupstrokesfromthebeginingofrightupstrokesinthearr_extremoms[],recordsoneorderrightupstroke’sparameterstoARR_ORD_1_LIG1[]accordingtohisnumberandlabelsMASKpenn.***************************************************************/intord_1_lig1(ntnum_of_extmns,intnum_lig1){intpr,num_lig,num_pns,count,num_str;unsignedtemp;pr=0;num_pns=0;num_lig=0;if(num_lig1==0)return(0);for(count=0;count<num_lig1;count++){pr=0;if(ARR_LIG1[count].pns_beg<(unsigned)2)continue;if(penn[ARR_LIG1[count].pns_beg].form_code==0)continue;if(arr_extremoms[ARR_LIG1[count].pns_beg-1].dir>2)continue;if(penn[ARR_LIG1[count].pns_beg-1].form_code!=0)continue;if(arr_extremoms[ARR_LIG1[count].pns_beg-1].pen_sts==(unsigned)0)continue;for(num_str=ARR_LIG1[count].pns_beg-1;num_str>=1;num_str-){if((arr_extremoms[num_stt].dir<=2)(arr_extremoms[num_str].dir>=0)(penn[num_str].form_code==0)){if(pr==0){ARR_ORD_1_LIG1[num_lig].num=num_lig;ARR_ORD_1_LIG1[num_lig].pns_beg=num_str;ARR_ORD_1_LIG1[num_lig].x_beg=arr_extremoms[num_str+1].x_corARR_ORD_1_LIG1[num_lig].y_beg=arr_extremoms[num_str+1].y_corARR_ORD_1_LIG1[num_lig].pns_end=num_str;]]>II.訓練過程<![CDATA[/*用於教導的主程序*/structTABLE_EXTREMOMSarr_extremoms[MAX_NUM_OF_EXTREMOMS];structPOINTarr_cor[MAX_NUM_OF_POINTS];structLINARR_DIR[MAX_AMOUNT_DIREC];structLIGARR_LIGAT[MAX_AMOUNT_DIREC];structLIGARR_ORD_1_LIGAT[MAX_AMOUNT_DIREC];structLIGARR_LIG1[MAX_AMOUNT_DIREC];structLIGARR_ORD_1_LIG1[MAX_AMOUNT_DIREC];structLIGARR_LIG2[MAX_AMOUNT_DIREC];structLIGARR_ORD_1_LIG2[MAX_AMOUNT_DIREC];structLIGARR_LIG3[MAX_AMOUNT_DIREC];structLIGARR_ORD_1_LIG3[MAX_AMOUNT_DIREC];structMASKpenn[MAX_NUM_OF_EXTREMOMS];charour_sent[MAX_LENGTH_SENTENSE];structXx[MAX_AMOUNT_DIREC];structYy[MAX_AMOUNT_DIREC];intmap_char[NUM_SYMBOLS][2];intamp_y;intnum_of_extrms;floaty_vec_beg;floaty_vec_end;floatx_vec_beg;floatx_vec_end;voidmain(intarg,char*par[]){FILE*fp;charinfile[30];intnum;structffblkffblk;intdone;read_map;fp=fopen("fextr.out","wb");fclose(fp);fp=fopen("feat.out","wb");fclose(fp);fp=fopen("feat1.out","wb");fclose(fp);fp=fopen("fsent0.out","wb");fclose(fp);fp=fopen("fsent1.out","wb");fclose(fp);fp=fopen("fsent2.out","wb");fclose(fp);fp=fopen("fsent3.out","wb");fclose(fp);fp=fopen("fsent4.out","wb");fclose(fp);fp=fopen("fsent5.out","wb");fclose(fp);fp=fopen("fsent6.out","wb");fclose(fp);done=findfirst("*tab",ffblk.0);num=1;while(ldone){sprintf(infile,"%-12.12s",ffblk.ff_name);fp=fopen(infile,"r");if(lfp){printf("Can’topeninputfile-%s-\n",infile);return;}if(infile!=′B′)letter=tolower(infile);else{if(isdigit((int)infile[1])!=0)lefter=tolower(infile);elseletter=infile[1]}num=transform(fp,letter);if((num>=0)(num<7))save_files(num,letter);if(num==-3)num=1;fclose(fp);done=findnext(ffblk);}save_map;}inttransform(FILE*fp,char*letter){externstructPOINTarr_cor[MAX_NUM_OF_POINTS];/*arrayofcoordinates*/externstructTABLE_EXTREMOMSarr_extremoms[MAX_NUM_OF_EXTREMOMS];/*arrayofspecialpoints(i.e.extremums,changingofpenposition*/externstructTABLE_EXTREMOMSarr_exc_extrms[MAX_NUM_OF_EXTREMOMS];/*arrayofexcludedextremums,itisexcludedfromthearrayofextremumsbyexcludingclosepoints*/externstructLINARR_DIR[MAX_AMOUNT_DIREC];externstructLINARR_DIR[MAX_AMOUNT_DIREC];externstructLIGARR_LIGAT[MAX_AMOUNT_DIREC];externstructLIGARR_ORD_1_LIGAT[MAX_AMOUNT_DIREC];externstructLIGARR_LIG1[MAX_AMOUNT_DIREC];externstructLIGARR_ORD_1_LIG1[MAX_AMOUNT_DIREC];externstructLIGARR_LIG2[MAX_AMOUNT_DIREC];externstructLIGARR_ORD_1_LIG2[MAX_AMOUNT_DIREC];externstructLIGARR_LIG3[MAX_AMOUNT_DIREC];externstructLIGARR_ORD_1_LIG3[MAX_AMOUNT_DIREC];externstructMASKpenn[MAX_NUM_OF_EXTREMOMS];externcharour_sent[MAX_LENGTH_SENTENSE];externstructXx[MAX_AMOUNT_DIREC];externstructYy[MAX_AMOUNT_DIREC];externintamp_y;externintnum_of_extrms;intcount;intnum;intnum_direc;floatlength_of_letter;intnum_ligat_d_r_o;intnum_ord_1_nlgat;intnum_ligat_u_r_i;intnum_ord_1_lig1;intnum_ligat_d_l_o;intnum_ord_1_lig3;intnum_ligat_u_l_i;intnum_ord_1_lig2;intindex_max_dir;intamp_x;num=read_symb(fp,letter);if((num==-2)‖(num==1))return(-1);if(num==0)return(-1);if(num==-3)return(-3);if(num>MAX_NUM_OF_POINTS-1){printf("Inputfiletoohuge\n");getch;return(-1);}num_of_extrms=calc_extremoms(num);if(num_of_extrms>MAX_NUM_OF_EXTREMOMS-1){printf(「Arrayofextremumstoohuge\n");getch;return(-1);}length_of_letter=letter_length(num,arr_cor);filtr(num_of_extrms);amp_y=ampl_y(num,arr_cor);amp_x=ampl_x(num,arr_cor);start(num_of_extms);if((num_direc=direct(num_of_extrms))==0){printf(「It’snodirections\n");getch;return(0);}index_max_dir=length_angl(num_direc,ARR_DIR);/***************************filterforlongdown****************************/if(filtr_1(length_of_letter,num_direc,num_of_extrms)==1){start(num_of_extrms);if((num_direc=direct(num_of_extrms))==0){printf(「It’snodirectionsafterconversionandfiltr_1\n");getch;return(0);}index_max_dir=length_angl(num_direc,ARR_DIR);}if(filtr_2(length_of_letter,num_direc)==1){start(num_of_extrms);if((num_direc=direct(num_of_extrms))==0){printf("It’snodirectionsafterconversionfiltr_1and_2\n");getch;return(0);}index_max_dir=length_angl(num_direc,ARR_DIR);}if(filtr_3(length_of_letter,num_direc,num_of_extrms)==1){start(num_of_extrms);if((num_direc=direct(num_of_extrms))==0){printf(「It’snodirectionsafterconversionfiltr_1,_2and_3\n」);getchreturn(0)}index_max_dir=length_angl(num_direc,ARR_DIR);}num_ligat_d_r_o=ligat(num_of_extrms,num_direc);num_ligat_d_r_o=lig1(num_of_extrms,num_direc);num_ligat_d_r_o=lig2(num_of_extrms,num_direc);num_ligat_d_r_o=lig3(num_of_extrms,num_direc);num_ord_1_ligat=ord_1_ligat(num_of_extrms,num_ligat_d_r_o);num_ord_1_lig1=ord_1_lig1(num_of_extrms,num_ligat_u_r_i);num_ord_1_lig2=ord_1_lig2(num_of_extrms,num_ligat_u_l_i);num_ord_1_lig3=ord_1_lig3(num_of_extrms,num_ligat_d_l_o);curve(num_of_extrs);if(sentense(num_of_extrms)==0)printf(「It’snosentense\n」);conv_dir_train(num_direc,amp_y,ARR_DIR,x,y);return(num_direc);}/*Thismoduleisforcalculatingandmanipulatingextremums,itincludesthreeprocedures(1)calc_extremumsTofindtheextremumsofthesymbol,andthechangeinpen」points.(2)find_max_extrmTofindthemax/minX-coordinateandthemax/minY-coordinateofthexymbol.(3)analyse_extremumsAproceduretoanalysetheextremumsfoundsofar,mainlythisproceduremarkscloseextre-mumsassuspeciousextremums.*//**************************************************************************Theinputofthisprocedureisthearrayofcoordinateswhichholdsthecoordinatesofthesymbol,andthenumberofthesepoints,itfillsthespecialofpoints(i.e.,extremumsorchangeinpen)inthearrayarr_extremums,itreturnsthenumberofspecialpointsitfound.***************************************************************************/structTABLE_EXTREMOMSextrm[MAX_NUM_OF_EXTREMOMS]externstructPOINTarr_cor[MAX_NUM_OF_POINTS];/*arrayofcoordinates*/externstructTABLE_EXTREMOMSarr_extremoms[MAX_NUM_OF_EXTREMOMS];/*arrayofspecialpoints(i.e.extremums,changingofpen)position*/externstructTABLE_EXTREMOMSarr_exc_extrms[MAX_NUM_OF_EXTREMOMS];/*arrayofexcludedextremums,inisexcludedfromthearrayofextremumsbyexcludingclosepoints*/structTABLE_EXTREMOMSarr_exc_extrm[MAX_NUM_OF_EXTREMOMS];intcalc_extremoms(intnum_of_points){intdef_quart(intx,inty);unsignedintindE;unsignedintnox;unsignedpen_was_up;intcrnt_quart,prev_quart;intcrnt_rot,prev_rot;intSx,Sy,PSx,PSy,a,b;intfirst_point=1;intPndx=0;unsignedintLastNdx;inti;indE=0;ndx=0;pen_was_up=1;Sx=0;Sy=0;PSx=0;PSy=0;a=0;b=0;while(ndx<num_of_points){while((arr_cor[ndx].pen_status)==1){if(pen_was_up==1){/*beginningextremom*/if(first_point==1){inttSx,tSy;Sx=(arr_cor[ndx+1].x_cor-arr_cor[ndx].x_cor);Sy=(arr_cor[ndx+1].y_cor-arr_cor[ndx].y_cor);tSx=(arr_cor[ndx+2].x_cor-arr_cor[ndx+1].x_cor);tSy=(arr_cor[ndx+2].y_cor-arr_cor[ndx+1].y_cor);a=Sx*tSy-Sy*tSx;b=Sx*tSx+Sy*tSy;PSx=Sx;PSy=Sy;}else{/*forthepreviousENDINGextremom*/Sx=(arr_cor[ndx].x_cor-arr_cor[Pndx].x_cor);Sy=(arr_cor[ndx].y_cor-arr_cor[Pndx].y_cor);PSx=(arr_cor[Pndx].x_cor-arr_cor[Pndx-1].x_cor);PSy=(arr_cor[Pndx].y_cor-arr_cor[Pndx-1].y_cor);a=PSx*Sy-PSy*Sx;b=PSx*Sx+PSy*Sy;arr_extremoms[indE].p_ndx=Pndx;arr_extremoms[indE].x_cor=arr_cor[Pndx].x_corarr_extremoms[indE].y_cor=arr_cor[Pndx].y_cor;arr_extremoms[indE].pen_sts=0;arr_extremoms[indE].dir=def_quart(PSx,PSy);arr_extremoms[indE].out_rot=def_quart(b,a);{intPPSx,PPSy;PPSx=(arr-cor[Pndx-1].x_cor-arr_cor[Pndx-2].x_cor);PPSy=(arr_cor[Pndx-1].y_cor-arr_cor[Pndx-2].y_cor),a=PPSx*PSy-PPSy*PSx;b=PPSx*PSx+PPSy*PSy;arr_extremoms[indE].in_rot=def_quart(b,a);}indE++;PSx=Sx;PSy=Sy;{inttSx,tSy;Sx=(arr_cor[ncx+1].x_cor-arr_cor[ndx].x_cor);Sy=(arr_cor[ndx+1].y_cor-arr_cor[ndx].y_cor);tSx=(arr_cor[ndx].x_cor-arr_cor[Pndx].x_cor);tSy=(arr_cor[ndx].y_cor-arr_cor[Pndx].y_cor);a=tSx*Sy-tSy*Sx;b=tSx*Sx+tSy*Sy;}}cmt_quart=def_quart(Sx,Sy);crnt_rot=def_quart(b,a);arr_extremoms[indE].p_ndx=ndx;arr_extremoms[indE].x_cor=arr_cor[ndx].x_cor;arr_extremoms[indE].y_cor=arr_cor[ndx].y_cor;arr_extremoms[indE].pen_sts=1;if(first_point==1){arr_extremoms[indE].dir=15;arr_extremoms[indE].in_rot=15;arr_extremoms[indE].out_rot=15;ndx++;first_point=0;}else{arr_extremoms[indE].dir=def_quart(PSx,PSy);arr_extremoms[indE].in_rot=0;arr_extremoms[indE].out_rot=def_quart(b,a);}indE++;pen_was_up=0;}eise{crnt_quart=def_quart(Sx,Sy);crnt_rot=def_quart(b,a);if((b<0)((a/b)<-10))crnt_rot=2;if((b<0)((a/b)>10))crnt_rot=6;if(((crnt_quart=prev_quart)))/*‖((crnt_rot>=4)(prev_rot<4))‖((crnt_rot<4)(prev_rot>=4)))(prev_rot!=15))*/{/*regularextremom*/if((abs(Sx)>0)‖(abs(Sy)>0)‖(b<0)){if((ndx-1-arr_extremoms[indE-1].p_ndx)>0){arr_extremoms[indE].p_ndx=ndx-1;arr_extremoms[indE].x_cor=arr_cor[ndx-1].x_cor;arr_extremoms[indE].y_cor=arr_cor[ndx-1].y_cor;arr_extremoms[indE].pen_sts=1;arr_extremoms[indE].dir=prev_quart;arr_extremoms[indE].in_rot=prev_rot;arr_extremoms[indE].out_rot=crnt_rot;indE++;}}}}ndx++;Sx=(arr_cor[ndx].x_cor_arr_cor[ndx-1].x_cor);Sy=(arr_cor[ndx].y_cor-arr_cor[ndx-1].y_cor);a=PSx*Sy-PSy*Sx;b=PSx*Sx+PSy*Sy;PSx=Sx;PSy=Sy;prev_quart=crnt_quart;prev_rot=crnt_rot;}*endofwhile(arr_cor[ndx].penstatus==1)*/if((pen_was_up==0)(arr_cor[ndx-1].pen_status==1))/*endingextremom*/Pndx=ndx-1;pen_was_up=1;LastNdx=ndx-1;}ndx**}/*ndx\=NumOfPoints*//*Addthelastspecialpointtothearray*/arr_extremoms[indE].p_ndx=LastNdx;arr_extremoms[indE].x_cor=arr_cor[LastNdx].x_cor;arr_extremoms[indE].y_cor=arr_cor[LastNdx].y_cor;arr_extremoms[indE].pen_sts=0;Sx=(arr_cor[LastNdx-1].x_cor-arr_cor[LastNdx-2].x_cor);Sy=(arr_cor[LastNdx-1].x_cor-arr_cor[LaxtNdx-2].x_cor);PSx=(arr_cor[LastNdx-2].x_cor-arr_cor[LastNdx-3].x_cor);PSy=(arr_cor[LastNdx-2].y_cor-arr_cor[LastNdx-3].y_cor);arr_extremoms[indE].dir=def_quan(Sx,Sy);a=PSx*Sx-PSy*Sx;b=PSx*Sx+PSy*Sy;arr_extremoms[indE].in_rot=def_quart(b,a);arr_extremoms[indE].out_rot=15;return;indE);}/***************************************************************************Thisprocedureistofindthemax/minX-coordinateandthemax/minY-coordinateofthesymbol.***************************************************************************/voidfind_max_extrm(intnum_of_extrms,int*Xmin,int*Xmax,int*Ymin,int*Ymax){unsignedinti=0;*Xmin=1200;*Xmax=0;*Ymin=1200;*Ymax=0;while(i<=num_of_extrms){if(arr_extremoms[i].x_cor<*Xmin)*Xmin=arr_extremoms[i].x_cor;if(arr_extremoms[i].x_cor>*Xmax)*Xmax=arr_extremoms[i].x_cor;if(arr_extremoms[i].y_cor<*Ymin)*Ymin=arr_extremoms[i].y_cor;if(arr_extremoms[i].y_cor>*Ymax)*Ymax=arr_extremoms[i].y_cor;i++;}}/**********************************************************************correctdir,in_rot,out_rotforsuspiciouspoints,calledfromanalyse_extremums***********************************************************************/voidcorrect_extrm(inti,intPi,intj){intdef_quart(intx,inty);intSx,Sy,PSx,PSy;intndx1,ndx2;inta,b;ndx1=extrm[Pi].p_ndx;ndx2=extrm[i].p_ndx;if(Pi>0){if(extrm[Pi-1].pen_sts==0){PSx=arr_cor[ndx1].x_cor-arr_cor[extrm[Pi-1].p_ndx].x_cor;PSy=arr_cor[ndx1].y_cor-arr_cor[extrm[Pi-1].p_ndx].y_cor;}else{PSx=arr_cor[ndx1].x_cor-arr_cor[ndx1-1].x_cor;PSy=arr_cor[ndx1].y_cor-arr_cor[ndx1-1].y_cor;}}else{PSx=0;PSy=0;}Sx=arr_cor[ndx2].x_cor-arr_cor[ndx1].x_cor;Sy=arr_cor[ndx2].y_cor-arr_cor[ndx1].y_cor;a=PSx*Sy-PSy*Sx;b=PSx*Sx+PSy*Sy;if(arr_exc_extrm[j-1].out_rot!=15)arr_exc_extrm[j-1].out_rot=def_quart(b,a);PSx=Sx;PSy=Sy;arr_exc_extrm[j].dir=def_quart(PSx,PSy);arr_exc_extrm[j].in_rot=0;if(arr_exc_extrm[j].out_rot!=15){if(extrm[i].pen_sts==0){Sx=arr_cor[extrm[i+1].p_ndx].x_cor-arr_cor[ndx2].x_cor;Sy=arr_cor[extrm[i+1].p_ndx].y_cor-arr_cor[ndx2].y_cor;}else{Sx=arr_cor[ndx2+1].x_cor-arr_cor[ndx2].x_cor;Sy=arr_cor[ndx2+1].y_cor-arr_cor[ndx2].y_cor;}a=PSx*Sy-PSy*Sx;b=PSx*Sx+PSy*Sy;arr_exc_extrm[j].out_rot=def_quart(b,a);}}/******************************************************************Aproceduretoanalysetheextremumsfoundsofar,mainlythisproceduremarkscloseextremumsassuspeciousextremums.********************************************************************intanalyse_extremoms(intnum_of_extrms){inti,j=0;intcount=0;intPi=0;booleanFirstP=TRUE;for(i=1;i<nurr_of_extrms;i++){if(((abs(extrm[i].x_cor-extrm[i+1].x_cor))<2‖(abs(extrm[i].y_cor-extrm[i+1].y_cor))<2)(extrm[i].in_rot!=extrm[i+1].in_rot)(extrm[i].dir==extrm[i+1].dir)(extrm[i]pen_sts==1)(extrm[i-1].pen_sts!=0))extrm[i].susp=1;else{extrm[i].susp=0;count++;}}extrm.susp=0;extrm[i].susp=0;count++;for(i=0;i<=num_of_extrms;i++){if(extrm[i].susp==0){arr_exc_extrm[j].p_ndx=extrm[i].p_ndx;arr_exc_extrm[j].x_cor=extrm[i].x_cor;arr_exc_extrm[j].y_cor=extrm[i].y_cor;arr_exc_extrm[j].pen_sts=extrm[i].pen_sts;arr_exc_extrm[j]dir=extrm[i].dir;arr_exc_extrm[j].in_rot=extrm[i].in_rot;arr_exc_extrm[j].out_rot=extrm[i].out_rot;if(FirstP==FALSE){correct_extrm(i,Pi,j);FirstP=TRUE;}jf(extrm[i].pen_sts==0)FirstP=TRUE;j++;}else{if(FirstP)Pi=i-1;FirstP=FALSE;}}for(i=1;i<=count;i++)if(extrm[i-1].p_ndx==(extrm[i].p_ndx-1))arr_exc_extrm[i].in_rot=0;return(count);}/*************************************************************functionlength_anglcalculateslengthfortheeachlongdownandreturnsthenumberofthelongdownwiththemaxlengt.**************************************************************/intlength_angl(intnum_lin,structLINZ[]){intcount,dy,max_dy,max_length,_max_length,i_max_dy;floattng;max_dy=0;max_length=0;for(count=0;count<num_lin;count++){dx=Z[count].x_end-Z[count].x_beg;dy=Z[count].y_end-Z[count].y_beg;Z[count].length=(unsigned)sqrt((float)dx*(float)dx+if(max_dy<abs(dy))(float)dy*(float)dy);{max_dy=abs(dy);i_max_dy=count;}if(max_length<Z[count].length){max_length=Z[count].length;i_max_length=count;}if((dx==0)(dy<0))tng=M_P1/2;/*90*/elseif((dx==0)(dy<0))tng=-M_Pl/2;/*-90*/elseif((dx==0)(dy==0))tng=999999;elsetng=atan((float)dy/(float)dx);if(tng<0)tng=tng+M_PI;/*angle+180*/Z[count].angle=tng;}return(i_max_dy)}/***************************************************************functionampl_ycalculatesmaximumandminimumofycoordinateandreturnsy-amplitude.***************************************************************/intampl_y(intnum_of_points,structPOINTarr_cor[]){intmin,max,count.temp;min=arr_cor.y_cor;max=arr_cor.y_cor;for(count=1;count<=num_of_points;count++){if(arr_cor[count].pen_status==0)continue;if(max<arr_cor[count].y_cor)max=arr_cor[count].y_cor;if(min>arr_cor[count].y_cor)min=arr_cor[count].y_cor;}if(max==min)max=max+1;y_vec_beg=(float)(arr_cor.y_cor_min)/(float)(max-min);y_vec_end=(float)(arr_cor[num_of_points-1].y_cor-min)/(float)(max-min);return(abs(max-min));}intampl_x(intnum_of_points,strudPOINTarr_cor[]){intmin,max,count,temp;min=arr_cor.x_cor;max=arr_cor.x_cor;for(count=1;count<=num_of_points;count++){if(arr_cor[count].pen_status==0)continue;if(max<arr_cor[count].x_cor)max=arr_cor[count].x_cor;if(min>arr_cor[count].x_cor)min=arr_cor[count].x_cor;}if(max==min)max=max+1;x_vec_beg=(float)(arr_cor.x_cor_min)/(float)(max-min);x_vec_end=(float)(arr_cor[num_of_points-1].x_cor-min)/(float)(max-min);return(abs(max-min));}/*************************************************************functionconv_dir_traincalculatesrelativeordinatesofletterskeleton****************************************************************/voidconv_dir_train(intnum_dir.intamp_y,structLINZ[],structXx[],structYy[]){intcount;intx_min=9999;inty_min=9999;intx_max=0;inty_max=0;for(count=0,count<num_dir;count++){if(Z[count].x_beg<x_min)x_min=Z[count].x_beg;if(Z[count].x_beg>x_max)x_max=Z[count].x_beg;if(Z[count].x_end<x_min)x_min=Z[count]x_end;if(Z[count].x_end>x_max)x_max=Z[count].x_end;if(Z[count].y_beg<y_min)y_min=Z[count].y_beg;if(Z[count].y_beg<y_max)y_max=Z[count].y_beg;if(Z[count].y_end<y_min)y_min=Z[count].y_end;if(Z[count].y_end<y_max)y_max=Z[count].y_end;}for(count=0;count<num_dir;count++){x[count].x_b=(float)(Z[count].x_beg-x_min)/(float)(y_max-y_min);y[count].y_b=(float)(Z[count].y_beg-y_min)/(float)amp_y;x[count].x_e=(float)(Z[count].x_end-x_min)/(float)(y_max-y_min);y[count].y_e=(float)(Z[count].y_end-y_min)/(float)amp_y;}return;}floatletter_length(intnum_of_points,structPOINTarr_cor[]){inti;doubleres=0.0;for(i=0;i<num_of_points;i++){if(arr_cor[i].pen_status!=0)res=res+hypot((double)((signed)arr_cor[i+1].x_cor-(signed)arr_cor[i].x_cor),(double)((signed)arr_cor[i+1].y_cor-(signed)arr_cor[i].y_cor));}return((float)res);}/**fnctionfiltrcalculatesone’smorestroke’sdirectionsandcorrectsitinthearrayarrextremoms.**/voidfiltr(intnum_of_extrm){intcount,dir;intdef_quart(intx,inty);for(count=0;count<=num_of_extrm;count++){dir=def_quart(arr_extremoms[count+1].x_cor_arr_extremoms[count].x_cor,arr_extremoms[count+1].y_cor-arr_extremoms[count].y_cor);if(dir!=arr_extremoms[count+1].dir)arr_extremoms[count+1].dir=dir;}}/**functionfiler_1returns0,iftherewasn’tfiltrationcorrectsthearrayarr_extremoms[]andreturns1,iftherewasfiltrationfiltr_1takesawayalongdown,ifsheisfirstorlast,iftherearenopenstrokesbefore(forthefirst)orafter(forthelastlongdown)andifrelativelengthofdeletedlongdownisless0.2.**/intfittr_1(floatlength_of_letter,intnum_dir,intnum_of_extrm)/********************************return0therewas’tfiltration1wasfiltration*********************************/{inttemp=0;intcount;if(((float)ARR_DIR.length/length_of_letter<TRESH_F1)(ARR_DIR.pns_beg==1)){for(count=0count<=ARR_DIR.pns_end;count++)arr_extremoms[count].pen_sts=0;temp=1;}if(((float)ARR_DIR[num_dir-1].length/length_of_letter<TRESH_F1)(ARR_DIR[num_dir-1].pns_end==nur_of_extrm)){for(count=ARR_DIR[num_dir-1].pns_beg-1;count<=ARR_DIR[num_dir-1].pns_end;count++)arr_extremoms[count].pen_sts=0;temp=1;}return(temp);}/**functionfilr_2returns0iftherewasn’tfiltration.correctsarrayarr_extremoms[],returns1,iftherewasfiltration.filtr_2takesawayaonepenstrokebetweemtwolongdown,ifdistancexbetweenlongdown<=5anddistanceybetweenlongdown<=2.**/intfiltr_2(floatlength_of_letter.intnum_dir){inttemp=0,i;for(i=0;i<num_dir-2;i++){if(ARR_DIR[i+1].pns_beg-ARR_DIR[i].pns_end>2)continue;if(abs(arr_extremoms[ARR_DIR[i+1].pns_bag].dir-arr_extremoms[ARR_DIR[i].pns_end].dir)>1)continue;if(hypot((double)((signed)arr_extremoms[ARR_DIR[i+1].pns_beg].x_cor-(signed)arr_extremoms[ARR_DIR[i].pns_end].x_cor),(double)((signed)arr_extremoms[ARR_DIR[i+1].pns_beg].y_cor-(signed)arr_extremoms[ARR_DIR[i].pns_end].y_cor))/(double)length_of_letter<(double)TRESH_F2)arr_extremoms[ARR_DIR[i].pns_end+1].dir=arrextremoms[ARR_DIR[i].pns_end].dir;temp=1;}return(temp);}/**functionfiltr_3returns0,iftherewasn’tfiltration.correctsarrayarr_extremoms[],returns,iftherewasfiltration.takesawaylongdownbeforestrokewithpenup==0,iflongdown’slength<=0.2frommaxlength.**/intfiltr_3(floatlength_of_letter,intnum_dir,intnum_of_extrm){inttemp=0,i,mcount;i=num_of_extrm;while(arr_extremoms[i].pen_sts==0)i-;while(arr_extremoms[i].pen_sts==1)i-;if(i<=0)return(temp);else{for(count=0;count<num_dir;count++){if((i>=ARR_DIR[count].pns_beg)(i<=ARR_DIR[count].pns_end)((float)ARR_DIR[count].length/length_of_letter<TRESH_F3)){for(m=ARR_DIR[count].pns_beg-1;m<=ARR_DIR[count].pns_end;m++){arr_extremoms[m].pen_sts=0;temp=1;return(temp);}}}}return(temp)}voidstart(intnum_of_extrms){intcount;for(count=0;count<MAX_AMOUNT_DIREC;count++){ARR_DIR[count].num=0;ARR_DIR[count].pns_beg=0;ARR_DIR[count].pns_end=0;ARR_DIR[count].x_beg=0;ARR_DIR[count].y_beg=0;ARR_DIR[count].x_end=0;ARR_DIR[count].y_end=0;ARR_DIR[count].length=0;ARR_DIR[count].angle=0;ARR_LIGAT[count].num=0;ARR_LIGAT[count].pns_beg=0;ARR_LIGAT[count].pns_end=0;ARR_LIGAT[count].x_beg=0;ARR_LIGAT[count].y_beg=0;ARR_LIGAT[count].x_end=0;ARR_LIGAT[count].y_end=0;ARR_LIGAT[count].length=0;ARR_LIG1[count].num=0;ARR_LIG1[count].pns_beg=0;ARR_LIG1[count].pns_end=0;ARR_LIG1[count].x_beg=0;ARR_LIG1[count].y_beg=0;ARR_LIG1[count].x_end=0;ARR_LIG1[count].y_end=0;ARR_LIG1[count].ength=0;ARR_LIG2[count].num=0;ARR_LIG2[count].pnx_beg=0;ARR_LIG2[count].pns_end=0;ARR_LIG2[count].x_beg=0;ARR_LIG2[count].y_beg=0;ARR_LIG2[count].x_end=0;ARR_LIG2[count].y_end=0;ARR_LIG2[count].ength=0;ARR_LIG3[count].num=0;ARR_LIG3[count].pns_beg=0;ARR_LIG3[count].pns_end=0;ARR_LIG3[count].x_beg=0;ARR_LIG3[count].y_beg=0;ARR_LIG3[count].x_emd=0;ARR_LIG3[count].y_end=0;ARR_LIG3[count].length=0;}for(count=0count<=num_of_extrms;count++){penn[count].strk_num=count;penn[count].p_ndx=arr_extremoms[count].p_ndx;penn[count].form_code=0;penn[count].pen_sts=arr_extremoms[count].pen_sts;}}/***************************************************************functionligatdefinesleftupstrokesfromtheendoflongdowninthearr_extremoms[],recordsdefinedleftupstroke’sparameterstoARR_LIGAT[]accordingtohisnumberandlabelsMASKpenn.***************************************************************/intligat(intnum_of_extrms,intnum_dir){intpr,num_lig,num_pns,count,num_str;pr=0;num_pns=0;num_lig=0;if(num_dir==0)return(0);for(count=0;count<num_dir;count++){pr=0;if(ARR_DIR[count].pns_end==(unsigned)0)continue;if(penn[ARR_DIR[count].pns_end].form_code==(unsigned)0)continue;if(arr_extremoms[ARR_DIR[count].pns_end+1].dir>2)continue;if(arr_extremoms[ARR_DIR[count].pns_end].pen_sts==(unsigned)0)continuefor(num_str=ARR_DIR[count].pns_end+1;num_str<=num_of_extrms;num_str++){if((arr_extremoms[num_str].dir<=2)(penn[num_str].form_code==0)){if(pr==0){ARR_LIGAT[num_lig].num=num_lig;ARR_LIGAT[num_lig].pns_beg=num_str;ARR_LIGAT[num_lig].x_beg=arr_extremoms[num_str-1].x_cor;ARR_LIGAT[num_lig].y_beg=arr_extremoms[num_str-1].y_cor;ARR_LIGAT[num_lig].pns_end=num_str;ARR_LIGAT[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_LIGAT[num-lig].y_end=arr_extremoms[num_str].y_cor;pr=1;num_pns++penn[num_str].form_code=3if((num_str==num_of_extrms)‖(arr_extremoms[num_str].pen_sts==(unsigned)0)){num_lig++;pr=0;break;}}else{/*ARR_LIGAT[num_lig].dir=ARR_LIGAT[count].dir*arr_extremoms[num_str].dir;*/num_pns++;penn[num_str]form_code=3;if((arr_extremoms[num_str].pen_sts==(unsigned)0)‖(num_str==num_of_extrms)){/*ARR_LIGAT[num_lig].pen_sts=arr_extremoms[num_str].pen_sts;*/ARR_LIGAT[num_lig].pns_end=num_str;ARR_LIGAT[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_LIGAT[num_lig].y_end=arr_extremoms[num_str].y_cor;num_lig++;pr=0;/***************************************************************functionligatdefinesleftupstrokesfromtheendoflongdowninthearr_extremoms[],recordsdefinedleftupstroke’sparameterstoARR_LIGAT[]accordingtohisnumberandlabelsMASKpenn.****************************************************************/intligat(intnum_of_extrms,intnum_dir){intpr,num_lig,num_pns,count,num_str;pr=0;num_pns=0;num_lig=0;if(num_dir==0)return(0);for(count=0;count<num_dir;count++){pr=0;if(ARR_DIR[count].pns_end==(unsigned)0)continue;if(penn[ARR_DIR[count].pns_end].form_code==(unsigned)0)cotinue;if(arr_extremoms[ARR_DIR[count].pns_end+1].dir>2)continue;if(arr_extremoms[ARR_DIR[count].pns_end].pen_sts==(unsigned)0)continue;for(num_str=ARR_DIR[count].pns_end+1;num_str<=num_of_extrms;num_str++){if((arr_extremoms[num_str].dir<=2)(penn[num_str].form_code==0)){if(pr==0){ARR_LIGAT[num_lig].num=num_lin;ARR_LIGAT[num_lig].pns_beg=num_str;ARR_LIGAT[num_lig].x_beg=arr_extremoms[num_str-1].x_cor;ARR_LIGAT[num_lig].y_beg=arr_extremoms[num_str-1].y_cor;ARR_LIGAT[num_lig].pns_end=num_str;ARR_LIGAT[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_LIGAT[num_lig].y_end=arr_extremoms[num_str].y_cor;pr=1;num_pns++;penn[num_str].form_code=3;if((num_str==num_of_extrms)‖(arr_extremoms[num_str].pen_sts==(unsigned)0)){num_lig++;pr=0;break;}}else{/*ARR_LIGAT[num_lig].dir=ARR_LIGAT[count].drr+arr_extremoms[num_str].dir;*/num_pns++;penn[num_str].form_code=3;if((arr_extremoms[num_str].pen_sts==(unsigned)0)‖(num_str==num_of_extrms)){/*ARR_LIGAT[num_lig].pen_sts=arr_extremoms[num_str].pen_sts;*/ARR_LIGAT[num_lig].pns_end=num_str;ARR_LIGAT[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_LIGAT[num_lig].y_end=arr_extremoms[num_str].y_cor;num_lig++;pr=0;break;}}}else{if(pr==1){ARR_LIGAT[num_lig].pns_end=num_str-1;ARR_LIGAT[num_lig].x_end=arr_extremoms[num_str-1].x_cor;ARR_LIGAT[num_lig].y_end=arr_extremoms[num_str-1].y_cor;num_lig++;pr=0;braak;}}}}return(num_lig);}/***************************************************************functionord_1_ligatdefinesoneorderleftupstrokesfromtheendofleftupstrokesinthearr_extremoms[],recordsoneorderleftupstroke’sparameterstoARR_ORD1_LIGAT[]accordingtohisnumberandlabelsMASKpenn.***************************************************************/intord_1_ligat(intnum_of_extrms,intnum_ligat){intpr,num_lig,num_pns,count,num_str;pr=0;num_pns=0;num_lig=0;if(num_ligat==0)return(0);for(count=0;count<num_ligat;count++){pr=0;if(ARR_LIGAT[count].pns_end==(unsigned)0)continue;if(penn[ARR_LIGAT[count].pns_end].form_code==(unsigned)0)continue;if((arr_extremoms[ARR_LIGAT[count].pns_and+1].dir>4)‖(arr_extremoms[ARR_LIGAT[count].pns_end+1].dir<2))continue;if(arr_extremoms[ARR_LIGAT[count].pns_end].pen_sts==(unsigned)0)continue;for(num_str=ARR_LIGAT[count].pns_end+1;num_str<=num_of_extrms;num_str++){if((arr_extremoms[num_str].dir<=4)(arr_extremoms[num_str].dir>=2)(penn[num_str].form_code==0)){if(pr==0){ARR_ORD_1_LIGAT[num_lig].num=num_lig;ARR_ORD_1_LIGAT[num_lig].pns_beg=num_str;ARR_ORD_1_LIGAT[num_lig].x_beg=arr_extremoms[num_str-1].x_cor;ARR_ORD_1_LIGAT[num_lig].y_beg=arr_extremoms[num_str-1].y_cor;ARR_ORD_1_LIGAT[num_lig].pns_end=num_str;ARR_ORD_1_LIGAT[num_lig].x_end=arr_extremoms[num_str].x_corARR_ORD_1_LIGAT[num_lig].y_end=arr_extremoms[num_str].y_corpr=1;num_pns++;penn[num_str].frm_code=11;if((num_str==num_of_extrms)‖(arr_extremoms[num_str].pen_sts==(unsigned)0)){num_lig++;pr=0;break;}}else{/*ARR_ORD_1_LIGAT[num_lig].dir=ARR_ORD_1_LIGAT[count].dir+arr_extremoms[num_str].dir,*/num_pns++;penn[num_str].form_code=11;if((arr_extremoms[num_str].pen_sts==(unsigned)0)‖(num_str==num_of_extms)){∥ARR_ORD_1_LIGAT[num_lig].pen_sts=arr_extremoms[num_str].pen_sts;ARR_ORD_1_LIGAT[num_lig].pns_end=num_str;ARR_ORD_1_LIGAT[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_ORD_1_LIGAT[num_lig].y_end=arr_extremoms[num_str].y_cor;(unsigned)ARR_ORD_1_LIGAT[num_lig].dir/num_pns;num_lig++;pr=0;break;}}}else{if(pr==1){ARR_ORD_1_LIGAT[num_lig].pns_end=num_str-1;ARR_ORD_1_LIGAT[num_lig].x_end=arr_extremoms[num_str-1].x_cor;ARR_ORD_1_LIGAT[num_lig].y_end=arr_extremoms[num_str-1].y_cor;num_lig++;pr=0;break;}}}}return(num_lig);}/***************************************************************functionlig1definesnghtupstrokesfromthebeginingoflongdowninthearr_extremoms[],recordsdefinedrightupstroke’sparameterstoARR_LIG1[]accordingtohisnumberandlabelsMASKpenn.***************************************************************/intlig1(intnum_of_extrms,intnum_dir){intpr,num_lig,num_pns,count,num_str;unsignedtemp;pr=0;num_pns=0;num_lig=0;if(num_dir==0)return(0);ARR_ORD_1_LIG1[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_ORD_1_LIG1[num_lig].y_end=arr_extremoms[num_str].y_cor;pr=1;num_pns++;penn[num_str].form_code=12;if((num_str==1)‖(arr_extremoms[num_str-1].pen_sts==(unsigned)0)){num_lig++;pr=0;break;}}else{/*ARR_ORD_1_LIG1[num_lig].dir=ARR_ORD_1_LIG1[count].dir+arr_extremoms[num_str].dir;*/numT_pns++;penn[num_str].form_code=12;if((arr_extremoms[num_str-1].pen_sts==(unsigned)0)‖(num_str==1)){∥ARR_ORD_1_LIG1[num_lig].pen_sts=arr_extremoms[num_str].pen_sts;ARR_ORD_1_LIG1[num_lig].pns_end=num_str;ARR_ORD_1_LIG1[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_ORD_1_LIG1[num_lig].y_end=arr_extremoms[num_str].y_cor;num_lig++;pr=0;break;}}}else{if(pr==1){ARR_ORD_1_LIG1[num_lig].pns_end=num_str+1;ARR_ORD_1_LIG1[num_lig].x_end=arr_extremoms[num_str+1].x_cor;ARR_ORD_1_LIG1[num_lig].y_end=arr_extremoms[num_str+1].y_cor;num_lig++;pr=0;break;}}}}for(count=0;count<num_lig;count++){temp=ARR_ORD_1_LIG1[count].x_end;ARR_ORD_1_LIG1[count].x_end=ARR_ORD_1_LIG1[count].x_beg;ARR_ORD_1_LIG1[count].x_beg=temp;temp=ARR_ORD_1_LIG1[count].y_end;ARR_ORD_1_LIG1[count].y_end=ARR_ORD_1_LIG1[count].y_beg;ARR_ORD_1_LIG1[count].y_beg=temp;temp=ARR_ORD_1_LIG1[count].pns_end;ARR_ORD_1_LIG1[count].pns_end=ARR_ORD_1_LIG1[count].pns_beg;ARR_ORD_1_LIG1[count].pns_beg=temp;}return(num_lig);}/***************************************************************functionlig2definesleftupstrokesfromthebeginingoflongdowninthearr_extremoms[],recordsdefinedleftupstroke’sparameterstoARR_LIG2[]accordingtohisnumberandlabelsMASKpenn.****************************************************************intlig2(intnum_of_extrms,intnum_dir){intpr,nun_lig,num_pns,count,num_str;unsignedtemp;pr=0;num_pns=0;num_lig=0;if(num_dir==0)return(0);for(count=0;count<num_dir;count++){pr=0;if(ARR_DIR[count].pns_beg<(unsigned)2)continue;if(penn[ARR_DIR[count].pns_beg].form_code==0)continue;if(arr_extremoms[ARR_DIR[count].pns_beg-1].dir>(unsigned)2)continue;if(penn[ARR_DIR[count].pns_beg-1].form_code!=0)continue;if(arr_extremoms[ARR_DIR[count].pns_beg-1].pen_sts==(unsigned)0)continue;for(num_str=ARR_OIR[count].pns_beg-1;num_str>=1;num_str-){if((arr_extremoms[num_str].dir<=(unsigned)2)(penn[num_str].form_code==0)){if(pr==0){ARR_LIG2[num_lig].num=num_lig;ARR_LIG2[num_lig].pns_beg=num_str;ARR_LIG2[num_lig].x_beg=arr_extremoms[num_str+1].x_cor;ARR_LIG2[num_lig].y_beg=arr_extremoms[num_str+1].y_cor;ARR_LIG2[num_lig].pns_end=num_str;ARR_LIG2[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_LIG2[num_lig].y_end=arr_extremoms[num_str].y_cor;pr=1;num_pns++;penn[num_str].form_code=7;if((num_str==1)‖(arr_extremoms[num_str-1].pen_sts==(unsigned)0)){num_lig++;pr=0break}}else{/*ARR_LIG2[num_lig].dir=ARR_LIG2[count].dir+arr_extremoms[num_str].dir;*/num_pns++;penn[num_str].form_code=7;if((arr_extremoms[num_str-1].pen_sts==(unsigned)0)‖(num_str==0)){∥ARR_LIG2[num_lig].pen_sts=arr_extremoms[num_str].pen_sts;ARR_LIG2[num_lig].pns_end=num_str;ARR_LIG2[num_lig].x_end=arr_extremoms[num_str].x_corARR_LIG2[num_lig].y_end=arr_extremoms[num_str].y_cor;num_lig++;pr=0;break;}}}else{if(pr==1){ARR_LIG2[num_lig].pns_end=num_str+1;ARR_LIG2[num_lig].x_end=arr_extremoms[num_str+1].x_cor;ARR_LIG2[num_lig].y_end=arr_extremoms[num_str+1].y_cor;num_lig++;pr=0;break;}}}}for(count=0;count<num_lig;count++){temp=ARR_LIG2[count].x_end;ARR_LIG2[count].x_end=ARR_LIG2[count].x_beg;ARR_LIG2[count].x_beg=temp;temp=ARR_LIG2[count].y_end;ARR_LIG2[count].y_end=ARR_LIG2[count].y_beg;ARR_LIG2[count].y_beg=temp;temp=ARR_LIG2[count].pns_end;ARR_LIG2[count].pns_end=ARR_LIG2[count].pns_beg;ARR_LIG2[count].pns_beg=temp;}return(num_lig);}/***************************************************************functionord_1_lig2definesoneorderleftupstrokesfromthebeginmgofleftupstrokesinthearr_extremorms[],recordsoneorderleftupstroke’sparameterstoARR_ORD_2_LIG1[]accordingtohisnumberandlabeisMASKpenn.***************************************************************/intord_1_lig2(intnum_of_extrms.intnum_lig2){intpr,num_lig.num_pns,count.num_str;unsignedtemp;pr=0;num_pns=0;num_lig=0;if(num_lig2==0)return(0);for(count=0;count<num_lig2;count++){pr=0;if(ARR_LIG2[count]pns_beg<(unsigned)2)continue;if(penn[ARR_LIG2[count].pns_beg].form_code==0)continue;if((arr_extremoms[ARR_LIG2[count].pns_beg-1].dir<(unsigned)2)‖(arr_extremoms[ARR_LIG2[count].pns_beg-1].dir>(unsignied)4))continue;if(penn[ARR_LIG2[count].pns_beg-1].form_code!=0)continueif(arr_extremoms[ARR_LIGZ[count].pns_beg-1].pen_sts==(unsigned)0)continue;for(num_str=ARR_LIG2[count].pns_beg-1;num_str>=1;num_str-){if((arr_extremoms[num_str].dir<=(unsigned)4)(arr_extremoms[num_str].dir>=(unsigned)2)(penn[num_str].form_code==0)){if(pr==0){ARR_ORD_1_LIG2[num_lig].num=num_lig;ARR_ORD_1_LIG2[num_lig].pns_beg=num_str;ARR_ORD_1_LIG2[num_lig].x_beg=arr_extremoms[num_str+1].x_cor;ARR_ORD_1_LIG2[num_lig].y_beg=arr_extremoms[num_str+1].y_cor;ARR_ORD_1_LIG2[num_lig].pns_end=num_str;ARR_ORD_1_LIG2[num_lig].x_end=arr_extremoms[num_stf].x_cor;ARR_ORD_1_LIG2[num_lig].y_end=arr_extremoms[num_str].y_cor;pr=1;num_pns++;penn[num_str].form_code=13;if((num_str==1)‖(arr_extremoms[num_str-1].pen_sts==(unsigned)0)){num_lig++;pr=0;break;}}else{/*ARR_ORD_1_LIG2[num_lig].dir=ARR_ORD_1_LIG2[count].dir+arr_extremoms[num_str].dir;*/num_pns++;penn[num_str].form_code=13;if((arr_extremoms[num_str-1].pen_sts==(unsigned)0)‖(num_str==0)){∥ARR_ORD_1_LIG2[num_lig].pen_sts=arr_extremoms[num_str].pen_sts;ARR_ORD_1_LIG2[num_lig].pns_end=num_str;ARR_ORD_1_LIG2[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_ORD_1_LIG2[num_lig].y_and=arr_extremoms[num_str].y_cor;(urnsigned)ARR_ORD_1_LIG2[num_lig].dir/num_pns;num_lig++;pr=0;break;}}}else{if(pr==1){ARR_ORD_1_LIG2[num_lig].pns_end=num_str+1;ARR_ORD_1_LIG2[num_lig].x_end=arr_extremoms[num_str+1].x_cor;ARR_ORD_1_LIG2[num_lig].y_end=arr_extremoms[num_str+1].y_cor;num_lig++;pr=0break;}}}}for(count=0;count<num_lig;count++){temp=ARR_ORD_1_LIG2[count].x_end;ARR_ORD_1_LIG2[count].x_end=ARR_ORD_1_LIG2[count].x_beg;ARR_ORD_1_LIG2[count].x_beg=temp;temp=ARR_ORD_1_LIG2[count].y_end;ARR_ORD_1_LIG2[count].y_and=ARR_ORD_1_LIG2[count].y_beg;ARR_ORD_1_LIG2[count].y_beg=temp;tamp=ARR_ORD_1_LIG2[count].pns_and;ARR_ORD_1_LIG2[count].pns_end=ARR_ORD_1_LIG2[count].pns_beg;ARR_ORD_1_LIG2[count].pns_beg=temp;}return(num_lig);}/***************************************************************functionlig3definesrightupstrokesfromtheendoflongdowninthearr_extremoms[],recordsdefinedleftupstroke’sparameterstoARR_LIG3[]accordingtohisnumberandlabelsMASKpenn.****************************************************************/intlig3(intnum_of_extrms,intnum_dir){intpr,num_lig,num_pns,count,num_str;pr=0;num_pns=0;num_lig=0;if(num_dir==0)return(0);for(count=0;count<num_dir;count++){pr=0;if(ARR_DIR[count].pns_end==(unsigned)0)continue;if(penn[ARR_DIR[count].pns_end].form_code==(unsigned)0)continue;if((arr_extremoms[ARR_DIR[count].pns_and+1].dir>4)‖(arrextremoms[ARR_DIR[count].pns_end+1].dir<2))continue;if(penn[ARR_DIR[count].pns_end+1].form_code!=0)continue;if(arr_extremoms[ARR_DIR[count].pns_end].pen_sts==(unsigned)0)continue;for(num_str=ARR_DIR[counf].pns_end+1num_str<=num_of_extrms;num_str++){if((arr_extremoms[num_str].dir<=4)(arr_extremoms[num_str].dir>=2)(penn[num_str].form_code==0)){if(pr==0){ARR_LIG3[num_lig].num=num_lig;ARR_LIG3[num_lig]pns_beg=num_str;ARR_LIG3{num_lig].x_beg=arr_extremoms[num_str-1].x_cor;ARR_LIG3[num_lig].y_beg=arr_extremoms[num_str-1].y_cor;ARR_LIG3[num_lig].pns_end=num_str;ARR_LIG3[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_LIG3[num_lig].y_end=arr_extremoms[num_str].y_cor;pr=1;num_pns++;penn[num_str].form_code=9;if((num_str==num_of_extrms)‖(arr_extremoms[num_str].pen_sts==(unsigned)0;}/********/fp=fopen("fextr.out","ab+");fprintf(fp,"%d%c%d%d",map_char[letter_num][1],(*lette),num_direc,num_of_extrms);for(i=0;i<=num_of_extrms;i++)fwrite(arr_extremoms[i],stzeof(structTABLE_EXTREMOMS),1,fp);fprintf(fp,"\n");fclose(fp);/********/fp=fopen("feat.out","ab+");fprintf(fp,"%c%d%.4f%.4f%.4f%.4f\n",(*letter),map_char[letter_num][1],y_vec_beg,y_vec_end,x_vec_beg,x_vec_end);fclose(fp);/********/fp=fopen(「feat1.out」,"ab+");fprintf(fp,"%c%d%d\n",(*letter),map_char[letter_num][1],amp_y);fclose(fp);/********/if(num_direc==0)fp=fopen(「fsent0.out","ab+");if(num_direc==1)fp=fopen(「fsent1.out","ab+");if(num_direc==2)fp=fopen(「fsent2.out","ab+");if(num_direc==3)fp=fopen("fsent3.out","ab+");if(num_direc==4)fp=fopen(「fsent4.out","ab+");if(num_direc==5)fp=fopen("fsent5.out","ab+");if(num_direc==6)fp=fopen("fsent6.out","ab+");fprintf(fp,"%d%c",map_char[letter_num][1],(*letter));if(num_direc!=0){fprintf(fp,"%s",oursent);for(i=0;i<numdirec;i++)fprintf(fp"%.4f%.4f",x[i].x_b,x[i].x_e);for(i=0;i<numdirec;i++)fprintf(fp"%4f%.4f",y[i].y_b,y[i].y_e);fprintf(fp,"%d".amp_y);}fprintf(fp,"\n")fclose(fp)}intadd_map(onar*letter){inti;for(i=0;i<NUM_SYMBOLS;i++)if(*letter==(onar)map_char[i]){map_char[i][1]++;return(i);}if(i==NUMSYMBOLS){printf(「Thereisnosuchcharacterinthemap%c\n",*letter);return(-1);}return(-1);}voidread_map(void){FILE*fp;inti;fp=fopen("map_ch","rb");for(i=0;i<NUM_SYMBOLS;i++)fscanf(fp,"%d%d\n",map_char[i],map_char[i][1]);fclose(fp);}voidsave_map(void){FILE*fp;inti;fp=fopen("map_ch","wb");for(i=0;i<NUM_SYMBOLS;i++)fprintf(fp,"%d%d\n",map_char[i],map_char[i][1]);fclose(fp);}intget_num(char*letter){inti;for(i=0;i<NUM_SYMBOLS;i++)if(*letter==(char)map_char[i])return(i);return(-1);}]]>III.一般化<![CDATA[voidmain(void){FILE*fp,*fp1;inti;charfilename[30],filename1[30];read_map;for(i=1;i<=MAX_AMOUNT_DIREC;i++){if(i==1){strcpy(filename,"fsent1.out");strcpy(filename1,"fgen1.out");pfintf("——%d——\n",i);gotoA;}if(i==2){strcpy(filename,"fsent2.out");strcpy(filename1,"fgen2.out");printf("——%d——\n",i);gotoA;}if(i==3){strcpy(filename,"fsent3.out");strcpy(filename1,"fgen3.out");printf("——%d——\n",i);gotoA;}if(i==4){strcpy(filename,"fsent4.out");strcpy(filename1,"fgen4.out");printf("——%d——\n",i);gotoA;}if(i==5){strcpy(filename,"fsent5.out");strcpy(filename1,"fgen5.out");printf("——%d——\n",i);gotoA;}if(i==6){strcpy(filename,"fsent6.out");strcpy(filename1,"fgen6.out");printf(「——%d——\n",i);gotoA}Afp1=fopen(filename1,"wb");fclose(fp1);gener(i,filename,filename1);}fp1=fopen("genfeat.out","wb");fclose(fp1);gener_feat;fp1=fopen("genfet1.out」,"wb");fclose(fp1);gener_feat1}voidread_map(void){FILE*fp;inti;fp=fopen("map_ch」「rb");for(i=0;i<NUM_SYMBOLS;i++)fscanf(fp,"%d%d\n",map_char[i],map_char[i][1]);fclose(fp);}voidgener(inti,charfilename[],charfilename1[]){voidgether(charletter,intnum_dir,charfilename[],charfilename1[]);intj;for(j=0;j<100;j++){if(map_char[j][1]>0)gether(map_char[j],i,filename,filename1);}}voidgener_feat(void){voidgether_feat(charletter);intj;for(i=0;j<100;j++){if(map_char[j][1]>0)gether_feat(map_char[j]);}}voidgener_feat1(void){voidgether_feat1(charletter);intj;for(j=0;j<100;i++){if(map_char[j][1]>0)gether_feat1(map_char[j]);}}voidgether(charletter,intnum_dir,charfilename[],charfilename1[]){charch;intletter_num;inti,amount;intamp_y;FILE*fp;intconv(void);voidconv_dir_defin(intamount,intnum_dir);voidwrite_to_gen(intamount,intnum_dir,charletter);voidsave_gen(intnum_dir,charletter,charfilename1[]);voidsave_xy(intnum_dir,charfilename1[]);amount=0gen.repr.num=0;for(i=0;i<=MAX_AMOUNT_DIREC;i++)genrepr.tabl[i].number=0;fp=fopen(filename,"rb");while(fscanf(fp,"%d",letter_num)!=EOF){fscanf(fp."%c",ch);fscanf(fp"%s".our_sent);for(i=0;i<num_dir;i++)fscanf(fp,"%f%f",bx[amount][i].x_b,bx[amount)[i].x_e);for(i=0;i<num_dir;i++)fscanf(fp,"%f%f",by[amount][i].y_b,by[amount][i].y_e);fscanf(fp,"%d\n",amp_y);if(ch==letter){conv;write_to_gen(amount,num_dir-1,letter);amount++;if(amount==MAX_REPRESNT){fclose(fp);break;}}}fclose(fp);if(amount>0){conv_dir_defin(amount,num_dir);save_gen(num_dir,letter,filename1);save_xy(num_dir,filename1);}}voidsave_gen(intnum_dir,charletter,charfilename1[]){FILE*fp1;inti,j;fp1=fopen(filename1,"ab+");fprintf(fp1,"%c",letter);fprintf(fp1,"%d%c%d",gen.amount,gen.repr.letter,gen.repr.num);for(i=0;i<=num_dir;i++){fprintf(fp1,*%d",gen.repr.tabl[i].number);if(gen.repr.tabl[i].number>0){for(j=0;j<gen.repr.tabl[i].number;j++)fprintf(fp1,"%s",gen.repr.tabl[i].row[j].str);fprintf(fp1,"\n");}}fclose(fp1);}voidsave_xy(intnum_dir,charfilename1[]){FILE*fp1;inti;fp1=fopen(filename1,"ab+");for(i=0;i<num_dir;i++)fprintf(fp1,"%.4f%4f".x_mid‖[i].x_b,x_mid‖[i].x_e);for(i=0;i<num_dir;i++)fprintf(fp1,"%.4f%4f",x_dev[i].x_b,x_dev[i].x_e);for(i=0;i<num_dir;i++)fprintf(fp1,"%.4f%.4f",y_mid‖[i].y_b,y_mid‖[i].y_e);for(i=0i<num_dir;i++)fprintf(fp1,"%4f%4f\n",y_dev[i]y_b,y_dev[i].y_e);fclose(fp1);}voidsave_feat1(charletter){FILE*fp1;inti;fp1=fopen("genfeat.out","ab+");fprintf(fp1,"%c",letter);fprintf(fp1,「%.4f%.4f%.4f%.4f\n",x_mid‖.x_b,x_mid‖.x_e,y_mid‖.y_b,y_mid‖.y_e);for(i=0;i<3;i++){fpnntf(fp1,"%4f%.4f%.4f%.4f\n",x_dev[i].x_b,x_dev[i].x_e,y_dev[i].y_b,y_dev[i].y_e);}fclose(fp1);}voidsave_feat2(charletter){FILE*fp1;inti;fp1=fopen(「genfet1.out」,"ab+");fprintf(fp1,"%c",letter);fprintf(fp1,"%.4f%d%d\n",y_midll.y_b,amp_y,amp_y[1]);for(i=0;i<3;i++)fprintf(fp1,"%.4f」y_dev[i].y_b);fprintf(fp1,"\n");fclose(fp1);}voidgether_feat(charletter){voidcalc_vec(intamount);FILE"fp,fp1;intamount,letter_num;charch;amount=0;fp=fopen("feat.out","rb");while(fscanf(fp,"%c",ch)!=EOF){fscanf(fp,"%d%f%f%f%f\n",letternum,by[amount].y_b,by[amount].y_e,bx[amount].x_b,bx[amount].x_e);if(ch==letter){amount++;if(amount==MAX_REPRESNT)break;}}fclose(fp);if(amount>0){calc_vec(amount);save_feat1(letter),}}voidgether_feat1(charletter){voidcalc_amp(intamount);FILE*fp;intamount.letter_num;charch;amount=0;by[i][count].y_e;summ_4=summ_4+temp*temp;}x_dev[count].x_b=sqrt(summ_1/(float)amount);y_dev[count].y_b=sqrt(summ_2/(float)amount);x_dev[count].x_e=sqrt(summ_3/(float)amount);y_dev[count].y_e=sqrt(summ_4/(float)amount);}}return;}voidcalc_vec(intamount){intcount,i;floatsumm_1=0.0;floatsumm_2=0.0;floatsumm_3=0.0;floatsumm_4=0.0;floatsumm_1m=0.0;floatsumm_2m=0.0;floatsumm_3m=0.0;floatsumm_4m=0.0;floattemp;intam1,am2.am3,am4,am5,am6,am7,am8;if(amount>0)for(i=0;i<amount;i++){summ_1=summ_1+bx[i]0].x_b;summ_2=summ_2+by[i].y_b;summ_3=summ_3+bx[i].x_e;summ_4=summ_4+by[i].y_e;}x_midll.x_b=summ_1/(float)amount;y_midll.y_b=summ_2/(float)amount;x_midll.x_e=summ_3/(float)amount;y_midll.y_e=summ_4/(float)amount;summ_1=0.0;summ_2=0.0;summ_3=0.0;summ_4=0.0;summ_1m=0.0;summ_2m=0.0;summ_3m=0.0;summ_4m=0.0;am1=0;am2=0;am3=0;am4=0;am5=0;am6=0;am7=0am8=0;for(i=0;i<amount,i++){temp=x_midll.x_b-bx[i].x_b;if(temp>0.0){summ_1=summ_1+temp*temp;am1+-}else{summ_1m=summ_1m+temp*temp;am2++;}temp=y_midll.y_b-by[i].y_b;if(temp>0.0){summ_2=summ_2+temp*temp;am3++;}else{summ_2m=summ_2m+temp*temp;am4++;}temp=x_midll.x_e-bx[i].x_e;if(temp>0.0){summ_3=sum_3+temp*temp;am5++;}else{summ_3m=summ_3m+temp*temp;am6++;}temp=y_midll.y_e-by[i].y_e;if(temp>0.0){summ_4=summ_4+temp*temp;am7++;}else{summ_4m=summ_4m+temp*temp;am8++;}}if(am1==0)x_dev.x_b=0.0;∥dev-elsex_dev.x_b=sqrt(sum_1/(float)am1);if(am2==0)x_dev[1].x_b=0.0;∥dev+elsex_dev[1].x_b=sqrt(summ_1m/(float)am2);if((am1+am2)==0)x_dev[2].x_b=0.0;∥develsex_dev[2].x_b=sqrt((summ_1+summ_1m)/(float)(am1+am2));if(am3==0)y_dev.y_b=0.0;∥dev-elsey_dev.y_b=sqrt(summ_2/(float)am3);if(am4==0)y_dev[1].y_b=0.0;∥dev+elsey_dev[1].y_b=sqrt(summ_2m/(float)am4);if((am3+am4)==0)y_dev[2].y_b=0.0;∥develsey_dev[2].y_b=sqrt((summ_2+summ_2m)/(float)(am3+am4));if(am5==0)x_dev.x_e=0.0;∥dev-elsex_dev.x_e=sqrt(summ_3/(float)am5);if(am6==0)x_dev[1].x_e=0.0;∥dev+elsex_dev[1].x_e=sqrt(summ_3m/(float)am6);if((am5+am6)==0)x_dev[2].x_e=0.0;∥develsex_dev[2].x_e=sqrt((summ_3+summ_3m)/(float)(am5+am6));if(am7==0)y_dev.y_e=0.0;∥dev-elsey_dev.y_e=sqrt(summ_4/(float)am7);if(am8==0)y_dev[1].y_e=0.0;∥dev+elsey_dev[1].y_e=sqrt(summ_4m/(float)am8);if((am7+am8)==0)y_dev[2].y_e=0.0;∥develsey_dev[2]y_e=sqrt((summ_4+summ_4m)/(float)(am7+am8))}{num_lig++;pr=0;break;}}else{/*ARR_LIG3[num_lig].dir=ARR_LIG3[count].dir+arr_extremoms[num_sti.dir;*/num_pns++;penn[num_str].form_code=9;if((arr_extremoms[num_str].pen_sts==(unsigned)0)‖(num_str==num_of_extmms)){∥ARR_LIG3[num_lig].pen_sts=arr_extremoms[num_str].pen_sts;ARR_LIG3[num_lig].pns_end=num_str;ARR_LIG3[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_LIG3[num_lig].y_end=arr_extremoms[num_str].y_cor;num_lig++;pr=0;break;}}}else{if(pr==1){ARR_LIG3[num_lig].pns_end=num_str-1;ARR_LIG3[num_lig].x_end=arr_extremoms[num_str-1].x_cor;ARR_LIG3[num_lig].y_end=arr_extremoms[num_str-1].y_cor;num_lig++;pr=0;break;}}}}return(num_lig);}/****************************************************************functionord_1_lig3definesoneorderrightupstrokesfromtheendofrightupstrokesinthearr_extremoms[],recordsoneorderleftupstroke’sparameterstoARR_ORD_2_LIG1[]accordingtohisnumberandlabelsMASKpenn.****************************************************************/intord_1_lig3(intnum_of_extrms.intnum_lig3){intpr,num_lignum_pns,count,num_str;pr=0;num_pns=0;num_lig=0;if(num_lig3==0)return(0);for(count=0;count<num_lig3;count++){pr=0;if(ARR_LIG3[count].pns_end==(unsigned)0)continue;if(penn[ARR_LIG3[count].pns_end].form_code==(unsigned)0)continueif(arr_extremoms[ARR_LIG3[count].pns_end+1].dir>2)continue;if(penn[ARR_LIG3[count].pns_end+1].form_code!=0)continue;if(arr_extremoms[ARR_LIG3[count].pns_end].pen_sts==(unsigned)0)continue;for(num_str=ARR_LIG3[count].pns_end+1;num_str<=num_of_extrms;num_str++){if((arr_extremoms[num_str].dir<=2)(arr_extremoms[num_str].dir>=0)(penn[num_str].form_code==0)){if(pr==0){ARR_ORD_1_LIG3[num_lig].num=num_lig;ARR_ORD_1_LIG3[num_lig].pns_beg=num_str;ARR_ORD_1_LIG3[num_lig].x_beg=arr_extremoms[num_str-1].x_cor;ARR_ORD_1_LIG3[num_lig].y_beg=arr_extremoms[num_str-1].y_cor;ARR_ORD_1_LIG3[num_lig].pns_end=num_str;ARR_ORD_1_LIG3[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_ORD_1_LIG3[num_lig].y_end=arr_extremoms[num_str].y_cor;pr=1;num_pns++;penn[num_str].form_code=14;if((num_str==num_of_extrms)‖(arr_extremoms[num_str].pen_sts==(unsigned)0)){num_lig++;pr=0;break;}}else{/*ARR_ORD_1_LIG3[num_lig].dir=ARR_ORD_1_LIG3[count].dir+arr_extremoms[num_str].dir;*/num_pns++;penn[num_str].form_code=14;if((arr_extremoms[num_str].pen_sts==(unsigned)0)‖(num_str==num_of_extrms)){∥ARR_ORD_1_LIG3[num_lig].pen_sts=arr_extremoms[num_str].pen_sts;ARR_ORD_1_LIG3[num_lig].pns_end=num_str;ARR_ORD_1_LIG3[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_ORD_1_LIG3[num_lig].y_end=arr_extremoms[num_str].y_cor;num_lig++;pr=0;break}}}else{if(pr==1){ARR_ORD_1_LIG3[num_lig].pns_end=num_str-1;ARR_ORD_1_LIG3[num_lig].x_end=arr_extremoms[num_str-1].x_cor;ARR_ORD_1_LIG3[num_lig].y_end=arr_extremoms[num_str-1].y_cor;num_lig++;pr=0;break;}}}return(num_lig);}/*functioncurverecordstoMASKpenn[]formcodetoeachofpenstrokes(exceptlongdown)accordingtoitscurvature.*/voidcunve(intnum_of_extrms){extermstructTABLE_EXTREMOMSarr_extremoms[MAX_NUM_OF_EXTREMOMS];intcount;for(count=0;count<=num_of_extrms;count++)switch(penn[count].form_code){case(unsigned)3;{if(arr_extremoms[count].in_rot==7)penn[count].form_code=4;else{if((arr_extremoms[count].in_rot==1)‖(arr_extremoms[count].in_rot==0))penn[count].form_code=3;elsepenn[count].form_code=15;}continue;}case(unsigned)5;{if(arr_extremoms[count].in_rot==1)penn[count].form_code=6;else{if((arr_extremoms[count].in_rot==7)‖(arr_extremoms[count].in_rot==0))penn[count].form_code=5;elsepenn[count].form_code=16;}continue;}case(unsigned)7;{if(arr_extremoms[count].in_rot==7)penn[count].form_code=7;else{if((arr_extremoms[count].in_rot==1)‖(arr_extremoms[count].in_rot==0))penn[count].form_code=8;elsepenn[count].form_code=17;}continue}case(unsigned)9{if(arr_extremoms[count].in_rot==1)penn[count].form_code=9else{if((arr_extremoms[count].in_rot==7)‖(arr_extremoms[count].in_rot==0))penn[cout].form_code=10elsepenn[count].form_cooe=18)}}defauttcontinue;}elurn.if((penn[count].form_code==(unsigned)17)((strcmp(temp,"Y」)!=0))){strcpy(temp,"Y");strcat(our_sent,"Y");gotoA;}if((penn[count].form_code==(unsigned)18)((strcmp(temp,"Z")!=0))){strcpy(temp,"Z");strcat(our_sent,"Z");gotoA;}if((penn[count].form_code==3)((strcmp(temp,"C")!=0))){strcpy(temp,"C");strcat(our_sent,"C");gotoA;}if((penn[count].form_code==4)((strcmp(temp,"D")!=0))){strcpy(temp,"D");strcat(our_sent,"D");gotoA;}if((penn[count].form_code==5)((strcmp(temp,"E")!=0))){strcpy(temp,"E");strcat(our_sent,"E");gotoA;}if((penn[count].form_code==6)((strcmp(temp,"F")!=0))){strcpy(temp,"F");strcat(our_sent,"F");gotoA;}if((penn[count].form_code==7)((strcmp(temp,"G")!=0))){strcpy(temp,"G");strcat(our_sent,"G");gotoA;}if((penn[count].form_code==8)((strcmp(temp,"H")!=0))){strcpy(temp,"H");strcat(our_sent,"H");gotoA;}if((penn[count].form_code==9)((strcmp(temp,"|")!=0))){strcpy(temp,"|");strcat(our_sent,"|");gotoA;}if((penn[count].form_code==10)((strcmp(temp,"J")!=0))){strcpy(temp,"J");strcat(our_sent,"J");gotoA;}Aif((penn[count].pen_sts==0)(strcmp(temp,"_")!=0)){strcat(our_sent,"_");strcpy(temp,"_");continue}if((penn[count].form_code==0)(penn[count].pen_sts==1)((strcmp(temp,"B")!=0))){strcpy(temp"B")/***********************************************************************-initialMASKpennhavetobebuildfrompenstrokestableformcodehavetobedone=0recordtoMASKpennisusedinfunctionsdirect,ligat,lig1,lig2,lig3,ord_1_ligat,ord_1_lig1,ord_1_lig2,ord_1_lig3.FromtheseprogramsinformationforeveryfindformhavetobewrittentoMASKfortheseletter.output1-letterrepresentationinthe"LETTERSYMBOLICREPRESENTATION"output2-letterrepresentationinthe"LETTERSYMBOLICREPRESENTATIONINGENERALIZEDFORM".***********************************************************************/intsentense(intnum_of_extrms){externstructMASKpenn[MAX_NUM_OF_EXTREMOMS];externcharour_sent[MAX_LENGTH_SENTENSE];chartemp[10]intcount;strcpy(our_sent,***);strcpy(temp,「_");for(count=1;count<=num_of_extrms;count++){if((penn[count].form_code==(unsigned)1)((strcmp(temp,"A")!=0))){strcpy(temp,"A");strcat(our_sent,"A");gotoA;}if((penn[count].form_code==(unsigned)11)((strcmp(temp,"i")!=0))){strcpy(temp,"i");strcat(our_sent,"j");gotoA;}if((penn[count].form_code==(unsigned)12)((strcmp(temp,"g")!=0))){strcpy(temp,"g");strcat(our_sent,"g");gotoA;}if((penn[count].form_code==(unsigned)13)((strcmp(temp,"f」)!=0))){strcpy(temp,"f");strcat(our_sent,"f");gotoA;}if((penn[count].form_code==(unsigned)14)((strcmp(temp."d")!=0))){strcpy(temp,"d");strcat(our_sent,"d");gotoA;}if((penn[count].form_code==(unsigned)15)((strcmp(temp,"Q")!=0))){strcpy(temp,"Q");strcat(our_sent,"Q");gotoA;}if((penn[count].forn_code==(unsigned)16)((strcmp(temp,"X")!=0))){strcpy(temp"X");strcat(our_sent,"X");gotoA;}strcat(our_sent,"B");continue;}}return(1);}/***********************************************************************afuntionthatrecievestwonumbers,andreturnsthequarterofthesetwonumbersintherangeof0..7.***********************************************************************/intdef_quart(intx,inty){if((x>0)(y==0))return(0);if((x>0)(y>0))return(1);if((x==0)(y>0))return(2);if((x<0)(y>0))return(3);if((x<0)(y==0))return(4);if((x<0)(y<0))return(5);if((x==0)(y<0))return(6);if((x>0)(y<0))return(7);return(15);}/***********************************************************************afunctiontoreturnstheroundnumberofthedivisionoftwointegernumbers.***********************************************************************/intdiv_round(inta,intb){inti=0;inttemp1,temp2;temp1=a;temp2=b;a=abs(a);if(b==0)return(MAXINT);while(a>b){if(b>0)a-=b;elsea+=b;}if((a+a)>bi++;if(((temp1>0)(temp2>0))‖((ternp1<0)(temp2<0)))return(i)elsereturn(-i)}voidsave_files(intnum_direc,char*letter){FILE*fp;inti;intletter_num;charfilename[20];intget_num(char*letter);if((letter_num=get_num(letter))<0){printf("Errorinthenumberoftheletter%c\n",*letter);getch{num_lig++;pr=0;break;}}else{/*ARR_LIG3[num_lig].dir=ARR_LIG3[count].dir+arr_extremoms[num_str].dir;*/num_pns++;penn[num_str].form_code=9;if((arr_extremoms[num_str].pen_sts==(unsigned)0)‖(num_str==num_of_extrrns)){∥ARR_LIG3[num_lig].pen_sts=arr_extremoms[num_str].pen_sts;ARR_LIG3[num_lig].pns_end=num_str;ARR_LIG3[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_LIG3[num_lig].y_end=arr_extremoms[num_str].y_cor;num_lig++;pr=0;break;}}}else{if(pr==1){ARR_LIG3[num_lig].pns_end=num_str-1;ARR_LIG3[num_lig].x_end=arr_extremoms[num_str-1].x_cor;ARR_LIG3[num_lig].y_end=afr_extremoms[num_str-1].y_cor;num_lig++;pr=0;break;}}}}return(num_lig);}/***********************************************************************functionord_1_lig3definesoneorderrightupstrokesfromtheendofrightupstrokesinthearr_extremoms[],recordsoneorderleftupstroke’sparameterstoARR_ORD_2_LIG1[]accordingtohisnumberandlabelsMASKpenn.***********************************************************************/intord_1_lig3(int.num_of_extrms.intnum_lig3){intpr,num_lig.num_pns,count,num_str;pr=0;num_pns=0;num_lig=0;if(num_lig3==0)return(0);for(count=0;count<num_lig3;count++){pr=0if(ARR_LIG3[count].pns_end==(unsigned)D)continue;if(penn[ARR_LIG3[count].pns_end].form_code==(unsigned)0)continue;if(arr_extremoms[ARR_LIG3[count].pns_end+1].dir>2)continue;if(penn[ARR_LIG3[count].pns_end+1].form_code!=0)continue.if(arr_extremoms[ARR_LIG3[count].pns_end].pen_sts==(unsigned)0)continue;for(num_str=ARR_LIG3[count].pns_end+1;num_str<=nur_of_extrms;num_str++){if((arr_extremoms[num_str].dir<=2)(arr_extremoms[num_str].dir>=0)(penn[num_str].form_code==0)){if(pr==0){ARR_ORD_1_LIG3[num_lig].num=num_lig;ARR_ORD_1_LIG3[num_lig].pns_beg=num_str;ARR_ORD_1_LIG3[num_lig].x_beg=arr_extremoms[num_str-1].x_cor;ARR_ORD_1_LIG3[num_lig].y_beg=arr_extremoms[num_str-1].y_cor;ARR_ORD1_LIG3[num_lig].pns_end=num_str;ARR_ORD_1_LIG3[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_ORD_1_LIG3[num_lig].y_end=arr_extremoms[num_str].y_cor;pr=1;num_pns++;penn[num_str].form_code=14;if((num_str==num_of_extrms)‖(arr_extremoms[num_str].pen_sts==(unsigned)0)){num_lig++;pr=0;break;}}else{/*ARR_ORD_1_LIG3[num_lig].dir=ARR_ORD_1_LIG3[count].dir+arr_extremoms[num_str].dir;*/num_pns++;penn[num_str].formcode=14;if((arr_extremoms[num_str].pen_sts==(unsigned)0)‖(num_str==num_of_extrms)){∥ARR_ORD_1_LIG3[num_lig].pen_sts=ar_extremoms[num_str].pen_sts;ARR_ORD_1_LIG3[num_lig].pns_end=num_str;ARR_ORD_1_LIG3[num_lig].x_end=arr_extremoms[num_str].x_cor;ARR_ORD_1_LIG3[num_lig].y_end=arr_extremoms[num_str].y_cor;num_lig++;pr=0;break;}}}else{if(pr==1){ARR_ORD_1_LIG3[num_lig].pns_end=num_str-1;ARR_ORD_1_LIG3[num_lig].x_end=arr_extremoms[num_str-1].x_cor;ARR_0RD_1_LIG3[num_lig].y_end=arr_extremoms[num_str-1].y_cor;num_lig++;pr=0;break;}}}}return(numm_lig)}/*functioncurverecordstoMASKpenn[]formcodetoeachofpenstrokes(exceptlongdown)accordingtoltscunvature.*/voidcurve(intnum_of_extrms){extemstructTABLE_EXTREMOMSarr_extremoms[MAX_NUM_OF_EXTREMOMS];intcount;for(count=0;count<=num_of_extrms;count++)switch(penn[count].form_code){case(unsigned)3{if(arr_extremoms[count].in_rot==7)penn[count].form_code=4;else{if((arr_extremoms[count].in_rot==1)‖(arr_extremoms[count].in_rot==0))penn[count].form_code=3;elsepenn[count].form_code=15;}continue;}case(unsigned)5{if(arr_extremoms[count].in_rot==1)penn[count].form_code=6;else{if((arr_extremoms[count].in_rot==7)‖(arr_extremoms[count].in_rot==0))penn[count].form_code=5;elsepenn[count].form_code=16;}continue;}case(unsigned)7;{if(arr_extremoms[count].in_rot==7)penn[count].form_code=7;else{if((arr_extremoms[count].in_rot==1)‖(arr_extremoms[count].in_rot==0))penn[count].form_code=8;elsepenn[count].form_code=17}continue;}case(unsigned)9{if(arr_extremoms[count].in_rot==1)penn[count].form_code=9;else{if((arr_extremoms[count].in_rot==7)‖(arr_extremoms[count].in_rot==0))penn[count].form_code=10elsepenn[count].form_code=18}}defaultcontinue}eturn;if((penn[count].form_code==(unsigned)17)((strcmp(temp.「Y")!=0))){strcpy(temp,"Y");strcat(our_sent,"Y");gotoA;}if((penn[count].form_code==(unsigned)18)((strcmp(temp,"Z")!=0))){strcpy(temp,"Z");strcat(our_sent,"Z");gotoA;}if((penn[count].form_code==3)((strcmp(temp,"C")!=0))){strcpy(temp,"C";strcat(our_sent,"C");gotoA;}if((penn[count].form_code==4)((strcmp(temp,"D")!=0))){strcpy(temp,"D");strcat(our_sent,"D");gotoA;}if((penn[count].fonn_code==5)((strcmp(temp,"E")!=0))){strcpy(temp,"E");strcat(our_sent,"E");gotoA;}if(penn[count].form_code==6)((strcmp(temp,"F"")!=0))){strcpy(temp,「F");strcat(our_sent,"F");gotoA;}if(penn[count].fomn_code==7)((strcmp(temp,"G")!=0))){strcpy(temp,"G");strcat(our_sent,"G");gotoA;}if((penn[count].form_code==8)((strcmp(temp,"H")!=0))){strcpy(temp,"H");strecat(our_sent,"H");gotoA;}if((penn[count].form_code==9)((strcmp(temp,"I")!=0))){strcpy(temp,"I");strcat(our_sent,"I");gotoA}if((penn[count]form_code==10)((strcmp(temp,"J")!=0))){strcpy(temp,"J");strcat(our_sent,"J");gotoA}Aif((penn[count].pen_sts==0)(strcmp(temp,"_")!=0)){strcat(our_sent,"_");strcpy(temp,"_");continue}if((penn[count].form_code==0)(penn[count].pen_sts==1)((strcmp(temp,"B")!=0))){strcpy(temp,"B")./***********************************************************************-initialMASKpennhavetobebuildfrompenstrokestableform_codehavetobedone=0recordtoMASKpennisusedinfunctionsdirect,ligat,lig1,lig2,lig3,ord_1_ligat,ord_1_lig1,ord_1_lig2,ord_1_lig3.FromtheseprogramsinformationforeveryfindformhavetobewrittentoMASKfortheseletter.output1_1etterrepresentationinthe"LETTERSYMBOLICREPRESENTATION".output2_letterrepresentationinthe"LETTERSYMBOLICREPRESENTATIONINGENERALIZEDFORM".***********************************************************************/intsentense(intnum_of_extrms){extemstructMASKpenn[MAX_NUM_OF_EXTREMOMS];extemcnarour_sent[MAX_LENGTH_SENTENSE];chartemp[10]intcount;strcpy(our_sent,***);strcpy(temp,"_");for(count=1;count<=num_of_extrms;count++){if((penn[count].form_code==(unsigned)1)((strcmp(temp,"A")!=0))){strcpy(temp,"A");strcat(our_sent,"A");gotoA;}if((penn[count].form_code==(unsigned)11)((strcmp(temp,"i")!=0))){strcpy(temp,"i");strcat(our_sent,"i");gotoA;}if((penn[count].form_code==(unsigned)12)((strcmp(temp,"g")!=0))){strcpy(tamp,「g");strcat(our_sent,"g");gotoA;}if((penn[count].form_code==(unsigned)13)((strcmp(temp,"f")!=0))){strcpy(temp,"f」);strcat(our_sent,"f");gotoA;}if((penn[count].form_code==(unsigned)14)((strcmp(temp,"d")!=0))){strcpy(temp,"d");strcat(our_sent"d");gotoA;}if((penn[count].form_code==(unsigned)15)((strcmp(temp,"Q")=0))){strcpy(temp,"Q");strcat(our_sent,"Q");gotoA;}if((penn[count].form_code==(unsigned)16)((strcmp(temp,"X")=0))){strcpy(temp,"X");strcat(our_sent,"X");gotoA}strcat(our_sent,"B");continue}}return(1);}/***********************************************************************afuntionthatrecievestwonumbers,andreturnsthequarterofthesetwonumbersintherangeof0..7.***********************************************************************/intdef_quart(intx,inty){if(x>0)(y==0))return(0);if(x>0)(y>0))return(1);if(x==0)(y>0))return(2);if(x<0)(y>0))return(3);if((x<0)(y==0))return(4);if(x<0)(y<0))return(5);if(x==0)(y<0))return(6);if(x>0)(y<0))return(7);return(15)}/***********************************************************************afunctiontoreturnstheroundnumberofthedivisionoftwointegernumbers.***********************************************************************/intdiv_round(inta,intb){inti=0;inttemp1,temp2;temp1=a;temp2=b;a=abs(a);if(b==0)return(MAXINT);while(a>b){if(b>0)a-=b;elsea+=b;i++;}if((a+a)>b)i++;if(((temp1>0)(temp2>0))‖((temp1<0)(temp2<0)))return(i);elsereturn(-i);}voidsave_files(intnum_direc,char*letter){FILE*fp;inti;intletter_num;charfilename[20];intget_num(char*letter);if((letter_num=get_num(letter))<0){prinff("Errorinthenumberoftheletter%c\n",*letter);getch;}/*******/fp=fopen("fextr.out","ab+");fprintf(tp,"%d%c%d%d",map_char[letter_num][1],(*letter),num_direc,num_of_extrms);for(i=0;i<=num_of_extrms;i++)fwrite(arr_extremoms[i],sizeof(structTABLE_EXTREMOMS),1,fp);fprintf(fp,"\n");fclose(fp);/*******/fp=fopen(「feat.out","ab+");fprintf(fp,"%c%d%.4f%.4f%.4f%.4\n",(*letter),map_chaf[letter_num][1],y_vec_beg,y_vec_end,x_vec_beg,x_vec_end);fclose(fp);/*******/fp=fopen("feat1.out","ab++");fprintf(fp,"%c%d%d\n",(*letter),map_char[letter_num][1],amp_y);tclose(fp);/*******/if(num_direc==0)fp=fopen(「fsent0.out","ab+");if(num_direc==1)fp=fopen(「fsent1.out","ab++");if(num_direc==2)fp=fopen(「fsent2.out","ab+");if(num_direc==3)fp=fopen(「fsent3.out」,"ab+");if(num_direc==4)fp=fopen(「fsent4.out","ab+");if(num_direc==5)fp=fopen(「fsent5.out","ab+");if(num_direc==6)fp=fopen(「fsent6.out","ab+");fprintf(fp,%d%c",map_char[letter_num][1],(*letter));if(num_direc!=0){fpnntf(fp,"%s",our_sent);for(i=0;i<num_direc;i++)fprintf(fp."%.4f%.4f",x[i].x_b,x[i].x_e);for(i=0;i<num_direc;i++)fprintf(fp."%.4f%4f",y[i].y_b,y[i].y_e);fprintf(fp,"%d",amp_y);}fpnntf(fp,"\n")fclose(fp);}intadd_map(char*letter){inti;for(i=0;i<NUM_SYMBOLS;i++)if(*letter==(cnar)map_char[i]){map_char[i][1]++;return(i);}if(i==NUM_SYMBOLS){printf("Thereisnosuchcharacterinthemap%c\n",*letter);return(1);}return(-1);}voidread_map(void){FILE*fp;inti;fp=fopen(*map_ch","rb");for(i=0;i<NUM_SYMBOLS;i++)fscanf(fp,"%d%d\n",map_char[i],map_char[i][1]);fclose(fp);}voidsave_map(void){FILE*fp;inti;fp=fopen("map_ch","wb");for(i=0;i<NUM_SYMBOLS;i++)fprintf(fp,%d%d\n",map_cha[i],map_char[i][1]);fclose(fp);}intget_num(char*letter){inti;for(i=0;i<NUM_SYMBOLS;i++)if(*letter==(char)map_char[i])return(i);return(-1);}]]>III.一般化<![CDATA[voidmain(void){FILE*fp,*fp1;inti;charfilename[30],filename1[30];read_map;for(i=1;i<=MAXAMOUNT_DIREC;i++){if(i==1){strcpy(filename,"fsent1.out");strcpy(filename1,"fgen1.out");printf("——%d——\n",i);gotoA;}if(i==2){strcpy(filename,"fsent2.out");strcpy(filename1,"fgen2.out");printf("——%d——\n",i);gotoA;}if(i==3){strcpy(filename,"fsent3.out");strcpy(filename1,"fgen3.out");printf(「——%d——\n",i);gotoA;}if(i==4){strcpy(filename,"fsent4.out");strcpy(filename1,"fgen4.out");printf("——%d——\n",i);gotoA;}if(i==5){strcpy(filename,"fsent5.out");strcpy(filename1,"fgen5.out");printf("——%d——\n",i);gotoA;}if(i==6){strcpy(filename,"fsent6.out");strcpy(filename1,"fgen6.out");printf("——%d——\n",i);gotoA;}Afp1=fopen(filename1,"wb");fclose(fp1);gener(i.filename,filename1);}fp1=fopen("genfeat.out","wb");fclose(fp1);gener_feat;fp1=fopen("genfet1.out","wb");fclose(tp1);gener_feat1}voidread_map(void){FILE*fp;inti;fp=fopen("map_ch","rb」);for(i=0;i<NUM_SYMBOLS;i++)fscanf(fp,"%d%c\n",map_char[i],map_char[i][1]);fclose(fp);}voidgener(inti,charfilename[],charfilename1[]){voidgether(charletter,intnum_dir,charfilename[],charfilename1[]);intj;for(j=0;j<100;j++){if(map_char[j][1]>0)gether(map_char[j],i,filename,filename1);}}voidgener_feat(void){voidgether_feat(charletter);intj;for(j=0;j<100;j++){if(map_char[j][1]>0)gether_teat(map_char[j]);}}voidgener_feat1(void){voidgether_feat1(charletter);intj;for(j=0;j<100;j++){if(map_char[j][1]>0)gether_feat1(map_char[j]);}}voidgether(charletter,intnum_dir,charfilename[],charfilename1[]){charch;intletter_num;inti,amount;intamp_y;FILE*fp;intconv(void);voidconv_dir_defin(intamount,intnum_dir);voidwrite_to_gen(intamount,intnum_dir,charletter);voidsave_gen(intnum_dir,charletter,charfilename1[]);voidsave_xy(intnum_dir,charfilename1[]);amount=0;gen.repr.num=0;for(i=0;i<=MAX_AMOUNT_DIREC;i++)gen.repr.tabl[i].number=0;fp=fopen(filename,"rb");while(fscanf(fp,"%d",letter_num)!=EOF){fscanf(fp,"%c",ch);fscanf(fp,"%s",our_sent);for(i=0;i<num_dir;i++)fscanf(fp,"%f%f",bx[amount][i];x_b,bx[amount][i].x_e),for(i=0;i<num_dir;i++)fscanf(fp,"%f%f",by[amount][i].y_b,by[amount][i].y_e);fscanf(fp,"%d\n",amp_y);if(ch==letter){conv;write_to_gen(amount,num_dir-1,letter);amount++;if(amount==MAX_REPRESNT){fclose(fp);break;}}}fclose(fp);if(amount>0){conv_dir_defin(amount,num_dir);save_gen(num_dir,letter,filename1);save_xy(num_dir,filename1);}}voidsave_gen(intnum_dir,charletter,charfilename1[]){FILE*fp1;inti,j;fp1=fopen(fiiename1,"ab++");fprintf(fp1,%c",letter);fprintf(fp1,%d%c%d",gen.amount,gen.repr.letter,gen.repr.num);for(i=0;i<=num_dir;i++){fprintf(fp1,%d",gen.repr.tabl[i].number);if(gen.repr.tabl[i].number>0){for(j=0;j<gen.repr.tabl[i].number;j++)fprintf(fp1,"%s",gen.repr.tabl[i].row[j].str);fprintf(fp1,"\n";}}fclose(fp1);}  voidsave_xy(intnum_dir,charfilename1[])  {FILE*fp1;  inti;  fp1=fopen(filename1,"ab+");  for(i=0;i<num_dir;i++)  fprintf(fp1,"%4f%.4f",x_midll[i].x_b,x_midll[i].x_e);  for(i=0;i<num_dir;i++)  fprintf(fp1,"%4f%.4f",x_dev[i].x_b,x_dev[i].x_e);  for(i=0;i<num_dir;i++)  fprintf(fp1,"%.4f%.4f",y_midll[i].y_b,y_midll[i].y_e); for(i=0;i<num_dir;i++)  fprintf(fp1,"%4f%4f\n",y_dev[i].y_b,y_dev[i].y_e);  fclose(fp1);}voidsavefeat1(charletter){FILE*fp1;  inti;  fp1=fopen(「genfeat.out","ab+");  fprintf(fp1,"%c",letter);  fprintf(fp1,"%.4f%.4f%.4f%.4f\n",x_midll.x_b,x_midll.x_e,  y_midll.y_b,y_midll.y_e);  for(i=0;i<3;i++)  {fpritf(fp1,"%.4f%.4f%.4f%.4f\n",x_dev[i].x_b,x_dev[i].x_e,  y_dev[i].y_b,y_dev[i].y_e);  }  fclose(fp1);}voidsave_feat2(charlettef){FILE*fp1;  inti;  fp1=fopen("genfet1.out","ab+");  fprintf(fp1,"%c",letter);  fprintf(fp1,"%.4f%d%d\n",y_midll.y_b,amp_y.amp_y[1]);  for(i=0;i<3;i++)  fprintf(fp1,%.4f",y_dev[i].y_b);  fprintf(fp1,「\n」);  fclose(fp1);}voidgether_feat(charletter){  voidcalc_vec(intamount);  FILE*fp,fp1;  intamount,letter_num;  charch;  amount=0;  fp=fopen("feat.out","rb");  while(fscanf(fp,*%c",ch)!=EOF)  {fscanf(fp,"%d%f%f%f%f\n",letter_num.  by[amount].y_b,by[amount].y_e,  bx[amount][D].x_b,bx[amount].x_e);  if(ch==letter)  {amount++;  if(amount==MAX_REPRESNT)break;  }  }  fclose(fp);if(amount>0){calc_vec(amount);  save_feat1(letter);}}voidgether_feat1(charletter){voidcalc_amp(intamount);FILE*fp;intamount,letter_num; charch;amount=0;by[i][count].y_e;  summ_4=summ_4+temp*temp;  }  x_dev[count].x_b=sqrt(summ_1/(float)amount);  y_dev[count].y_b=sqrt(summ_2/(float)amount);  x_dev[count].x_e=sqrt(summ_3/(float)amount);  y_dev[count].y_e=sqrt(summ_4/(float)amount);  }  }  return;}voidcalc_vec(intamount){intcount,i;  floatsumm_1=0.0;  floatsumm_2=0.0;  floatsumm_3=0.0;  floatsumm_4=0.0;  floatsumm_1m=0.0;  floatsumm_2m=0.0;  floatsumm_3m=0.0;  floatsumm_4m=0.0;  floattemp;  intam1,am2,am3,am4,am5,am6,am7,am8;  if(amount>0)  for(i=0;i>amount;i++)  {summ_1=summ_1+bx[i].x_b;  summ_2=summ_2+by[i].y_b;  summ_3=summ_3+bx[i].x_e;  summ_4=summ_4+by[i].y_e;  }  x_midll.x_b=summ_1/(float)amount;  y_midll.y_b=summ_2/(float)amount;  x_midll.x_e=summ_3/(float)amount;  y_midll.y_e=summ_4/(float)amount;  summ_1=0.0;  summ_2=0.0;  summ_3=0.0;  summ_4=0.0;  summ_1m=0.0;  summ_2m=0.0;  summ_3m=0.0;  summ_4m=0.0;  am1=0;  am2=0;  am3=0;  am4=0;  am5=0;  am6=0;  am7=0;  am8=0;  for(i=0;i<amount;i++)  {temp=x_midll.x_b-bx[i].x_b;  if(temp>0.0)  {summ_1=summ_1+temp*temp;  am1++;}  else  {summ_1m=summ_1m+temp*temp;  am2++;  }  temp=y_midll.y_b-by[i].y_b;  if(temp>0.0)  {summ_2=summ_2+temp*temp;  am3++;  }  else  {summ_2m=summ_2m+temp*temp;  am4++;  }  temp=x_midll.x_e-bx[i].x_e;  if(temP>0.0)  {summ_3=summ_3+temp*temp;  am5++;  }  else  {summ_3m=summ_3m+temp*temp;  am6++;  }  temp=y_midll.y_e-by[i].y_e;  if(temp>0.0)  {summ_4=summ_4+temp*temp;  am7++;  }  else  {summ_4m=summ_4m+temp*temp;  am8++;  }  }  if(am1==0)x_dev.x_b=0.0;∥dev-  elsex_dev.x_b=sqrt(summ_1/(float)am1);  if(am2==0)x_dev[1].x_b=0.0;∥dev+  elsex_dev[1].x_b=sqrt(summ_1m/(float)am2);  if((am1+am2)==0)x_dev[2].x_b=0.0;∥(dev  elsex_dev[2].x_b=sqrt((summ_1+summ_1m)/(float)(am1+am2));  if(am3==0)y_dev.y_b=0.0;∥dev-  elsey_dev.y_b=sqrt(summ_2/(float)am3);  if(am4==0)y_dev[1].y_b=0.0;∥dev+  elsey_dev[1].y_b=sqrt(summ_2m/(float)am4);  if((am3+am4)==0)y_dev[2].y_b=0.0;∥dev  elseydev[2].y_b=sqrt((summ_2+summ_2m)/(float)(am3+am4));  if(am5==0)x_dev.x_e=0.0;∥dev-  elsex_dev.x_e=sqrt(summ_3/(float)am5);  if(am6==0)x_dev[1].x_e=0.0;∥dev+  elsex_dev[1].x_e=sqrt(summ_3m/(float)am6);  if((am5+am6)==0)xdev[2].x_e=0.0;∥dev  elsex_dev[2].x_e=sqrt((summ_3+summ_3m)/(float)(am5+am6));  if(am7==0)y_dev.y_e=0.0;∥dev-  elsey_dev.y_e=sqrt(summ_4/(float)am7);  if(am8==0)y_dev[1].y_e=0.0;∥dev+  elsey_dev[1].y_e=sqrt(summ_4m/(float)am8);  if((am7+am8)==0)y_dev[2].y_e=0.0;∥dev  elsey_dev[2].y_e=sqrt((summ_4+summ_4m)/(float)(am7+am8));}fp=fopen("feat1.out","rb");while(fscanf(fp,"%c",ch)!=EOF){fscanf(fp,"%d%d\n",lette_num,amp_y[amount]);if(ch==letter){amount++;if(amount==MAX_REPRESNT)break;}}fclose(fp);if(amount>0){calc_amp(amount);save_feat2(letter);}}/***********************************************************************functionconv_dir_defincalculatesdispersionsofxandyrelativecoordinatesinletterskeleton.***********************************************************************/voidconv_dir_defin(intamount,intnum_dir){intcount,i;floatsumm_1=0.0;floatsumm_2=0.0;floatsumm_3=0.0;floatsumm_4=0.0;floattemp;if(amount>=0){for(count=0;count<num_dir;count++){summ_1=0.0;summ_2=0.0;summ_3=0.0;summ_4=0.0;for(i=0;i<amount;i++){summ_1=summ_1+bx[i][count].x_b;summ_2=summ_2+by[i][count].y_b;summ_3=summ_3+bx[i][count].x_e;summ_4=summ_4+by[i][count].y_e;}x_midll[count].x_b=summ_1/(float)amount;y_midll[count].y_b=summ_2/(float)amount;x_midll[count].x_e=summ_3/(float)amount;y_midll[count].y_e=summ_4/(float)amount;summ_1=0.0;summ_2=summ_1;summ_3=summ_2;summ_4=summ_3;for(i=0;i<amount;i++){temp=x_midll[count].x_b;bx[i][count].x_b;summ_1=summ_1+temp*temp;temp=y_midll[count].y_b-by[i][count].y_b;summ_2=summ_2+temp*temp;temp=x_midil[count].x_e-bx[i][count].x_e;summ_3=summ_3+temp*temp;temp=y_midll[count].y_e;voidcalc_amp(intamount){inti;floatsumm_1=0.0;floatsumm_1m=0.0;floatamp_midll,temp;intam1,am2;intmax,min;max=amp_y;min=amp_y;if(amount>0)for(i=0;i<amount;i++){summ_1=summ_1+amp_y[i];if(amp_y[i]>max)max=amp_y[i];if(amp_y[i]<min)min=amp_y[i];}amp_midll=summ_1/(float)amount;am1=0;am2=0;summ_1=0.0;summ_1m=0.0;for(i=0;i<amount;i++){temp=amp_midll-amp_y[i];if(temp>0.0){summ_1=summ_1+temp*temp;am1++;}else{summ_1m=summ_1m+temp*temp;am2++;}}if(am1==0)y_dev.y_b=0.0;∥dev-elsey_dev.y_b=sqrt(summ_1/(float)am1);if(am2==0)y_dev[1].y_b=0.0;∥dev+elsey_dev[1].y_b=sqrt(summ_1m/(float)am2);if((am1+am2)==0)y_dev[2].y_b=0.0;∥develsey_dev[2].y_b=sqrt((summ_1+summ_1m)/(float)(am1+am2));y_midll.y_b=amp_midll;amp_y=max;amp_y[1]=min;}intconv(void){char*p;intcount;count=0;p=strtok(our_sent,"A");if(p){while(p){strcpy(buf[count],p);if(strlen(buf[count])>9)return(0);count++;p=strtok(NULL,"A"),}}else{printf(..Thereisnodirectionsinsentence");getch;return(0);}return(1);}∥********************************************∥words』generalization∥********************************************intcmpr(chara,charb,constcharc,constchard,constcharq){if((a==c)(b==d)‖(a==d)(b==c)‖(a==c)(b==q)‖(a==q)(b==c)‖(a==d)(b==q)‖(a==q)(b==d)){return(1);}elsereturn(0);}intcomp1(chara[],charb[],inti)/********************************************comparesiontwoletterswiththesamenumberinthewordsaandbcount-numberoflettersinwords********************************************/{if(a[i]==b[i]){stmcat(lgt;b[i],1);return(1);}if(cmpr(a[i],b[i],′C′,′D′,′Q)==1){strcat(lgt,"Q");return(1);}if(cmpr(a[i],b[i],′E′,′F′,′X′)==1){strcat(lgt,"X");return(1);}if(cmpr(a[i],b[i],′G′,′H′,′Y)==1){strcat(lgt,"Y");return(1);}if(cmpr(a[i],b[i],′I′,′J′,′Z′)==1){strcat(lgt,"Z");return(1);}return(0);}intcompar(intnum_dir,intcount)/********************************************comparisonthewordwithword’srowk-amountoflettersinthewordsj-amountofwordsintherowreturn;777-wordisn’tintherow0-10-numberofwordsifthereiscomparisonoftheword’spart222-wordalreadyisintherow********************************************/{intk,j,n,m,l,temp;strcpy(lgt,**);for(j=0;j<gen.repr.tabl[count].number;j++)if(strcmp(buf[count],gen.repr.tabl[count].row[j].str)==0)return(222);n=strlen(buf[count]);for(j=0;j<gen.repr.tabl[count].number;j++){strcpy(lgt,**);m=strlen(gen.repr.tabl[count].row[j].str);if(n==m){for(k=0;k<=n;k++){temp=comp1(buf[count],gen.repr.tabl[count].row[j].str,k);if(temp==0)break;elseif((temp==1)(k==n)){for(l=0;l<gen.repr.tabl[count].number;l++)if(strcmp(lgt,gen.repr.tabl[count].row[1].str)==0)return(222);return(j);}}}else{if(j==gen.repr.tabl[count].number-1)return(777);}}return(777);}/********************************************i-numberofrow(0-infrontoffirstdirection1-afterfirstdir2-afferseconddir...)********************************************/voidwrite_to_gen(intamount,infnum_dir,charletter){inti,count,j,temp;intm,n;genrepr.letter=letter;gen.repr.num++;for(count=0;count<num_dir+2;count++){if(gen.repr.tabl[count].number==0){if(buf[count]!=NULL){strcpy(gen.repr.tabl[count].row.str,buf[count]);gen.repr.tabl[count].number++;}}else{temp=compar(num_dir,count);if(temp==777){j=gen.repr.tabl[count].number;strcpy(gen.repr.tabl[count].row[j].str,buf[count]);gen.repr.tabl[count].number++;}else{if(temp!=222){∥j=gen[num_dir].repr[i].tabl[counf].number;strcpy(gen.repr.tabl[count].row[temp].str,lgt);∥gen[num_dir].repr[i].tabl[count].number++;}}}}return;}voidmain(void){intlength(intnum_dir);voidcutting(inti,intk,FILE*fpx);voidadd_1(intnum_dir);charfilename1[30];chartemp[10];inti,k;intnum_cut_long;fp=fopen("g_cut1.out","wb");fclose(fp);fp=fopen("g_cut2.out","wb");fclose(fp);fp=fopen(「g_cut3.out","wb");fclose(fp);fp=fopen("g_cut4.out","wb");fclose(fp);fp=fopen("g_cut5.out","wb");fclose(fp);fp=fopen("g_cut6.out","wb");fclose(fp);for(i=1;i<=6;i++){strcpy(filename1,"fgen..);sprintf(temp,"%d",i);stmcat(filename1,temp,1);strcat(filename1,".out");if((fp=fopen(filename1,"r+b"))==NULL)continue;strcpy(filename1,"g_cut");strncat(filename1,temp,1);strcat(filename1,".out");if((fp1=fopen(filename1,"a+b"))==NULL)continue;add_1(i);fclose(fp);fclose(fp1);}for(i=2;i<=6;i++){strcpy(filename1,"fgen");sprintf(temp,"%d",i);strncat(filename1,temp,1);strcat(filename1,".out");if((fp=fopen(filename1,"r+b"))==NULL)continue;while((num_cut_long=length(i))>0){for(k=i-1;k>=1;k-){switch(k){case1fp1=fopen(「g_cut1.out","a+b");cutting(i,k,fp1);fclose(fp1);break;case2fp2=fopen(「g_cut2.out","a+b");cutting(i,k,fp2);fclose(fp2);break;case3fp3=fopen("g_cut3.out","a+b");cutting(i,k,fp3);fclose(fp3);break;case4fp4=fopen(「g_cut4.out","a+b");cutting(i,k,fp4);fclose(fp4);break;case5fp5=fopen("g_cut5.out","a+b");cutting(i,k,fp5);fclose(fp5);break;case6fp6=fopen("g_cut6.out","a+b");cutting(i,k,fp6);fclose(fp6);break;defaultprintf("Errorincutting\n");getch;}}}fclose(fp);}}voidcutting(inti,intk,FILE"fpx){voidcut_sent(intnum_dir);voidcut_skel(intnum_dir,intk);voidsav_new(intnum_dir,intk,FILE*fp1);cut_skel(i,k);cut_sent(i);sav_new(i,k,fpx);}intlength(intnum_dir){inti,j;floatarr_hip[6];charletter;intpr;floattemp_fl,w;inttemp;while(fscanf(fp,"%c",letter)!=EOF)/*letterfromgenset*/{fscanf(fp,"%d%c%d",gen.amount,gen.repr.letter,gen.repr.num);for(i=0;i<=num_dir;i++){fscanf(fp,"%d",gen.repr.tabl[i].number);for(j=0;j<gen.repr.tabl[i].number;j++)fscanf(fp,"%s",gen.repr.tabl[i].row[j].str);fscanf(fp,"\n");}for(i=0;i<num_dir;i++)fscanf(fp,"%f%f",x_midll[i].x_b,x_midll[i].x_e);for(i=0;i<num_dir;i++)fscanf(fp,"%f%f",x_dev[i].x_b,x_dev[i].x_e);for(i=0;i<num_dir;i++)fscanf(fp,"%f%f",y_nidll[i].y_b,y_midll[i].y_e);for(i=0;i<num_dir;i++)fscanf(fp,"%f%f\n",y_dev[i].y_b,y_dev[i].y_e);for(i=0;i<num_dir;i++)arr_hip[i]=fabs(y_midll[i].y_e-y_midll[i].y_b);for(i=0;i<num_dir;i++)arr_num_long[i]=i;pr=1;while(pr==1){pr=0;for(i=num_dir-1;i>=1;i-){if(arr_hip[i]<arr_hip[i-1]){temp_fi=arr_hip[i-1];arr_hip[i-1]=arr_hip[i];arr_hip[i]=temp_fi;temp=arr_num_long[i-1];arr_num_long[i-1]=arr_num_long[i];arr_num_long[i]=temp;pr=1;}}}w=1.0;for(i=0;i<num_dir;i++){coef[i]=w*(1.0-arr_hip[i]);w=coef[i];}return(1);}return(-1);}voidpaste(intk,intout_number,structSTRINGout[10],intin_number,structSTRINGin[10]){inti,j,m,len_out;chara[20];m=0;gen_cut.repr.tabl[k].number=out_number*in_number;if(gen_cut.repr.tabl[k].number>=100)gen_cut.repr.tabl[k].number=99;for(i=0;i<out_number;i++)for(j=0;j<in_number;j++){strcpy(a,****);len_out=strlen(out[i].str);if(out[i].str[len_out-1]==in[j].str){if(len_out>1){strncpy(a,out[i].str,len_out-1);a[len_out-1]=′\0′;}elsestrcpy(a,****);}elsestrcpy(a,out[i].str);strcat(a,in[j].str);if(strlen(a)<10){strcpy(gen_cut.repr.tabl[k].row[m].str,a);m++;if(m>=100)break;}else{printf("ERR.paste,lengthofpastedword>10**);getch;}}}/********************************************num_dir-anishialamountoflong.k-amountoflong,whichhavetobestay.(num_dir-k)-numberofloop.********************************************/voidcut_sent(intnum_dir){voidcut_word_in(chargen_cut[15],chara[15]);voidcut_word_out(chargen_cut[15],chara[15]);intj,k,i;chara[15];intout_number,in_number,len,pr,pr1;structSTRlNGout[10];structSTRINGin[10];gen_cut.amount=gen.amount;gen_cut.repr.letter=gen.repr.letter;gen_cut.repr.num=gen.repr.num;j=0;k=0;pr=0;pr1=0;while(j<num_dir){if(mark_long[i]!=0){j++;pr1=1;continue;}elsebreak;}if(pr1==1){in_number=gen.repr.tabl[j].number;for(i=0;i<in_number;i++){strcpy(a,gen.repr.tabl[j].row[i].str);cut_word_in(gen.repr.tabl[j].row[i]str,a);strcpy(in[i].str,a);}gen_cut.repr.tabl[k].number=in_number;for(i=0;i<in_number;i++)strcpy(gen_cut.repr.tabl[k].row[i].str,in[i].str);pr1=0;}else{gen_cut.repr.tabl[k].number=gen.repr.tabl[j].number;for(i=0;i<gen_cut.repr.tabl[k].number;i++)strcpy(gen_cut.repr.tabl[k].row[i].str,gen.repr.tabl[j].row[i].str);}for(i=0;i<gen_cut.repr.tabl.number;i++){if(gen_cut.repr.tabl.row[i].str=="_")gen_cut.repr.tabl.row[i].str="*";else{if(gen_cut.repr.tabl.row[i].str=="*")else{strcpy(a,"*");strcat(a,gen_cut.repr.tabl.row[i].str);strcpy(gen_cut.repr.tabl.row[i].str,a);}}}j++;k++;while(i<num_dir){while((mark_long[j]==0)(i<nurm_dir)){gen_cut.fepr.tabl[k].number=gen.repr.tabl[i].number;for(i=0;i<gen_cut.repr.tabl[k].number;i++)strcpy(gen_cut.repr.tabl[k].row[i].str,gen.repr.tabl[j].row[i].str);j++;k++;}pr=1;out_number=gen.reprtabl[j].number;for(i=0;i<out_number;i++){strcpy(a,gen.repr.tabl[j]row[i].stt);cut_word_out(gen.repr.tabl[j].row[i].str,a);strcpy(out[i].str,a);}while((mark_long[j]==1)(j<num_dir))j++;if(j==num_dir)break;pr=0;in_number=gen.repr.tabl[j].number;for(i=0;i<in_number;i++){strcpy(a,gen.repr.tabl[j].row[i].str);cut_word_in(gen.repr.tabl[j].row[i].str,a);strcpy(in[i].str,a);}paste(k,out_number,out,in_number,in);j++;k++;}if(pr==1){gen_cut.repr.tabl[k].number=out_number;for(i=0;i<out_number;i++)strcpy(gen_cut.repr.tabl[k].row[i].str,out[i].str);}else{gen_cut.repr.tabl[k].number=gen.repr.tabl[j].number;for(i=0;i<gen_cut.repr.tabl[k].number;i++)strcpy(gen_cut.repr.tabl[k].row[i].str,gen.repr.tabl[j].row[i].str);}k++;for(i=0;i<gen_cut.repr.tabl[k-1].number;i++){len=strlen(gen_cut.repr.tabl[k-1].row[i].str);if(gen_cut.repr.tabl[k-1].row[i].str[len-1]=="_");else{strcpy(a,gen_cut.repr.tabl[k-1].row[i].str);strcat(a,"_");strcpy(gen_cut.repr.tabl[k-1].row[i].str,a);strcpy(a,gen_cut.repr.tabl[k-1].row[i].str);}}}voidcut_skel(intnum_dir,intk){intj;intl;floatmin_x,min_y;for(j=0;j<6;j++)mark_long[j]=0;for(j=0;j<num_dir-k;j++)mark_long[arr_num_long[j]]=1;l=0;for(j=0;j<num_dir;j++){if(mark_long[j]==0){cut_x_midll[l].x_b=x_midll[j].x_b;cut_x_midll[l].x_e=x_midll[j].x_e;cut_y_midll[l].y_b=y_midll[j].y_b;cut_y_midll[l].y_e=y_midll[j].y_e;cut_x_dev[l].x_b=x_dev[j].x_b;cut_x_dev[l].x_e=x_dev[j].x_e;cut_y_dev[l].y_b=y_dev[j].y_b;cut_y_dev[l]y_e=y_dev[j].y_e;1++;}}min_x=9999.0;min_y=9999.0;for(j=0;j<=l;j++){if(min_x>cut_x_midl[j].x_b)min_x=cut_x_midll[j].x_b;if(min_x<cut_x_midll[j].x_e)min_x=cut_x_midll[j].x_e;if(min_y<cut_y_midll[j].y_b)min_y=cut_y_midll[j].y_b;if(min_y<cut_y_midll[j].y_e)min_y=cut_y_midll[j].y_e;}for(j=0;j<l;j++){cut_x_midll[j].x_b=cut_x_midll[j].x_b-min_x;cut_x_midll[j].x_e=cut_x_midll[j].x_e-min_x;cut_y_midll[j].y_b=cut_y_midll[j].y_b-min_y;cut_y_midll[j].y_e=cut_y_midll[j].y_e-min_y;}}voidsav_new(intnum_dir,intk,FILE*fp1){inti,j;fprintf(fp1,"%c",gen_cut.repr.letter);fprintf(fp1,"%f",coef[num_dir-k-1]);fprintr(fp1,"%d%c%d",gen_cut.amount,gen_cut.repr.letfer,gen_cut.repr.num);for(i=0;i<=k;i++){fprintf(fp1,"%d",gen_cut.repr.tabl[i].number);if(gen_cut.repr.tabl[i].number>0){for(j=0;j<gen_cut.repr.tabl[i].number;j++)fprintf(fp1,"%s",gen_cut.repr.tabl[i].row[j].str);fprintf(fp1,"\n");}}for(i=0;i<k;i++)fprintf(fp1,"%.4f%.4f",cut_x_midll[i].x_b,x_midll[i].x_e);for(i=0;i<k;i++)fprintf(fp1,"%.4f%.4f",cut_x_dev[i].xb,x_dev[i].x_e);for(i=0;i<k;i++)fprintf(fp1,"%.4f%.4f",cut_y_midll[i].y_b,y_midll[i].y_e);for(i=0;i<k;i++)fprintf(fp1,"%.4f%.4f\n",cut_y_dev[i].y_b,y_dev[i].y_e);}intcmpr_out(charc){if((c==′E′)l‖(c==′F′)‖(c==′X′)‖(c==′g′)‖(c==′G′)‖(c==′H′)‖(c==′f)‖(c==′Y′))return(1);elsereturn(0);}intcmpr_in(charc){if((c==′C′)‖(c==′D′)‖(c==′Q′)‖(c==′i′)‖(c==′J′)‖(c==′l′)‖(c==′d′)‖(c==′Z′))return(1);elsereturn(0);}voidcut_word_out(chargen_cut[15],chara[15]){inti;intlen;len=strlen(gen_cut);i=len-1;while(cmpr_out(gen_cut[i])==1){i-;if(i<0)break;}if(i<0)strcpy(a,"_");else{stmcpy(a;gen_cut,i+1);a[i+1]=′\0′;}}voidcut_word_in(chargen_cut[15],chara[15]){inti;intlen;len=strlen(gen_cut);i=0;while(cmpr_in(gen_cut[i])==1){i++;if(i>len-1)break;}if(i>len-1)strcpy(a,"_");else{strcpy(a,****);strncpy(a,gen_cut+i,len-i);a[len-i]=′\0′;}}voidadd_1(intnum_dir){charletter;inti,j;while(fscanf(fp,"%c",letter)!=EOF)/*letterfromgenset*/{fprintf(fp1,"%c",letter);fprintf(fp1,"%f".1.0);fscanf(fp,"%d%c%d",gen.amount,gen.repr.letter,gen.repr.num);fprintf(fp1,"%d%c%d",gen.amount,gen.repr.letter,gen.repr.num);for(i=0;i<=num_dir;i++){fscanf(fp,"%d",gen.repr.tabl[i].number);fprintf(fp1,"%d",gen.repr.tabl[i].number);for(j=0;j<gen.repr.tabl[i].number;j++){fscanf(fp,"%s",gen.repr.tabl[i].row[j].str);fprintf(fp1,"%s",gen.repr.tabl[i].row[j].str);}fscanf(fp,"\n");fprintf(fp1,"\n");}for(i=0;i<num_dir;i++){fscanf(fp,"%f%f",x_midll[i].x_b,x_midll[i].x_e);fprintf(fp1,"%f%f",x_midll[i].x_b,x_midll[i].x_e);}for(i=0;i<num_dir;i++){fscanf(fp,"%f%f",x_dev[i].x_b,x_dev[i].x_e);fprintf(fp1,"%f%f",x_dev[i].x_b,x_dev[i].x_e);}for(i=0;i<num_dir;i++){fscanf(fp,"%f%f",y_midll[i].y_b,y_midll[i].y_e);fprintf(fp1,"%f%f",y_midll[i].y_b,y_midll[i].y_e);}for(i=0;i<num_dir;i++){fscanf(fp,"%f%f\n",y_dev[i].y_b,y_dev[i].y_e);fprintf(fp1,"%f%f\n",y_dev[i].y_b,y_dev[i].y_e);}}}]]>IV.識別過程<![CDATA[intmain(void){FILE*fp;charinfile[30];intnum;structffblkffblk;intdone;intSeqNo;read_map;fp=fopen("fextr.out","wb");fclose(fp);fp=fopen("feat.out","wb");fclose(fp);fp=fopen("feat1.out","wb");fclose(fp);fp=fopen("rsent.out","wb");fclose(fp);done=findfirst("*.tab",ffblk,0);num=1;while(!done){sprintf(infile,"%-12.12s",ffblk.ff_name);fp=fopen(infile,"rb");if(!fp){printf("Can’topeninputfile-%s-\n",infile);return;}if(infie!=′B′){letter=tolower(infile);SeqNo=(int)(infile[2]-48);}else{if(isdigit((int)infile[1])!=0){letter=tolower(infile);SeqNo=(int)(infile[2]-48);}else{letter=infile[1];SeqNo=(int)(infile[3]-48);}}num=transform(fp,letter);if((num>=0)(num<7))save_files(SeqNo,num,letter);if(num==-3)num=1;fclose(fp);done=findnext(ffblk);}return0;}/*MAINFORRECOGNITION*/voidrecogn(FILE*fp,FILE*fp2);intmain(void){FILE*fp,*fp2;inti;charfilename[30],filename1[30];map_char[i][1]=0;map_char[i]=′a′;fp2=fopen(「sort.out","wb");fp=fopen("rsent.out","rb");recogn(fp,fp2);fcose(fp);fclose(fp2);return0;}/****************************************************************************structuresinitialization(initialsetofthesymbolstoberecognized)****************************************************************************/voidread_map(void){FILE*fp;inti;fp=fopen("map_ch","rb");for(i=0;i<NUM_SYMBOLS;i++)fscanf(fp,"%d%d\n",map_char[i],map_char[i][1]);fclose(fp);}/****************************************************************************functiondefinesifthecharletterwasinmappingcardintrainingset****************************************************************************/intcheck_map(charletter){inti;for(i=0;i<NUM_SYMBOLS;i++)if((letter==(char)map_char[i])(map_char[i][1]>0))return(i);if(i==NUM_SYMBOLS){pnntf("Thereisnosuchcharacterinthemap\n");return(-1);}return(-1);}/****************************************************************************functionreadsFILE*fp(symbolstoberecognized)andusinggeneralizedinformationafterthetraining(FILE*fp1)definessimilarityfunctionsforeverysymboltoberecognizedfromthedifferentpointsofviewandwritesthisinformationtoFILE*fp2****************************************************************************/intconv(void);floatdef_k_sent(intnum_dir);floatmetric_dir_y(intnum_dir,intamp_y,structXx[],structYy[]);floatmetric_dir_x(intnum_dir,intamp_y,structXx[],structYy[]);voidlength(intnum_dir);floatcut_skel(intnum_dir,intk);voidcut_sent(intnum_dir);intcalc_per_up(chara[MAX_LENGTH_SENTENSE]);voidrecogn(FILE*fp,FILE*fp2){FILE*fp1;charfilename1[30];floatw_sent.w_y,w_x;intamp_y,w_pen_up;charch,letter;intlette_num;inti,j,k;intnum_dir;charnum_long[10];floatgen_coef,rsent_coef;intgen_max_pan_up,gen_min_pen_up;intrsent_pen_up;charour_sent1[MAX_LENGTH_SENTENSE];while(fscanf(fp,"%d",lette_num)!=EOF){fscanf(fp,*%c",ch);fscanf(fp,"%d",num_dir);if(num_dir==0)continue;fscanf(fp,"%s",our_sent);/*letterfromrecognitionset*/for(i=0;i<num_dir;i++)fscanf(fp,"%f%f",x[i]x_b,x[i].x_e);for(i=0;i<num_dir;i++)fscanf(fp,「%f%f",y[i].y_b,y[i].y_e);fscanf(fp,"%d\n",amp_y);for(i=0;i<num_dir;i++)xz[i]=x[i];for(i=0;i<num_dir;i++)yz[i]=y[i];strcpy(our_sent1,our_sent);if(conv==0){printf(「Thisligatureistoolong\n");continue;}for(i=0;i<=num_dir;i++)strcpy(bufz[i],buf[i]);rsent_pen_up=calc_pen_up(our_sent1);{k=num_dir;rsent_coef=1.0;length(num_dir);for(num_dir=k;num_dir>=1;num_dir-){strcpy(filename1,"g_cut");sprintf(num_long,"%d",num_dir);stmcat(filename1,num_long,1);strcat(filename1,".out");fp1=fopen(filename1,"rb");while(fscanf(fp1,"%c",letter)!=EOF)/*letterfromganset*/{fscanf(fp1,"%f",gen_coef);fscanf(fp1,"%d%c%d",gen.amount,gen.repr.letter,gen.reprnum);for(i=0;i<=num_dir;i++){fscanf(fp1,"%d",gen.repr.tabl[i].number);for(j=0;j<gen.repr.tabl[i].number;j++)fscanf(fp1,"%s",gan.repr.tabl[i].row[j].str);!scanf(fp1,"\n");}fscanf(fp1,*%d%d\n",gen_max_pen_up,gen_min_pen_up);fbr(i=0;i<num_dir;i++)fscanf(fp1,「%f%f」x_midll[i].x_b,x_midll[i].x_e);for(i=0;i<num_dir;i++)fscanf(fp1,"%f%f",x_dev[i].x_b,x_dev[i].x_e);for(i=0;i<num_dir.i++)fscanf(fp1,"%f%f",y_midll[i].y_b,y_midll[i].y_e);for(i=0;i<num_dir.i++)fscanf(fp1,"%f%f\n",y_dev[i].y_b,y_dev[i].y_e);w_sent=gen_coef*rsent_coef*def_k_sent(num_dir-1);w_y=gen_coef*rsent_coef*metric_dir_y(num_dir,amp_y,x,y);w_x=gen_coef*rsent_coef*metric_dir_x(num_dir,amp_y,x,y);if((rsent_pen_up>=gen_min_pen_up)(rsent_pen_up<=gen_max_pen_up))w_pen_up=1;elsew_pen_up=0;if(rsent.coef>TRESH_CUT)fprintf(fp2,"%c%d%d%c%f%f%f%d\n",ch,letter_num,num_dir,letter,w_sent,w_y,w_x,w_pen_up);}fclose(fp1);if(num_dir==1);else{rsent_coef=cut_skel(k,num_dir-1);cut_sent(k);}}fprintf(fp2,"*");}}}voidlength(intnum_dir){inti,j;floatarr_hip[6];charletter;intpr;floattemp_fl;inttemp;for(i=0;i<num_dir;i++)arr_hip[i]=fabs(y[i].y_e-y[i].y_b);for(i=0;i<num_dir;i++)arr_num_long[i]=i;pr=1;while(pr==1){pr=0;for(i=num_dir-1;i>=1;i-){if(arr_hip[i]<arr_hip[i-1]){temp_fl=arr_hip[i-1];arr_hip[i-1]=arr_hip[i];arr_hip[i]=temp_fl;temp=arr_num_long[i-1];arr_num_long[i-1]=arr_num_long[i];arr_num_long[i]=temp;pr=1;}}}coef=1.0;for(i=1;i<=num_dir;i++)coef[i]=coef[i-1]*(1.0-arr_hip[i-1]);}voidpaste(intk,charout[10],charin[10]){inti,j,m,len_out;chara[20];strcpy(a,"");len_out=strlen(out);if(out[len_out-1]==in){if(len_out>1){stmcpy(a,out,len_out-1);a[len_out-1]=′\0′;}elsestrcpy(a,**);}elsestrcpy(a,out);strcat(a,in);if(strlen(a)<10)strcpy(buf[k],a);else{printf("RSENT.OUT-ERR.paste,lengthofpastedword>10");getch;}}voidcut_sent(intnum_dir){voidcut_word_in(chargen_cut[15],chara[15);voidcut_word_out(chargen_cut[15],chara[15]);intj,k,i;chara[15];intout_number,in_number,len,pr,pr1;charout[10];charin[10];for(i=0;i<=num_dir;i++)strcpy(buf[i],**);j=0;k=0;pr=0;pr1=0;while(j<num_dir){if(mark_long[j]!=0){j++;pr1=1;continue;}elsebreak;}if(pr1==1){strcpy(a,bufz[j]]);cut_word_in(bufz[j],a);strcpy(buf[k],a);pr1=0;}elsestrcpy(buf[k],bufz[j]);if(buf=="_")buf="*";else{if(buf=="*");else{strcpy(a,"*");strcat(a,buf);}}j++;k++;while(j<num_dir){while((mark_long[j]==0)(j<num_dir)){strcpy(buf[k],bufz[j]);j++;k++;}pr=1;strcpy(a,bufz[j]);cut_word_out(bufz[j],a);strcpy(out,a);while((mark_long[j]==1)(j<num_dir))j++;if(j==num_dir)break;pr=0;strcpy(a,bufz[j]);cut_word_in(bufz[j],a);strcpy(in,a);paste(k,out,in);j++;k++;}if(pr==1)strcpy(buf[k],out);elsestrcpy(buf[k],bufz[j]);k++;len=strlen(buf[k-1]);if(buf[k-1][len-1]==「_」);else{strcpy(a,buf[k-1]);strcat(a,「_");strcpy(buf[k-1],a);strcpy(a,buf[k-1]);}}floatcut_skel(intnum_dir,intk){intj;intl;floatmin_x.min_y;for(j=0;j<6;j++)mark_long[j]=0;for(j=0;j<num_dir_k;j++)mark_long[arr_num_long[j]]=1;l=0;for(j=0;j<k;j++){if(mark_long[j]==0){x[l].x_b=xz[j].x_b;x[l].x_e=xz[j].x_e;y[l].y_b=yz[j].y_b;y[l].y_e=yz[j].y_e;l++;}}min_x=9999.0;min_y=9999.0;for(j=0;j<=l;j++){if(min_x>x[j].x_b)min_x=x[j].x_b;if(min_x>x[j].x_e)min_x=x[j].x_e;if(min_y>y[j].y_b)min_y=y[j].y_b;if(min_y>y[j].y_e)min_y=y[j].y_e;}for(j=0;j<1;j++){x[j].x_b=x[j].x_b-min_x;x[j].x_e=x[j].x_e-min_x;y[j].y_b=y[j].y_b-min_y;y[j].y_e=y[j].y_e-min_y;}return(coef[num_dir-k]);}intcmp_out(char.c){if((c==′E')‖(c==′F′)‖(c==′x』)‖(c==′g′)‖(c==′G』)‖(c==′H′)‖(c==′f)‖(c==′Y))return(1);elsereturn(0);}intcmp_in(charc){if((c==′C)‖=(c==′D′)‖(c==′Q′)‖(c==′i′)Z‖(c==′J′)‖(c==′l′)‖(c==′d′)‖(c==′Z′))return(1);elsereturn(0);}voidcut_word_out(chargen_cut[15],chara[15]){inti;intlen;len=strlen(gen_cut);i=len-1;while(cmp-out(gen_cut[i])==1){i-;if(i<0)break;}if(i<0)strcpy(a,"-");else{strncpy(a,gen_cut,i+1);a[i+1]=′\0′;}}voidcut_word_in(chargen_cut[15],chara[15]){inti;intlen;len=strlen(gen_cut);i=0;while(cmp_in(gen_cut[i])==1){i++;if(i>len-1)break;}if(i>len-1)strcpy(a,"_");else{strcpy(a,****);strncpy(a,gen_cut+i,len-i);a[len_i]=′\0′;}}intcalc_penup(chara[MAX_LENGTH_SENTENSE]){intcount;char*p;count=-0;if((strlen(a)==1)(a==「_」))return(0);p=strchr(a,"_");if(p==NULL)return(0);while(p!=NULL){p=strchr(p+1,"_");count++;}count-;return(count);}/**functionconvmakessentenceseparationintowordsusingsymbol"A"asdelimiterandwntestheresultstobu[l].**/intconv(void){char*p;intcount;count=0;p=strtok(our_sent,"A");if(p){while(p){strcpy(buf[count],p);if(strlen(buf[count])>9)return(0);count++;p=strtok(NULL,"A");}}else{printf("Thereisnolonginthesentence\n");getch0;return(0);}return(1);}floatdef_k_class(chara,charb,constcharc,constchard,constcharq,constchard_small)/*******************a-letterfromthegeneralizedsentenceb-letterfromthesymbols’sentencetoberecognizedc,d,q,d_small-symbols』fromthesameclasssegments』vocabularyfunctiondefinesifthelettersaandthebbelongstooneclassinthesegments』vocabularyornotanddefinesdef_k[i][i]forthemintheweighttabledef_k[5][5]***************************/{floatdef_k[5][5]={1.00,0.50,1.00,0.25,0.00,0.50,1.00,1.00,0.25,0.00,1.00,1.00,1.00,0.25,0.00,0.25,0.25,0.25,1.00,0.00,0.00,0.00,0.00,0.00,0.00};∥posibilitytomodifythesimilarity!!!!charalfabet[4];inti,j;alfabet=c;alfabet[1]=d;alfabet[2]=q;alfabet[3]=d_small;i=0;while(a!=alfabet[i]){i++;if(i==4)break;}j=0;while(b!=alfabet[j]){j++;if(j==4)break;}return(def_k[i][j]);}/**functiondet_k_iettercalculatessimiliritybetweenlettersinthewordsaccordingtoweightstable.**/floatdef_k_letter(chara[],charb[],inti,intj)*******************a-wordfromthegeneralizedsentenceb-wordfromsymbolssentencetoberecognizedi-numberofletterinthewordaj-numberofletterinthewordb*******************/{floattemp;if(a[j]==b[j])return(1.00);if((temp=def_k_class(a[i],b[j],′C′,′D′,′Q′,′d′))!=0)return(temp);if((temp=def_k_class(a[i],b[j],′E′,′F′,′X′,′f』))!=0)return(temp);if((temp=def_k_class(a[i],b[j],′G′,′H′,′Y′,′g』))!=0)return(temp);if((temp=def_k_class(a[i],b[j],′I′,′J′,′Z′,′i′))!=0)return(temp);if((a[i]==b[j])(a[i]==′B′))return(1.00);return(0.0);}intcmpr_in(charc){if((c==′E′)‖(c==′F′)‖(c==′X』)‖(c==′g′)‖(c==′G′)‖(c==′H′)‖(c==′f′)‖(c==′Y′))return(1);elsereturn(0);}intcmpr_out(charc){if((c==′C′)‖(c==′D′)‖(c==′Q′)‖(c==′i′)‖(c==′J′)‖(c==′I′)‖(c==′d′)‖(c==′Z′))return(1);elsereturn(0);}/**functiondef_k_wordcalculatesandreturnssymilirityfunction(SF)fortheeverywordintherow.SFisdefinedfrom0to1.IfwordintherecognizedsymbolisequaltothewordintherowthenSFisequalto1;ifwordsarenotequal,thenpartsofwordsarecompared.Therearethreepartsinthewords.Part1-downinputsegments,part2-downoutputsegments,part3segmentsbetweenpart1andpart2.**/floatdef_k_word(chara[],charb[],introw)/*****************************words’similaritycomparisonfunctiona-wordfromthegeneralizedsentenceb-wordfromthesymbolssentencetoberecognized*************************/{floatw=0.0;inti,j,n,m,temp.i_end_1,i_end_2,j_end-1,j_end_2;intpr_a_1=0,pr_a_2=0,pr_b_1=0,pr_b_2=0;floatw1=0.0,w2=0.0,w3=0.0,w4=0.0;if(strcmp(a,b)==0)return(1.0);n=strlen(a);m=strlen(b);if((n==0)(m!=0))return(00);if((n!=0)(m==0))return(0.0);if((n==0)(m==0))return(1.0);if(n>=m)temp=n;elsetemp=m;if(row==0){for(i=n-1,j=m-1;(i>0)‖(j>0);i-,j-)w=w+def_k_lerter(a,b,i,i);if(temp>1)w=w/(float)(temp-1);elsew=1.0;return(w);}evelse{if(row==2){for(i=0;(i<n-1)‖(i<m-1);i++)w=w+def_k_letter(a,b,i,i);if(temp>1)w=w/(float)(temp-1);elsew=1.0;return(w);}else{i=0;while(cmpr_out(a[i])==1){i++;pr_a_1=1;if(i>n)break;}i_end_1=i-1;i=n-1;while(cmpr_in(a[i])==1){i-;pr_a_2=1;if(i<0)break;}i_end_2=i+1;i=0;while(cmpr_out(b[i])==1){i+;pr_b_1=1;if(i>m)break;}j_endd_1=i-1;i=m-1;while(cmpr_in(b[i])==1){i-;pr_b_2=1;if(i<0)break;}j_end_2=i+1;if((i_end_1>=i_end_2)‖(j_end_1>=j_end_2)){puts("it"snotrightdividinginsidethewords\n")printf("a[]=%sb[]=%s\n",a,b);printf("i_end_1=%di_end_2=%dj_end_1=%dj_end_2=%d\n",i_end-1,i_end_2,j_end-1,j_end_2);printf("pr_a-1=%dpr_a_2=%dpr_b_1=%dpr_b_2=%d\n",pr_a_1,pr_a_2,pr_b_1,pr_b_2);getch;getch;}if((pr_a_1==1)(pr_b_1==1))for(i=0,j=0;(i<=i_end_1)‖(j<=j_end_1);i++,j++)w1=w1+def_k_letter(a,b,i,j);if((pr_a_2==1)(pr_b_2==1))for(i=n-1,j=m-1;(i>=i_end_2)‖(j>=j_end_2);i-,j-)w2=w2+def_k_letter(a,b,i,j);if((j_end_21=i_end_1+1)(j_end_21-j_end_1-1)){for(i=i_end_1+1,j=j_end-1+1;(i<i_end_2)‖(j<j_end_2);i++,j++)w3=w3+def_k_letter(a,b,i,j);for(i=i_end_2-1,j=j_end_2-1;(i>i_end_1)‖(j>j_end_1);i-,j-)w4=w4+def_k_letter(a,b,i,j);if(w3<w4)w3=w4;}if(temp>0)w=(w1+w2+w3)/(float)(temp);else{printf(***def_k_word**-amountoflettersintherowequal0\n");getch;}}}return(W);}/**functiondef_k_rowcalculatesandreturnssymilirityfunctionforeveryrowinsymbolsgeneralizedrepresentationasmaximumvalueinrow.SFisdefinedfrom0to1.**/floatdef_k_row(intnum_dir,intcount,introw){floattemp;floatw=0.0;intj;if(gen.repr.tabl[count].number<1)if(buf[count]==NULL)return(1.0);elsereturn(0.0);for(j=0;j<gen.repr.tabl[count].number;j++)if((temp=def_k_word(gen.repr.tabl[count].row[j].str,buf[count],row))>0.9999999){w=temp;break;}elseif(temp>w)w=temp;return(w);}floatdef_k_sent(intnum_dir){floatw=0.0;intcount;w=w+def_k_row(num_dir,0,0);if(num_dir>0){for(count=1;count<num_dir+1;count++){w=w+def_k_row(num_dir,count,1);}}w=w+def_k_row(num_dir,num_dir+1,2);return(w/(float)(num_dir+2));}/******************************************************************************similarityfunctiondefiningsimilaritybetweendefinedparamandsampleofparameterswithknownmedial,leftandrightdeviation,andrangeofdefinition(const_l,const_r)******************************************************************************/floatmut_metric(floatparam,floatmedial,floatconst_1,floatconst_r,floatdev_l,floatdev_r){floatleft,right,m,div;left=mediai-dev_l;if(left<const_l)left=const_1;right=medial+dev_r;if(right>const_r)right=const_r;if((param>=left)(param<=right))return(1.0);else{div=const_r-const_1-right+letf+0.0001;if(div==0.0){if(medial==0){printf("ERRORinmut_metric\n");getch;}div=medial;}if(param<left)m=1.0-(left-param)/div;if(param>right)m=1.0-(param-right)/div;}if(m<0.0)m=0.0;return(m);}/******************************************************************************functionsmetric_dir_yandmetric_dir_xcalculatesimilaritymetricsonthebaseofdistancebetweenrecognizedletterskeletonandsymbol’sgeneralizedskeletoncalculatedduringateaching.******************************************************************************/floatmetric_dir_y(intnum_dir,intamp_y,structXx[],structYy[]){intcount;floatm_1,m_2,metric;metric=1.0;for(count=0;count<nun_dir;count++){m_1=mut_metric(y[count].y_b,y_midll[count].y_b,0.0,1.0,y_dev[count].y_b,y_dev[count].y_b);m_2=mut_metric(y[count].y_e,y_midll[count].y_e,0.0,1.0,y_dev[count].y_e,y_dev[count].y_e);metric=metric*m_1*m_2;}return(metnc);}floatmetric_dir_x(intnum_dir.intamp_y,structXx[],structYy[]){intcount;floatm_1,m_2.metric;metric=1.0for(count=0;count<numdir;count++){m_1=mut_metric(x[count].x_b,x_midll[count].x_b,0.0,1.0,x_dev[count].x_b,x_dev[count].x_b);m_2=mut_metric(x[count].x_e,x_midll[count].x_e,0.0,1.0,x_dev[count].x_e,x_dev[count].x_e);metric=metric*m_1*m_2;}return(metric);}/******************************************************************************Thefilesort.outissortingstepbystepusingappropriatesimilarityfunctions(definedwithparametersa,b,candtresholdsw_level,y_level,x_level)andtheirorder,theresultiswrittenthefileerr.******************************************************************************/intmain(void){charsort(intj,chara,charb,charc,floatw_level,floaty_level,floatx_level,charch,intnum_dir);intcheck_map(charletter);voidread_map(void);voidr_matr(void);inti,j;floatw_level,y_level,x_level;chara,b,c;charch,temp_ch,letter;intletter_num,num_dir;floatttt;inttt;a=′w′;b=′y′;c=′′;w_level=0.6;y_level=0.6;x_level=0.6;fout5=fopen("err","w+");fprintf(fout5,"%c%c%cMw=%.4fMy=%.4fMx=%.4f\n",a,b,c,wlevel,y_level,x_level);fp=fopen("sort.out","rb");while(fscanf(fp,"%c",ch)!=EOF){i=0;fscanf(fp,"%d%d",letter_num,num_dir);fpnntf(fout5,"%d%cnum_long=%d",letter_num,ch,num_dir);fscanf(fp,"%c",arr_srt[i].letter);fscanf(fp,"%f",ttt);arr_sry[i].w=ttt;fscanf(fp,"%f",ttt);arr_srt[i].y=ttt;fscanf(fp,"%f",ttt);arr_srt[i].x=ttt;fscanf(fp"%d\n",tt);arr_srt[i].pen_up=tt;temp_ch=ch;fscanf(fp,"%c",ch);while(ch!="*"){i++;fscanf(fp,"%d%d",letter_num,num_dir);fscanf(fp,"%c%f%f%f%d\n",arr_srt[i].letter,arr_srt[i].w,arr_srt[i].y,arr_srt[i].x,arr_srt[i].pen_up);fscanf(fp,"%c",ch);}letter=sort(i,a,b,c,w_level,y_level,x_level,temp_ch,num_dir);}fclose(fp);fclose(fout5);return0;}intsort_a(intj,chara,floatw_level,floaty_level,floatx_level){intsort_w(intj,floatlevel);intsort_y(intj,floatlevel);intsort_x(intj,floatlevel);if(a==′w′)return(sort_w(j,w_level));if(a==′y′)return(sort_y(j,y_level));if(a==′x′)return(sort_x(j,x_level));return(j);}intsort_b(intj,charb,floatw_level,floaty_level,floatx_level){intsort_w(intj,floatlevel);intsort_y(intj,floatlevel);intsort_x(intj,floatlevel);if(b==′w′)return(sort_w(j,w_level));if(b==′y′)return(sort_y(j,y_level));if(b==′x′)return(sort_x(j,x_level));return(j);}intsort_c(intj,charc,floatw_level,floaty_level,floatx_level){intsort_w(intj,floatlevel);intsort_y(intj,floatlevel);intsort_x(intj,floatlevel);if(c==′w′)return(sort_w(j,w_level));if(c==′y′)return(sort_y(j,y_level));if(c==′x′)return(sort_x(j,x_level));return(j);}charsort(intj.chara,charb,charc,floatw_leval,floaty_level,floatx_level,charch,intnum_dir){inti,k,l;i=sort_a(j,a,w_level,y_level.x_level);if(i==0){∥if(ch!=arr_srt.letter)fprintf(fout5."%d\n%cMw=%.4fMy=%.4fMx=%4fMup=%d\n",1,arr_srt.letter,arr_srt.w,arr_srt.y,arr_srt.x,arr_srt.pen_up);return(arr_srt.letter);}k=sort_b(i,b,w_level,y_level,x_level);if(k==0){∥if(ch!=arr_srt.letter)fprintf(fout5,"%d\n%cMw=%.4fMy=%.4fMx=%.4fMup=%d\n"1,arr_srt.letter,arr_srt.w,arr_srt.y,arr_srt.x,arr_srt.pen_up);return(arr_srt.letter);}l=sort_c(k,c,w_level,y_level,x_level);if(l<0){printf("l<0\n");getch;}if(l==0){∥if(ch!=arr_srt.letter)fprintf(fout5,"%d\n%cMw=%.4fMy=%.4fMx=%.4fMup=%d\n",1,arr_srt.letter,arr_srt.w,arr_srt.y,arr_srt.x,arr_srt.pen_up);return(arr_srt.letter);}else{∥fprintf(fout4,"%dlong%c{」,num_dir,ch);fprintf(fout5,"%d\n",1+1);for(i=0;i<=l;i++){∥fprintf(fout4,"%c",arr_srt[i].letter);fprintf(fout5,"%cMw=%.4fMy=%.4fMx=%.4fMup=%d\n",arr_srt[i].letter,arr_srt[i].w,arr_srt[i].y,arr_srt[i].x,arr_srt[i].pen_up);}}return(arr_srt.letter);}intsort_w(intj,floatlevel){inti;charch;floattemp-1,temp-2,temp_w,temp_y,temp_x,temp_penup;intpr=1;if(j==0)return(0);while(pr==1){pr=0;for(i=j;l>0;l-){temp_1=arr_srt[i].w;temp_2=arr_srt[i-1].w;if(temp_1>temp_2){ch=arr_srt[i-1].letter;temp_w=arr_srt[i-1].w;temp_y=arr_srt[i-1].y;temp_x=arr_srt[i-1].x;temp_pen_up=arr_srt[i-1].pen_up;arr_srt[i-1].letter=arr_srt[i].letter;arr_srt[i-1].w=arr_srt[i].w;arr_srt[i-1].y=arr_srt[i].y;arr_srt[i-1].x=arr_srt[i].x;arr_srt[i-1].pen_up=arr_srt[i].pen_up;arr_srt[i-1].m=temp_1;arr_srt[i].letter=ch;arr_srt[i].w=temp_w;arr_srt[i].y=temp_y;arr_srt[i].x=tempx;arr_srt[i].pen_up=temp_pen_up;arr_srt[i].m=temp_2;pr=1;}else{arr_srt[i-1].m=temp_2;arr_srt[i].m=temp_1;}}}level=arr_srt.w-level;if(level<=0.0)level=0.0;i=0;while((i<=j)(arr_srt[i].w>=level))i++;if(i==0)return(0);elsereturn(i-1);}intsort_y(intj,floatlevel){inti;charch;floattenmp_1,temp_2,temp_w,temp_y,temp_x,temp_pen_up;intpr=1;if(j==0)return(0);while(pr==1){pr=0;for(i=j;i>0;i-){temp_1=arr_srt[i].y;temp_2=arr_srt[i-1].y;if(tem_1>temp_2){ch=arr_srt[i-1].letter;temp_w=arr_srt[i-1].w;temp_y=arr_srt[i-1].y;temp_x=arr_srt[i-1].x;temp_pen_up=arr_srt[i-1].pen_up;arr_srt[i-1].letter=arr_srt[i].letter;arr_srt[i-1].w=arr_srt[i].w;arr_srt[i-1].y=arr_srt[i].y;arr_srt[i-1].x=arr_srt[i].x;arr_srt[i-1].pen_up=arr_sry[i].pen_up;arr_srt[i-1].m=temp-1;arr_srt[i].letter=ch;arr_srt[i].w=temp_w;arr_srt[i].y=temp_y;arr_srt[i].x=temp_x;arr_srt[i].pen_up=temp_pen_up;arr_srt[i].m=temp_2;pr=1;}else[arr_srt[i-1].m=temp_2;arr_srt[i].m=temp_1;}}}level=arr_srt.y-level;if(level<=0.0)level=0.0;i=0;while((i<=1)(arr_srt[i].y>=level))i++;if(i==0)return(0);elsereturn(i-1);}intsort_x(intj,floatlevel){inti;charch;floattemp_1,temp_2,temp_w,temp_y,temp_x,temp_pen_up;intpr=1;if(j==0)return(0);while(pr==1){pr=0;for(i=j;i>0;i-){temp_1=arr_srt[i].x;temp_2=arr_srt[i-1].x;if(temp_1>temp_2){ch=arr_srt[i-1].etter;temp_w=arr_srt[i-1].w;temp_y=arr_srt[i-1].y;temp_x=arr_srt[i-1].x;temp_pen_up=arr_srt[i-1].pen_up;arr_srt[i-1].letter=arr_srt[i].letter;arr_srt[i-1].w=arr_srt[i].w;arr_srt[i-1].y=arr_srt[i].y;arr_srt[i-1].x=arr_srt[i].x;arr_srt[i-1].pen_up=arr_srt[i].pen_up;arr_srt[i-1].m=temp_1;arr_srt[i].letter=ch;arr_srt[i].w=temp_w;arr_srt[i].y=temp_y;arr_srt[i].x=temp_x;arr_srt[i].per_up=temp_pen_up;arr_srt[i].m=temp-2;pr=1;}else{arr_srt[i-1].m=temp_2;arr_srt[i].m=temp_1;}}}level=arr_srt.x-evel;if(level<=0.0)level=0.0;i=0;while((i<=j)(arr_sry[i].x>=level))i++;if(i==0)return(0);elsereturn(i-1);}intcheck_map(charletter){inti;for(i=0;i<NUM_SYMBOLS;i++)if(letter==(char)map_char[i])return(i);if(i==NUM_SYMBOLS){printf("Thereisnosuchcharacterinthemap%c\n",letter);return(-1);}return(-1);}voidread_map(void){FILE*fp;inti;fp=fopen("map_ch","rb");for(i=0;i<NUM_SYMBOLS;i++)fscanf(fp,"%d%d\n",map_char[i],map_char[i][1]);fclose(fp);}voidr_matr(void){FILE*fout1;inti,j;fout1=fopen("matrix.out","w");for(i=0;i<69;i++)fprintf(fout1,"%c",map_char[i]);fprintf(fout1,"\n");for(i=0;i<69;i++){for(j=0;j<69;j++)fprintf(fout1,"%2d",matr[i][j]);fprintf(fout1,"\n");}fclose(fout1);}/******************************************************************************Thefile"err"issortingusingappropriatesimilantyfunctiondefinedwithtresholdlevelandit’sorder.******************************************************************************/intmain(void){intcheck_map(charletter);voidread_map(void);voidadd_metric(charch,intletter_num,intloop);intsort_add(intj,floatlevel);voidread_map(void);voidr_matr(void);charmtr_cl(inti,charch);intspell_ch(char[10][20],char[100][20]);intletter_num,num_dir,loop;charch;inti,k,j,num_inside,pr;floatlevel;charreply[100][20];intrepl;read_map;max_min;level=0.4;fp=fopen("err","r");fp1=fopen("add_err","w+");num_inside=0;pr=0;fseek(fp,37,0);while(fscanf(fp,"%d",letter_num)!=EOF){fscanf(fp,"%c",ch);fseek(fp,10,1);fscanf(fp,"%d%d\n",num_dir,loop);for(i=0;i<loop;i++){fscanf(fp,"%c",arr_srt[i].letter);fseek(fp,6,1);fscanf(fp,"%f",arr_srt[i].w);fseek(fp,6,1);fscanf(fp,"%f",arr_srt[i].y);fseek(fp,6,1);fscanf(fp,"%f",arr_srt[i]x);fseek(fp,6,1);fscanf(fp,"%d\n",arr_srt[i].pen_up);pr=1;}add_metric(ch,letter_num,loop);k=sort_add(loop,level);if(k>=10)k=8;fprintf(fp1,"%c%dlong=%d%d\n",ch,letter_num,num_dir,/*loop"/k+1);if(k==0){∥if(ch!=arr_srt.letter)fprinft(fp1,"%c"w=%,4fy=%,4fx=%.4fx_vec=%.4fy_vec=%.4famp=%4fup=%dm=%.4f\n",arr_srt.letter,arr_srt.w,arr_srt.y,arr_srt.x,arr_srt.x_vec,arr_srt.y_vec,arr_srt.amp,arr_srt.pen_up,arr_srt.m);}else{∥fprintf(fout4,"%dlong%c{",num_dir.ch);for(i=0;i<=k;i++){∥fprintf(fout4,"%c".arr_srt[i].letter);fprintf(fp1,"%cw=%.4fy=%.4fx=%.4fx_vec=%.4fy_vec=%.4famp=%.4fup=%dm=%.4f\n".arr_srt[i].letter,arr_srt[i].w,arr_sft[i].y,arr_srt[i].x,arr_srt[i].x_vec,arr_srt[i].y_vec,arr_srt[i].amp,arr_srt[i].pen_up,arr_srt[i].m);}}if((i=check_map(ch))<0){printf("ERROR1");continue;}if((j=check_map(arr_srt.letter))<0){printf("ERROR2");continue;}matr[i][j]++;num_inside++;}fclose(fp);if(pr==0){fsh=fopen("sh_sp.out","w");fprintf(fsh,"-0");fclose(fsh);return0;}fclose(fp1);r_matt;return0;}intcheck_map(chaletter){inti;for(i=0;i<NUMSYMBOLS;i++)if(letter==(char)map_char[i])return(i);if(i==NUM_SYMBOLS){printf("Thereisnosuchcharacterinthemap%c\n",letter);return(-1);}return(-1);}voidread_map(void){FILE*fp;inti;fp=fopen("map_ch","rb");for(i=0;i<NUM_SYMBOLS;i++)fscanf(fp,"%d%d\n",map_char[i],map_char[i][1]);fclose(fp);}voidr_matr(void){FILE*fout1inti,j;fout1=fopen("matrix.out","w");for(i=0;i<69i++)fprintf(fout1."%c",map_char[i]);fprintf(fout1."\n");for(i=0;i<69i++){for(j=0;j<69j++)fprintf(fout1,*%2d",mat[i][j]);fprintf(fout1."\n");}fclose(fout1);}/*********************************************************************functionadd_metricfortheeveryletter(accordingtoit’snumberandname)searchesit’sparametersinthefilesfeat.outandfeat1.outandcalculatesconespondingmetrics.**********************************************************************/voidadd_metric(charch,intletter_num,intloop){voidadd_metr_feat(intloop);voidadd_metr_feat1(intloop);FILE*fp;chartemp_letter;inttemp_letter_num;fp=fopen("feat.out","rb");while(fscanf(fp,"%c",temp_letter)!=EOF){fscanf(fp,"%d%f%f%f%r\n",temp_letter_num,y_vec_beg,y_vec_end,x_vec_beg,x_vec_end);if((temp_letter==ch)(temp_letter_num==letter_num)){fclose(fp);add_metr_feat(loop);break;}}fp=fopen("feat1.out","rb*);while(fscanf(fp,"%c",temp_letter)!=EOF){fscanf(fp,"%d%dl\n",temp_letter_num,amp_y);if((temp_letter==ch)(temp_letter_num==letter_num)){fclose(fp);add_metr_feat1(loop);break}}}/*********************************************************************functionsadd_metr_featcalculatessimilarityfunctionononthebaseofdistancebetweenrecognizedsymbol’svector(connectingstartpointwiththeendpointofthesymbol)andgeneralizedsymbol’svectordefinedduringtheteaching.*********************************************************************/voidadd_metr_feat(intloop){inti,j;FlLE*fp;floatm_1,m-2.m-3.m_4;chartemp_letter;for(i=0;i<loop;i++){fp=fopen("genfeat.out","rb");while(fscanf(fp,"%c",temp_letter)!=EOF){fscanf(fp,"%f%f%f%f\n",x_midll.x_b,x_midll.x_e,y_midll.y_b,y_midll.y_e);for(j=0;j<3j++){fscanf(fp."%f%f%f%f\n",x_dev[j].x_b,x_dev[j].x_e,y_dev[j].y_b,y_dev[j].y_e);}if(arr_srt[i].letter==temp_letter){fclose(fp);m_1=mut_metric(x_vec_beg,x_midll.x_b,0.0,1.0,x_dev[2].x_b,x_dev[2].x_b);m_2=mut_metric(x_vec_end,x_midll.x_e,0.0,1.0,x_dev[2].x_e,x_dev[2].x_e);arr_srt[i].x_vec=m_1*m_2;m_3=mut_metric(y_vec_beg,y_midll.y_b,0.0,1.0,y_dev[2].y_b,y_dev[2].y_b);m_4=mut_metric(y_vec_end,y_midll.y_e,0.0,1.0,y_dev[2].y_e,y_dev[2].y_e);arr_srt[i].y_vec=m_3*m_4;break;}}}}/*********************************************************************functionsadd_metr_feat1Ocalculatessimilarityfunctiononthebaseofdistancebetweenrecognizedsymbol’samplitudeandsymbol’sgeneralizedampliudecalculatedduringtheteaching.*********************************************************************/voidadd_metr_feat1(intloop){inti,j;FILE*fp;floatm_1;chartemp_letter;inty_max,y_min;for(i=0;i<loop;i++){fp=fopen("genfet1.out","rb");while(fscanf(fp,"%c",temp_letter)!=EOF){fscanf(fp,"%f%d%d\n",y_midll.y_b,y_max,y_min);for(j=0;j<3;j++)fscanf(fp,"%f",y_dev[j].y_b);fscanf(fp,"\n");if(arr_srt[i].letter==temp_letter){fclose(fp);∥y_min=2*y_min;∥lt’sbettertofindminandmaxforallthesymbols∥y_max=2*y_max;m-1=mut_metric((float)amp_y,y_midll.y_b,(float)mut_min,(float)mut_max,y_dev[2].y_b,y_dev[2].y_b);arr_srt[i].amp=m_1break}}}}voidmax_min(void){FILE*fp;chartemp_letter;inty_max;inty_min;intj;mut_max=0;mut_mm=9999;fp=fopen("genfet1.out","rb");while(fscanf(fp,"%c",temp_letter)!=EOF){fscanf(fp,"%f%d%d\n",y_midll.y_b,y_max,y_min);for(j=0;j<3;j++)fscanf(fp,"%f",y_dev[j].y_b);fscanf(fp,"\n");if(mut_max<y_max)mut_max=y_max;if(mut_min>y_min)mut_min=y_min;}fclose(fp);}/*********************************************************************similarityfunctiondefinessimilaritybetweenparameterandsampleofparameterswithknownmedial.leftandrightdeviation,andrangeofdefinition(const_l,const_r)*********************************************************************/floatmut_metric(floatparam,floatmedial,floatconst*l,float_l,const_r,floatdev_l,floatdev_r{floatleft,right,m,div;left=medial-dev_l;if(left<const_l)left=const_l;right=medial+dev_r;if(right>const_r)right=const_r;if((param>=left)(param<=right))return(1.0);else{div=const_r-const_l-right+left+0.0001;if(div==0.0)div=medial;if(param<left)m=1.0-(left-param)/div;if(param>right)m=1.0-(param-dght)/div;}if(m<0.0)m=00;return(m);}/*********************************************************************averagesimilarityfunctiondefinition,finalsortingusingtreshold*********************************************************************/externstructSRT1arr_srt[600];intsort_add(intj.fioatlevel){inti;charch;floattemp_1,temp_2,temp_w,temp_y,temp_x,temp_x_vec,temp_y_vec,temp_amp;inttemp_up;intpr=1;for(i=0,i<j;i++)arr_srt[i].m=(arr_srt[i].w+arr_srt[i].y+arr_srt[i].x_vec+arr_srt[i].y_vec+arr_srt[i].amp+(float)arr_srt[i].pen_up)/6.0;if(j-1==0)return(0);while(pr==1){pr=0;for(i=j-1;i>0;i-){temp_1=arr_srt[i].m;temp_2=arr_srt[i-1].m;if(temp_1>temp_2){ch=arr_srt[i-1].letter;temp_w=arr_srt[i-1].w;temp_y=arr_srt[i-1].y;temp_x=arr_srt[i-1].x;temp_up=arr_srt[i-1].pen_up;temp_x_vec=arr_srt[i-1].x_vec;temp_y_vec=arr_srt[i-1].y_vec;temp_amp=arr_srt[i-1].amp;arr_srt[i-1].letter=arr_srt[i].letter;arr_srt[i-1].w=arr_srt[i].w;arr_srt[i-1].y=arr_srt[i].y;arr_srt[i-1].x=arr_srt[i].x;arr_srt[i-1].pen_up=arr_srt[i].pen_up;arr_srt[i-1].x_vec=arr_srt[i].x_vec;arr_srt[i-1].y_vec=arr_srt[i].y_vec;arr_srt[i-1].amp=arr_srt[i].amp;arr_srt[i-1].m=temp_1;arr_srt[i].letter=ch;arr_srt[i].w=temp_w;arr_srt[i].y=temp_y;arr_srt[i].x=temp_x;arr_srt[i].pen_up=temp_up;arr_srt[i].x_vec=temp_x_vec;arr_srt[i].y_vec=temp_y_vec;arr_srt[i].amp=temp_amp;arr_srt[i].m=temp_2;pr=1;}else{arr_srt[i-1].m=temp_2;arr_srt[i].m=temp_1;}}}level=arr_srt.m-level;if(level<=0.0)level=0.0;i=0;while((i<j)(arr_srt[i].m>=level))i++;if(i==0)return(0);elsereturn(i-1);}charmtr_cl(inti,charch){intj;for(j=0;j<=i;j++)if(ch==arr_srt[j].letter)return(arr_srt[j].letter);return(arr_srt.letter);}]]>加速度識別i.訓練過程<![CDATA[/************************************Todefinetheworkscondition.************************************/voidmain(void){FILE*fp;charfilename[30];intindex;charnum[4];charch;intk;printf("DoyouwanttodoPRESS(y/n)");ch=getche;fp=fopen("fpr,"w");if(toupper((int)ch)=="Y′)fprintf(fp,"%d",1);elsefprintf(fp,"%d",0);fclose(fp);printf("\nDoyouwanttodoSMOOTH(y/n)");ch=getche;fp=fopen("fsm","w");if(toupper((int)ch)==′Y)fprintf(fp,"%d",1);elsefprintf(fp,"%d",0);fclose(fp);printf("\nEnteramoutoflevel");scanf("%d",k);fp=fopen("flv","w");fprintf(fp,"%d",k);fclose(fp);}/*教導用主程序*/voidmain(void){FILE*fp;FILE*fp1;charinfile[30];charfilename1[30];intnumber;intindex;intnum;intnum_mut;charnum_ch[4];intsp_amount;intzon_x[10];intzon_y[10];floatarr_x[NUMBER_OF_STROKES];floatarr_y[NUMBER_OF_STROKES];floatarr_z[NUMBER_OF_STROKES];floatarr_p[NUMBER_OF_STROKES];intx,y,z,p,pen_old,i;intarr_beg_end[2];fp1=fopen("abc","r");while(fscanf(fp1,"%d",number)!=EOF){fscanf(fp1,"%s\n",infile);if((fp=fopen(infile,"r"))==NULL)continue;printf("-%s-\n",infile);sp_amount=0;num=0;num_mut=0;pen_old=1;while(fscanf(fp,"%d",x)!=EOF){fscanf(fp,%d%d%d\n",y,z,p);if(pen_old==p){arr_x[num]=(float)x;arr_y[num]=(float)y;arr_z[num]=(float)z;nun++;∥amountinthespaceif(num>NUMBER_OF_STROKES){printf("Amountofpenstrokesinthespaceisbiggerthen%d\n",NUMBER_OF_STROKES);getch;exit(0);}num_mut++;∥amountinthefile}else{prep(num,num_mut,sp_amount,arr_x,arr_y,arr_z);sp_amount++;∥amountofspacepen_old=p;arr_x=(float)x;arr_y=(float)y;arr_z=(float)z;num=1;num_mut++;}fscanf(fp,"%d%d%d%d",x,y,z,p);fscanf(fp,"%d%d%d%d",x,y,z,p);fscanf(fp,"%d%d%d%d",x,y,z,p);}fclose(fp);prep(num,num_mut,sp_amount,arr_x,arr_y,arr_z);strcpy(filename1,"t");sprintf(num_ch,"%d",sp_amount);strcat(filename1.num_ch);strcat(filename1,"out");fp=fopen(filename1,"a+");fprintf(fp,"%d%d%d\n",number,sp_amount,num_mut);for(i=0;i<=sp_amount;i++){nul_zone(i,arr_beg_end);save(i,num_mut,arr_beg_end,fp);}fclose(fp);}fclose(fp1);}/************************************Getwork’sconditions.************************************/voidprep(intnum,intnum_mut,intsp_amount,floatarr_x[],floatarr_y[],floatarr_z[]){FILE*fp;intpr,sm,amount_lev;if((fp=fopen("fpr","r"))==NULL){printf("Impossibletoopenthefile′fpr"\n");getch;exit(0);}fscanf(fp,"%d",pr);fclose(fp);if(pr){press(num,arr_x);press(num,arr_y);press(num,arr_z);num=PRESS_NUMBER_POINT;}if((fp=fopen("fsm","r"))==NULL){printf("Impossibletoopenthefile′fsm"\n");getch;exit(0);}fscanf(fp,"%d",sm);fclose(fp);if(sm){smooth(num,arr_x);smooth(num,arr_y);smooth(num,arr_z);}level(num,num_mut,sp_amount,arr_x,arr_y,arr_z);}/************************************Saveonespaceinformationtooutputfile.************************************/voidsave(intspace,intnum_mut.intarr_beg_end[],FILE*fp){inti,j;fprintf(fp,"%d\n",space);fprintf(fp,"%d%f%f\n",g[space].num,g[space].beg/(float)num_mut,g[space]end/(float)num_mut);for(j=0;j<g[space].num;j++)fprintf(fp,"%d%d%d\n",g[space].f[j].x,g[space].f[j].y,g[space].f[j].z);fprintf(fp"%f%f\n",(float)arr_beg_end/(float)g[space].num,(float)arr_beg_end[1]/(float)g[space].num);}/************************************Calculatecoordinatesaccordinglytoamountoflevels.************************************/voidlevel(intnum,intnum_mut.intspace,floatarr_x[],floatarr_y[],floatarr_z[]){inti,j;FILE*fp;floatmin_x=9999.0;floatmax_x=0.0;floatmin_y=9999.0;floatmax_y=0.0;floatmin_z=9999.0;floatmax_z=0.0;intsum;intpr;inttemp;floatkx,ky,kz;intlev;/************************************k-amountoflevel************************************/if((fp=fopen("flv","r"))==NULL){printf("lmpossibletoopenthefile′flv′\n");getch;exit(0);}fscanf(fp,"%d",lev);fclose(fp);for(i=0;i<num;i++){if(arr_x[i]<min_x)min_x=arr_x[i];if(arr_x[i]>max_x)max_x=arr_x[i];if(arr_y[i]<min_y)min_y=arr_y[i];if(arr_y[i]>max_y)max_y=arr_y[i];if(arr_z[i]<min_z)min_z=arr_z[i];if(arr_z[i]>max_z)max_z=arr_z[i];}kox=(max_x-min_x)/(float)lev;ky=(max_y-min_y)/(float)lev;kz=(max_z-min_z)/(float)lev;if((kx<=1.00)‖(ky<=1.00)‖(kz<=1.00)){printf("-Decreasethenumberoflevels!!!-\n");getch;}for(i=0;i<num;i++){g[space].f[i].x=(int)(((float)(arr_x[i]-min_x)-0001)/kx);g[space].f[i].y=(int)(((float)(arr_y[i]-min_y)-0.001)/ky);g[space].f[i].z=(int)(((float)(arr_z[i]-min_z)-0.001)/kz);}g[space]num=num;g[space].beg=(float)(num_mut-num+1);g[space].end=(float)(num_mut);}/************************************Calculatethecoordinatesofnullzone************************************/voidnul_zone(intspace,intarr_beg_end[]){intbeg,end.dif;intbeg_max.end_maxintpr=0;intj;dif=0;beg=0;end=0;for(j=0;j<g[space].num;j++){if(g[space].f[j].z==0){if(pr==0){beg=j;end=j;pr=1;if(j==(g[space].num-1)){if(dif<1){beg_max=beg;end_max=end;}}}else{if(j==(g[space].num-1)){end=j;if(dif<(end-beg+1)){beg_max=beg;end_max=end;}}}}else{if(pr==1){end=j;pr=0;if(dif<(end-beg)){dif=end-beg;beg_max=beg;end_max=end-1;}}}}arr_beg_end=beg_max+1;arr_beg_end[1]=ena_max+1;}/************************************Dosmoothing************************************/floatsmooth1(intnum,floatz[]){intind;floattemp;floatnorma;for(ind=1,norma=0;ind<num-1;ind++){temp=(z[ind-1]+z[ind]+z[ind+1])/3;norma+=abbs(z[ind]-temp);z[ind]=temp;}returnnorma}voidsmooth(intmax_point,floatarr[]){floatendsmooth;wnile((end_smooth=smooth1(max_point,arr))>PRESS_NUMBER_POINT/10);}/************************************Changefilecoordinatesaccordinglynewlength.************************************/voidnormal(intnum_old,floatarr_old[],intnum_new,floatarr_new[]){doublekoeff;intind_old,ind_new;koeff=(double)(num_old-1)/(float)(num_new-1);arr_new=arr_old;for(ind_new=1;ind_new<num_new-1;ind_new++){ind_old=(int)(floor(koeff*ind_new));arr_new[ind_new]=(ind_old+1-koeff*ind_new)*arr_old[ind_old]+(koeff*ind_new-ind_old)*arr_old[ind_old+1];}arr_new[ind_new]=arr_old[num_old-1];}voidpress(intnum,floatarr[]){floatnew_arr[100];inti;normnal(num,arr,PRESS_NUMBER_POINT,new_arr);for(i=0;i<PRESS_NUMBER_P0lNT;i++)arr[i]=new_arr[i];}]]>II一般化過程<![CDATA[/*一般化過程主程序*/voidmain(void){voidgener(inti,charfilename[],charfilename1[]);FILE*fp,*fp1;inti;charnum[4];charfilename[30],filename1[30];for(i=0;i<NUMBER_SPACE;i++){strcpy(filename,"t");sprintf(num,"%d",i);strcat(filename,num);strcat(filename,".out"),if((fp=fopen(filename,"r"))==NULL)continue;fclose(fp);strcpy(filename1,"g");strcat(filename1,hum);strcat(filename1,".out");fp1=fopen(filename1."w");fclose(fp1);gener(i,filename;filename1);}}voiddef_par(floatarr[MAX_REPRESNT+1[NUMBER_SPACE+1).intamountintspace,charfilename1[]);voidopen_file(charfilename1[],intamount,intletter){FILE*fp;fp=fopen(fiename1,"a+");fprintf(fp,"%d%d\n",letter,amount);fclose(fp);}/************************************Generalizeinformationforalltheletter.************************************/voidgener(inti,charfilename[],charfilename1[]){intgetherrintletter,intnum_space,charfilename[],charfilename1[]);intj;intamount;for(j=0;j<SYMBOLS_NUMBER;j+f){amount=gether(j,i,filename,filename1);}}/************************************Generalizeinformationforoneletter.************************************/intgether(intletter,intnum_space,charfilename[],charfilename1[]){intamount;FILE*fp;FILE*fp1;intin,space,num_mut,sp_num,x,y,z,i,j,length,l;floatspace_length[MAX_REPRESNT+1][NUMBER_SPACE+1];floatbeg[MAX_REPRESNT+1][NUMBER_SPACE+1];floatend[MAX_REPRESNT+1][NUMBER_SPACE+1];floatnul_beg[MAX_REPRESNT+1][NUMBER_SPACE+1];floatnul_end[MAX_REPRESNT+1][NUMBER_SPACE+1];inttemp;floatmut_len[MAX_REPRESNT+1][NUMBER_SPACE+1];amount=0;fp=fopen(filename,"r");fp1=fopen("temp","w");fclose(fp1);fp1=fopen("temP","a+");while(fscanf(fp,"%d",in)!=EOF){fscanf(fp,"%d%d\n",space,num_mut);mut_len[amount]=(float)num_mut;for(i=0;i<=space;i++){fscanf(fp,"%d",sp_num);fscanf(fp,"%d%f%f\n",temp,beg[amount][i],end[amount][i]);space_length[amount][i]=(float)temp;if(letter==in){∥fp1=fopen("temp","a+");fprintf(fp1,"%d\n",temp);if(amount==MAX_REPRESNT){fclose(fp);fclose(fp1);printf("Representationistoohuge\n")getchreturn(777);}for(j=0;j<temp;j++){fscanf(fp,"%d%d%d\n",x,y,z);fprintf(fp1,"%d%d%d\n",x,y,z);}}else{for(j=0;j<temp;j++)fscanf(fp,"%d%d%d\n",x,y,z);}fscanf(fp,"%f%f\n",nul_beg[amount][i],nul_end[amount][i]);}if(letter==in)amount++;}fclose(fp);fclose(fp1);if(amount>0){open_file(filename1,amount,letter);def_par(mut_len,amount,0,filename1);def_par(space_length,amount,space,filename1);def_par(beg,amount,space,filename1);def_par(end,amount,space,filename1);def_par(nul_beg,amount,space,filename1);def_par(nul_end,amount,space,filename1);fp=fopen("temp","r");fp1=fopen(filename1,"a+");fbr(i=0;i<=space;i++){for(j=0;j<amount;j++){fscanf(fp,"%d\n",length);fprintf(fp1,"%d\n",length);for(l=0;l<length;l++){fscanf(fp,"%d%d%d\n",x,y,z);fprintf(fp1,"%d%d%d\n",x,y,z);}}}fclose(fp);fclose(fp1);}return(amount);}/***************************************************************************Calculatesmedialxandycoordinatesandtheirdispersions***************************************************************************/voiddef_par(floatarr[MAX_REPRESNT+1][NUMBER_SPACE+1],intamount,intspace,charfilename1[]){intcount,i;floatdev[NUMBER_SPACE+1];floatmidll[NUMBER_SPACE+1];floatsumm;floattemp;floatmax[NUMBER_SPACE+1];floatmin[NUMBER_SPACE+1]FILE*fp;for(i=0;i<=space;n++){max[i]=0.0;min[i]=9999.9;}if(amount>0}{for(count=0;count<=space;count++){summ=0.0;for(i=0;i<amount;i++){summ=summ+arr[i][count];if(max[count]<arr[i][count])max[count]=arr[i][count];if(min[count]>arr[i][count])min[count]=arr[i][count];}midll[count]=summ/(float)amount;summ=0.0;for(i=0;i<amount;i++){temp=midll[count]-arr[i][count];summ=summ+temp*temp;}dev[count]=sqrt(summ/(float)amount);}}fp=fopen(filename1,"a+");for(count=0;count<=space;count++)fprintf(fp,"%f%f%f%f\n",midll[count],dev[count],max[count],min[count]);fprintf(fp,"\n");fclose(fp);return;}/**************************************************************************functioncalc_veccalculatesmedialxandycoordinatesandtheirdispersionsofthevectorjoiningthefirstpointofthesymbols’trajectoryandthelast***************************************************************************voidcalc_vec(intamount){intcount,i;floatsumm_1=0.0;floatsumm_2=0.0;floatsumm_3=0.0;floatsumm_4=0.0;floatsumm_1m=0.0;floatsumm_2m=0.0;floatsumm_3m=0.0;floatsumm_4m=0.0;floattemp;intam1,am2,am3,am4,am5,am6,am7,am8;if(amount>0)for(i=0;i<amount;i++){summ_1=summ_1+bx[i].x_b;summ_2=summ_2+by[i].y_b;summ_3=summ_3+bx[i].x_e;summ_4=summ_4+by[i].y_e;}x_midll.x_b=summ_1/(float)amount;y_midll.y_b=summ_2/(float)amount;x_midll.x_e=summ_3/(float)amount;y_midll.y_e=summ_4/(float)amount;summ_1=0.0;summ_2=0.0;summ_3=0.0;summ_4=0.0;summ_1m=0.0;summ_2m=0.0summ_3m=0.0;summ_4m=0.0;am1=0;am2=0;am3=0;am4=0;am5=0;am6=0;am7=0;am8=0;for(i=0;i<amount;i++){temp=x_midll.x_b-bx[i].x_b;if(temp>0.0){summ_1=summ_1+temp*temp;am1++;}else{summ_1m=summ_1m+temp*temp;am2++;}temp=y_midll.y_b-by[i].y_b;if(temp>0.0){summ_2=summ_2+temp*temp;am3++;}else{summ_2m=summ_2m+temp*temp;am4++;}temp=x_midll.x_e-bx[i].x_e;if(temp>0.0){summ_3=summ_3+temp*temp;am5++;}else{summ_3m=summ_3m+temp*temp;am6++;}temp=y_midll.y_e-by[i].y_e;if(temp>0.0){summ_4=summ_4+temp*temp;am7++;}else{summ_4m=summ_4m+temp*temp;am8++;}}if(am1==o)x_dev.x_b=0.0;∥dev-elsex_dev.x_b=sqrt(summ_1/(float)am1);if(am2==0)x_dev[1].x_b=0.0;∥dev+elsex_dev[1].x_b=sqrt(summ_1m/(float)am2);if((am1+am2)==0)x_dev[2].x_b=0.0;∥develsex_dev[2].x_b=sqrt((summ_1+summ_1m)/(float)(am1+am2));if(am3==0)y_dev.y_b=0.0;∥dev-elsey_dev.y_b=sqrt(summ_2/(float)am3);if(am4==0)y_dev[1].y_b=0.0;∥dev+elsey_dev[1].y_b=sqrt(summ_2m/(float)am4);if((am3+afm4)==o)y_dev[z].y_b=0.0;∥qevelsey_dev[2].y_b=sqrt((summ_2+summ_2m)/(float)(am3+am4));if(am5==0)x_dev.x_e=0.0;∥dev-elsex_dev.x_e=sqrt(summ_3/(float)am5);if(am6==0)x_dev[1].x_e=0.0;∥dev+elsex_dev[1].x_e=sqrt(summ_3m/(float)am6);if((am5+am6)==0)x_dev[2].x_e=0.0;∥develsex_dev[2].x_e=sqrt((summ_3+summ_3m)/(float)(am5+am6));if(am7==0)y_dev.y_e=0.0;∥dev-elsey_dev.y_e=sqrt(summ_4/(float)am7);if(am8==0)y__dev[1].y_e=0.0;∥dev+elsey_dev[1].y_e=sqrt(summ_4m/(float)am8);if((am7+am8)==0)y_dev[2].y_e=0.0;∥develsey_dev[2].y_e=sqrt((summ_4+summ_4rm)/(float)(am7+am8));}]]>III.識別過程<![CDATA[/*用於識別的主程序*/structGg[NUMBER_SPACE];floatbeg_end[NUMBER_SPACE][2];voidmain(void){FILE*fp;FILE*fp1;charininfile[30];charfilename1[30];intnumber;intindex;intnum;intnum_mut;charnum_ch[4];intsp_amount;intzon_x[10];intzon_y[10];intletter;floatarr_x[NUMBER_OF_STROKES];floatarr_y[NUMBER_OF_STROKES];floatarr_z[NUMBER_OF_STROKES];floatarr_p[NUMBER_OF_STROKES];intx,y,z,p,pen_old,i;intarr_beg_end[2];fp1=fopen("cba","r");while(fscanf(fp1,"%d",letter)!=EOF){fscanf(fp1,"%s\n",infile);if((fp=fopen(infile,"r"))==NULL)continue;printf("-%s-\n",infile);sp_amount=0;num=0num_mut=0pen_old=1;while(fscanf(fp,"%d",x)!=EOF){fscanf(fp,"%d%d%d\n",y,z,p);if(pen_old==p){arr_x[num]=(float)x;arr_y[num]=(float)y;arr_z[num]=(float)z;num++;//amountinthespaceif(num>NUMBER_OF_STROKES){printf("Amountofpenstrokesinthespaceisbiggerthen%d\n",NUMBER_OF_STROKES);getch;exit(0);}num_mut++;∥amountinthefile}else{prep(num,num_t,sp_amount,arr_x,arr_y,arr_z);sp_amount++;∥amountofspaceprep(num,num_mut,sp_amount,arr_x,arr_y,arr_z);pen_old=p;arr_x=(float)x;arr_y=(float)y;arr_z=(float)z;num=1;num_mut++;}fscanf(fp,"%d%d%d%d",x,y,z,p);fscanf(fp,"%d%d%d%d",x,y,z,p);fscanf(fp,"%d%d%d%d",x,y,z,p);}fclose(fp);prep(num,num_mut,sp_amount,arr_x,arr_y,arr_z);strcpy(filename1,"rec");strcat(filename1,".out");fp=fopen(filename1,"a+");fprintf(fp,"%d\n",letter);fprintf(fp,"%s\n",infile);fprintf(fp,"%d%c\n",sp_amount,num_mut);for(i=0;i<=sp_amount;i++){nul_zone(i,arr_beg_end);save(i,num_mut,arr_beg_end,fp);}fclose(fp);}fclose(fp1);}intmain(void){FILE*fp,*fp2;inti,lev,j;charfilename[30],filename1[30];floatlev_sortintlev_rb.lev_re;fp=fopen("flv","r")fscanf(fp,"%d".lev);fclose(fp);printf("Enterlevelforsorting");scanf("%f".lev_sort);printf("Enterlevelforbeginnullzone");scanf("%d",lev_rb)printf("Enterlevelforendnullzone;");scanf("%d",lev_re);/****************************************************/∥forconfusiontablefor(i=0;i<SYMBOLS_NUMBER;i++)for(j=0;j<SYMBOLS_NUMBER;j++)conf[i][i]=0;/****************************************************/fp2=fopen("sort.out",a+");fp=fopen("rec.out","r");recogn(fp,fp2,lev,lev_sort,lev_rb,lev_re);fclose(fp);fclose(fp2);/****************************************************/∥forconfusiontablefp=fopen("matr","w");for(i=0;i<26;i++)fprintf(fp,"%c",(char)(i+97));for(i=0;i<26;i++)fprintf(fp,"%c",(char)(i+65));for(i=0;i<10;i++)fprintf(fp,"%c",(char)(i+48));fprintf(fp,"\n");for(i=0;i<62;i++){for(j=0;j<62;j++)fprintf(fp,"%d",conf[i][j]);fprintf(fp,"\n");}fclose(fp);/****************************************************/return0;}/****************************************************Createsortingarrayaccordingtosortinglevel.****************************************************/intcutt_sort(intnum,floatlev_sort,structSsort[]){inti,j;floatlev;floatmax=0.0;for(i=0;i<num;i++)if(sort[i].w>max)max=sort[i].w;lev=max-lev_sort;if(lev<=0.0)lev=00;j=0;for(i=0;i<num;i++)if(sort[i].w>=lev){if(j!=i)sort[j]=sort[i];j++;}return(j);}intsort_funct(constvoid*a,constvoid*b){if(((structS*)a)->m>((structS*)b)->m)refurn(-1);if(((structS*)a)->m<((structS*)b)->m)return(1)return(0);}/**********************************Createfilesignrecognition.***********************************/voidrecogn(FILE*fp,FILE*fp2,intIev,floatIev_sort,intIev_rb,intIev_re){structSsort[SYMBOLS_NUMBER];FILE*fp1;charfiename1[30];floatbeg[NUMBER_SPACE];floatend[NUMBER_SPACE];intspace,num_mut,space_cur;doublekoef;intnumber,i,j,letter,amount,length,1;charnum[5];floatmidil,dev,metr;floatx[NUMBER_OF_STROKES];floaty[NUMBER_OF_STROKES];floatz[NUMBER_OF_STROKES];floatx_rec[NUMBER_OF_STROKES];floatY_rec[NUMBER_OF_STROKES];floatz_rec[NUMBER_OF_STROKES];floatnew_arr[NUMBER_OF_STROKES];inttemp1,temp2,temp3;floatmax,min;floatsumm;floatsumml;floatm[MAX_REPRESNT][NIMBER_SPACE];floatml[MAX_REPRESNT][NUMBER_SPACE];floatb_0[NUMBER_SPACE];floate_0[NUMBER_SPACE];floatmunlt;intsymb_num;charname_file[20];floatlev_sort1;intnum_for_sort;charletter_print;intSeqNo;while(fscanf(fp:「%d\n」number)!=EOF){fscanf(fp,「%s\n」,name_file);printf(「%s\n」name_file);fscanf(fp,「%d%d\n」space,num_mut);/*letterfromrecognitionser*/for(i=0i<=space;i++){fscanf(fp,「%d\n」space_cur);  fscanf(fp,「%d%f%f\n」,g[space_cur].num,g[space_cur].beg.g[space_cur].end);  for(j=0j<g[space_cur]num;j++)fscanf(fp,「%d%d%d\n」,g[space_cur].f[j].x,g[space_cur].f[j].y,g[space_cur],f[j].z);  fscanf(fp,「%f%f\n」,beg[space_cur],endd[space_cur]);}strcpy(filename1,「g」);sprintf(num,「%d」,space);strcat(filename1,num);strcat(filename1,「out」);fp1=fopen(filename1,"r");symb_num=0;while(fscanf(fp1,"%d",sort[symb_num].letter)!=EOF)/*letterfromgenset*/{fscanf(fp1,"%d",amount);fscanf(fp1,"%f%f%f%f\n",midll,dev,max,min);sort[symb_num].mut_len=mut_metric((float)num_mut,midll,0.0,1500.0,dev,dev);fscanf(fp1,"\n");for(i=0;i<=space;i++){fscanf(fp1,"%f%f%f%f\n",midll,dev,max,min);}mult=1.0;fscanf(fp1,"\n");for(i=0;i<=space;i++){fscanf(fp1,"%f%f%f%f\n",midll,dev,max,min);if(i%2==0)mult*=mut_metric(g[i].beg,midll,0.0,1.0,dev,dev);}fscanf(fp1,"\n");for(i=0;i<=space;i++){fscanf(fp1,"%f%f%f%f\n",midll,dev,max,min);if(i%2==0)mult*=mut_metric(g[i].end,midll,0.0,1.0,dev,dev);}sort[symb_num].beg_end=mult;fscanf(fp1,"\n");for(i=0;i<=space;i++){fscanf(fp1,"%f%f%f%f\n",midll,dev,max,min);}fscanf(fp1,"\n");for(i=0;i<=space;i++){fscanf(fp1,"%f%f%f%f\n",midll,dev,max,min);}fscanf(fp1,"\n");for(i=0;i<amount;i++){for(j=0;j<=space;j++){fscanf(fp1,"%d\n",length);for(l=0;l<length;l++){fscanf(fp1,"%d%d%d\n",temp1,temp2,temp3);x[l]=temp1;y[l]=temp2;z[l]=temp3;}for(l=0;l<g[j].num;l++){x_rec[l]=g[j]f[l].x;y_rec[l]=g[j].f[l].y;z_rec[l]=g[j].f[l].z;}if(length<g[j].num){normal(length,x,g[j].num,new_arr);summ=metric(xrec,new_arr,g[j].num,lev);summl=metncl(xrec,new_arr,g[j].num,lev,lev_rb,lev_re);normal(length,y,g[j].num,new_arr);summ+=metric(y_rec,newarr,g[j].num,lev);summl+=metricl(y_rec,new_arr,g[j].num,lev,lev_rb,lev_re);normal(length,z,g[j].num,new_arr),  summ+=metric(z_rec,newarr,g[j].num,lev);  summl+=metricl(z_rec,new_arr,g[j].num,lev,lev_rb,lev_re);  m[i][j]=1-summ/3;  ml[i][j]=1-summl/3;  }  else  {  normal(g[j].num,x_rec,length,new_arr);  summ=metric(x,new_arr,length,lev);  summl=metricl(x,new_arr,length,lev,lev_rb,lev_re);  normal(g[j].num,y_rec,length,new_arr);  summ+=metric(y,new_arr,length,lev);  summl+=metricl(y,new_arr,length,lev,lev_rb,lev_re);  normal(g[j].num,z_rec,length,new_arr);  summ+=metric(z,new_arr,length,lev);  summl+=metricl(z,new_arr,length,lev,lev_rb,lev_re);  m[i][j]=1-summ/3;  m[i][j]=1-summl/3;  }  }  }  metr=0.0;  for(i=0;i<=space;i++)  {max=0.0;  for(j=0;j<amount;j++)  if(max<m[j][i])max=m[j][i];  metr+=max;  }  sort[symb_num].w=metr/(space+1);  metr=0.0;  for(i=0;i<=space;i++)  {max=0.0;  for(i=0;j<amount;j++)  if(max<ml[j][i])max=m[j][i];  metr+=max;  }sort[symb_num].m_0=metr/(space+1);sort[symb_num].m=(somb[symb_num].w+sort[symb_num].mut_len+  sort[symb_num].beg_end)/3.0;  symb_num++;}fclose(fp1);num_for_sort=cutt_sort(symb_num,lev_sort,sort);if(num_for_sort>1)  qsort(sort,num_for_sort,sizeof(structS),sort_funct);i=0;if(name_file!=′b』){letter_print=name_file;  SeqNo=(int)(name_file[2]-48);}else  {if(isdigit((int)name_file[1])!=0)  {letter_print=name_file;  SeqNo=(int)(name_file[2]-48);  }else  {letter_print=toupper(name_file[1]);  SeqNo=(int)(name_file[3]-48);  } } fprintf(fp2,"-%c0%d-Level=%f%d\n",letter_print,SeqNo,lev_sort,num_for_sort);  /****************************************/∥forconfusiontable  conf[number-1][sort.letter-1]++;  /****************************************/  while(i<num_for_sort)  {fprintf(fp2,%3d*,sort[i].letter);  fprintf(fp2,"W=%.5fmut_len=%.5fbeg_end=%.5fm_O=%.5fmidll=%.5f\n",  sort[i].w,sort[i].mut_len,sort[i].beg_end,sort[i].m_O,sort[i].m);  i++;  }  }  }  /***************************************************************************  similartyfunctiondefinessimilaritybetweenparameterandsampleof  parameterswithknownmedial,leftandrightdeviation,andrangeofdefinition  (const_l,const_r)  ****************************************************************************/  floatmut_metnc(floatparam,floatmedial,floatconst_l,floatconst_r,  floatdev_l,floatdev_r)  {floatleft,right,m,div;  left=medial-dev_l;  if(left<const_l)left=const_l;  right=medial+dev_r;  if(right>const_r)nght=const_r;  if((param>=left)(param<=right))  return(1.0);  else  {div=const_r-const_l-right+left+0.0001;  if(div==0.0)div=medial;  if(param<left)  m=1.0-(left-param)/div;  if(param>right)  m=1.0-(param-right)/div;  }  if(m<0.0)m=0.0;  return(m);  }  /****************************************  Calculatefilecoordinatesaccordinglynewlength.  ****************************************/  voidnormal(intnum_old,floatarr_old[],intnum_new,floatarr_new[])  {  doublekoeff;  intind_old,ind_new;  koeff=(double)(num_old-1)/(float)(num_new-1);  arr_new=arr_old;  for(ind_new=1;ind_new<num_new-1;ind_new++){  ind_old=(int)(floor(koeff*ind_new));  arr_new[indnew]=(ind_old+1-koeff*ind_new)*arr_old[ind_old]+  (koeff*ind_new-ind_old)*arr_old[ind_old+1];  }arr_new[ind_new]=arr_old[num_old-1];}/****************************************Calculatelevel’smetric.*****************************************/floatmetric(floatz1[],floatz2[],intlength,intlev){inti;floatsumm=0;for(i=0;i<length;i++)summ=summ+fabs(z1[i]-z2[i]);return(summ/(float)(length*(lev-1)));}/****************************************Calculatezonemetric.****************************************/floatmetricl(floata[],floatb[],intlength,intlev,intbeg,intend){intcalc=0;inti;floats=0,0;calc=0;for(i=0;i<length;i++){if(((a[i]<=(float)end)(a[i]>=(float)beg))‖((b[i]<=(float)end)(b[i]>=(float)beg))){s+=fabs(a[i]-b[i]);calc++;}}if(calc==0)s=1;s=1.0-s/(float)(calc*(lev-1));return(s);}]]>圖形書寫板識別和加速度識別的複合結果<![CDATA[structTAB_ACS{charname;floattab_w;floatacs_w;floaty;floatx_vec;floaty_vec;floatamp;intup;floatm_tab;floatmut_len;floatbeg_end;floatm_acs;floatmidll;};intmatr[100][100];voidwrite_matr(void){FILE*fout1;inti,j;fout1=fopen("matrix.t_a","w");for(i=0;i<26;i++)fprintf(fout1,"%c",97+i);for(i=0;i<26;i++)fprintf(fout1,"%c",65+i);fprintf(fout1,*\n");for(i=0;i<52;i++){for(j=0;j<52;j++)fprintf(fout1,"%d",matr[i][j]);fprintf(fout1,"\n");}fclose(fout1);}charconv_char(intin_name){if(in_name<27)return((char)(in_name+96));∥a-z1-26if(in_name<53)return((char)(in_name+38));∥A-Z27-52if(in_name<63)return((char)(in_name-5));∥0-953-62return(0);}intconv_int(chara){if(a<58)return((int)a+4);if(a<91)return((int)a-39);if(a<123)return((int)a-97);return(0);}voidmatr_add(chara,charb){matr[conv_int(a)][conv_int(b)]++;}intsortfunct(constvoid*a.constvoid*b){if(((structTAB_ACS*)a)->midll>((structTAB_ACS*)b)->midll)return(-1);if(((structTAB_ACS*)a)->midll<((structTAB_ACS*)b)->midll)return(1);return(0);}voidmain(void){structACS{charname;floatw;floatmut_len;floatbeg_end;floatm_O;floatmidll;};structTAB{charname;floatw;floaty;floatx;floatx_vec;floaty_vec;floatamp;intup;floatm;};structTABtab[100];structACSacs[100];sfructTAB_ACStab_acs[100];FILE*fp,*fp1,*fout;inti,k,l;charname_file_tab;charname_file_acs;intnum_file_tab,num_file_acs;intnum_tab.num_acs;intin_name;floattemp;chartempc;intpr;intfindfile;fp=fopen("add_err","r");fp1=fopen("sort.out,"r");fout=fopen("combine""w");while(fscanf(fp,"%c%d",name_file_tab,num_file_tab)!=EOF)∥add_err{find_file=0;printf("-%c0%d-\n",name_file_tab,num_file_tab);fseek(fp.8.1);fscanf(fp,"%d\n",num_tab);for(i=0;i<num_tab;i++){fscanf(fp,"%c",tab[i].name);fscanf(fp,"w=%6f",temp);tab[i].w=temp;fscanf(fp,"y=%6f",temp);tab[i].y=temp;fscanf(fp,"x=%6f",temp);tab[i].x=temp;fscanf(fp,"x_vec=%6f",temp);tab[i].x_vec=temp;fscanf(fp,"y_vec=%6f",temp);tab[i].y_vec=temp;fscanf(fp,"amp=%6f",temp);tab[i].amp=temp;fscanf(fp,"up=%6f",temp);tab[i].up=temp;fscanf(fp,"m=%6f",temp);tab[i].m=temp;}while(fscanf(fp1,"-%c",name_file_acs)!=EOF)∥sort_out{fscanf(fp1,"0%d",num_file_acs);fseek(fp1,21,1);fscanf(fp1,"%d\n",num_acs);for(i=0;i<num_acs;i++){fscanf(fp1,"%d",ini_name);acs[i].name=conv_char(in_name);fscanf(fp1,"W=%7f",temp);acs[i].w=temp;fscanf(fp1,"mut_len=%7f",temp);acs[i].mut_len=temp;fscanf(fp1,"beg_end=%7f",temp);acs[i].beg_end=temp;fscanf(fp1,"m_0=%7f",temp);acs[i].m_0=temp;fscanf(fp1,"midll=%7%7f\n",temp);acs[i].midll=temp;}if((name_file_acs==name_file_tab)(num_file_acs==num_file_tab)){find_file=1;break;}}if(find_file==0){matr_add(name_file_tab,tab.name);fseek(fp1,0L,SEEK_SEtT);continue;}if(acs.name==tab.name){matr_add(name_file_tab,tab.name);fseek(fp1,OL,SEEK_SET);continue;}else{k=0;for(i=0;i<num_tab;i++){∥tab_acs[k].name=tab[i].name;for(j=0;j<num_acs;j++){if(tab[i].name==acs[j].name){tab_acs[k].name=tab[i].name;tab_acs[k].tab_w=tab[i].w;tab_acs[k].acs_w=acs[j].w;tab_acs[k].y=tab[i].y;tab_acs[k].x=tab[i].x;tab_acs[k].x_vec=tab[i].x_vec;tab_acs[k].y_vec=tab[i].y_vec;tab_acs[k].amp=tab[i].amp;tab_acs[k].up=tab[i].up;tab_acs[k].m_tab=(acs[j].w+tab[i].y+tab[i].x_vec+tab[i].amp)/4.0;tab_acs[k].mut_len=acs[j].mut_len;tab_acs[k].beg_end=acs[j].beg_end;tab_acs[k].m_acs=acs[j].midll;tab_acs[k].midll=(tab_acs[k].m_tab+tab_acs[k].acs_w)/2.0;k++;break;}}}fseek(fp1,0L,SEEK_SET);}fprintf(fout,"-%c0%d-%d\n",name_file_tab,num_file_tab,k);if(k==0)matr_add(name_file_tab,tab.name);else{qsort(tab_acs,k,sizeof(structTAB_ACS),sort_funct);matr_add(name_file_tab,tab_acs.name);for(l=0;kk;l++)fprintf(fout,「%c-tab_m=%.4facs_midll=%.4ftab_acs=%.4f\n",tab_acs[l].name,tab_acs[l].m_tab,tab_acs[l].acs_w,tab_acs[l].midll);}}fclose(fp1);fclose(fp);fclose(fout);write_matr;return;}]]>附錄C;PALASM設計說明;----------------------------------說明部分------------題目PALASM設計說明方式版本1.0授權者HANNA和VECTOR公司BARON日期02/27/94晶片_PALPAC22V10.附錄D;.CONSTMASK_RS232=B#0000000001;.CONSTDATA_BITS_1=B#11111110;.CONSTDATA_BITS_2=B#00000000111111100;.CONSTMASK_SYNCHROBIT=B#100000000;.CONSTEXCITATION_WORD=0×0055;.EXTERNALStartUp;.EXTERNALRevers;.PORTx_counter_port;.PORTy_counter_port;.EXTERNALPackage;  JUMPStartMouse;NOP;NOP;NOP;{Interuptvectortable}  RTI;NOP;NOP;NOP;{Nointerruptsused}  JUMPTransmitNext;NOP;NOP;NOP;  RTI;NOP;NOP;NOP;  RTI;NOP;NOP;NOP;  RTI;NOP;NOP;NOP;  JUMPSampling;NOP;NOP;NOP;StartMouse{SettingallControlRegistersandotherparameters}{SetsygtemparametersTimer,SPORT’s}  CALLStartUp;{--------------------------------------------------------------}{SetparametersofCircBuffer  I0=^Package;  M0=1;  L0=%Package;  I1=I0{--------------------------------------------------------------}{SetInterruptControlReg,SetIMASKReg,SetMSTATReg  ICNTL=0×17;  IMASK=0×39;  MSTAT=0×30;{--------------------------------------------------------------}{SendfirstsignaltoUST}  TX1=EXCITATION_WORD;{--------------------------------------------------------------}MLoop{Mainloopofprogram}  IDLE;{waitforTimerInterrupt}  JUMpMLoop;Sampling{TimerInterruptServicercutine(every3ms)}  MR0=DM(x_counter_port);{ReadXccunter}  MR1=DM(y_counter_port);{ReadYcounter}  Tx1=EXCITATION_WORD;{TransmitsignaltoUST}{èёёёёёёёùёёёёёёёёёùёёёёёёёёёùёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёùёёёёёё¤pack¤9¤8¤7°6°5°4°3°2°1C0¤¤for_ёёёёёёёёё_ёёёёёёёёё_ёёёёёüёёёёёüёёёёёüёёёёёüёёёёёüёёёёёüёёёёё_ёёёёёё¤PC¤StartBit¤Sync.Bit¤DataBits¤Stoo¤¤ёёёёёёё_ёёёёёёёёё_ёёёёёёёёё_ёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёёё_¤Byte1¤0¤1¤PEN°F11°F10°F09°F08°F07°F06¤1¤úááááááá_ááááááááá_ááááááááá_áááááéáááááéáááááéáááááéáááááéááááááéááááá_áááááN¤Byte2¤0¤0¤0°F05°F04°F03°F02°F01°F00¤1¤úááááááá_ááááááááá_ááááááááá_áááááéáááááéáááááéáááááéáááááéááááááéááááá_áááááN¤Byte3¤0¤0¤0°S11°S10°S09°S08°S07°S06¤1¤úááááááá_ááááááááá_ááááááááá_áááááéáááááéáááááéáááááéáááááéááááááéááááá_áááááN¤Byte4¤0¤0¤0°S05°S04°S03°S02°S01°S00¤1¤àёёёёёёёàёёёёёёёёёòёёёёёёёёёòёёёёёüёёёёёüёёёёёüёёёёёüёёёёёüёёёёёёüёёёёёòёёёёё¥}{BuidingtheFirstbyteofPackageforPC}  AR=MASK_RS232;  AY0=MASK_SYNCHROBIT;  AF=ARORAY0;  SR=LSHIFTMR0BY11(LO);  AY1=DATA_BITS_1;  AR=SR1ANDAY1;  CALLRevers;  SR=LSHIFTARBY1(LO);  AR=SR0ORAF;  DM(I0,M0)=AR;{---------------------------------------------------------------------------------}{BuidingtheSecondbyteofpackageforPC}  AR=MASKRS232;  AY0=0;  AF=ARORAYO;  SR=LSHIFTMROBY18(LO);  AY1=DATA_BITS_2;  AR=SRlANDAYl;  CALLRevers;  SR=LSHIFTARBY1(LO);  AR=SROORAF;  DM(I0,M0)=AR;{--------------------------------------------------------------------------------}{BuidingtheThirdbyteofPackageforPC}  SR=LSHIFTMRlBY12(LO);  AY1=DATA_BITS_1;  AR=SRlANDAYl;  CALLRevers;  SR=LSHIFTARBY1(LO);  AR=SROORAF;  DM(I0,M0)=AR;{--------------------------------------------------------------------------------}{BuidingtheFourthbyteofPackageforPC}  SR=LSHIFTMR1BY18(LO);  AY1=DATA_BITS_1;  AR=SR1ANDAY1;  CALLRevers;  SR=LSHIFTARBY1(LO);  AR=SR0ORAF;  DM(I0,M0)=AR;{--------------------------------------------------------------------------------}{SendFirstBytetoPC}  AX0=DM(I0,M0);  TX0=AX0;{---------------------------------------------------------------}  RTI;Transmit_Next  AXl=I0;  AY1=I1;  AR=AXl-AYl;  IFEQJUMPOut_Interrupt;Send_Next  AX0=DM(I0,M0);  TX0=AX0;Out_Interrupt  RTI;.ENDMOD;.SYSTEMibmwacom01;.ADSP2101;.MMAP0;.SEG/ROM/BOOT=0/CODEbootpm;.SEG/PM/RAM/ABS=0/CODEprog_mem;.SEG/DM/RAM/ABS=0×3800/DATAdata_mem;.PORT/DM/ABS=0×3400x_counter_port;.PORT/DM/ABS=0×3401y_counter_port;.ENDSYS;]]>目錄E<![CDATA[externintCOUNTS1[15000];externintCOUNTS2[15000];externcharpen_up[15000];#defineBUFFER_SIZE60000#defineMIN_COUNT850#defineMAX_COUNT1800#defineMINX-120#defineMINY700#defineMAXX800#defineMAXY1600#include<stdio.h>#include"extern.h"intInitialize(void){FILE*fp;intndx=0,tmp;if((fp=fopen("temp.tst","r+t"))==NULL)  return-1;while(fscanf(fp,"%d%d%d",COUNTS1[ndx],COUNTS2[ndx],tmp)>0ndx<15000){  pen_up[ndx++]=(char)tmp;}fclose(fp);if(ndx==15000)  printf("arrayexceeds15000!!!,notallfioleisread\n");returnndx;}#include"const.h"#include<graphics.h>#include<conio.h>#include<stdio.h>#include<math.h>#include<Stdlib.h>intInitialize(void);voidbutter_filtO(fioatin[],fioatout[]);#defineGR_ONintCOUNTS1[15000],COUNTS2[15000];charfarpen_up[15000];#pragmaargsusedintmain{intrepl;inti,ndx;unsignedcharc1,c2,fix=0,fly=0;unsignedintcount1,count2;intgdriver=DETECT,gmode,errorcode;intScrMaxX,ScrMaxY;intCountRange,XRange,YRange;floatx_cor,y_cor;floatNewCountAX[3],NewCountAY[3];floatCountAX[5],CountAY[5];floatax=0.,ay=0.;floatInFilt[2],OutFilt[2];intNumPoints,CountNdx=0;floattemp;#ifdefGR_ONinitgraph(gdriver,gmode,"C\\BORLANDC\\BGI");errorcode=graphresult;if(errorcode!=grOk){ printf("Graphicserror%s\n",grapherrormsg(errorcode));  printf("Pressanykeytohalt");  getch;  return-2;}#endifScrMaxX=getmaxx;ScrMaxY=getmaxy;CountRange=MAX_COUNT-MIN_COUNT;XRange=MAXX-MINX;YRange=MAXY-MINY;if((NumPoints=lnitialize)<0){  printf("unabletoinitalize\n");  return-1;}count1=COUNTS1[CountNdx];count2=COUNTS2[CountNdx++];NewCountAX=NewCountAX[1]=NewCountAX[2]=count1;NewCountAY=NewCountAY[1]=NewCountAY[2]=count2;CountAX=CountAX[1]=CountAX[2]=count1;CountAY=CountAY[1]=CountAY[2]=count2;InFilt=NewCountAX[1];InFilt[1]=NewCountAY[1];InFilt=375.  ((fioat)NewCountAX[1]*NewCountAX[1]-  (fioat)NewCountAY[1]*NewCountAY[1])/1500.;temp=(fioat)NewCountAY[1]*NewCountAY[1]-InFilt*lnFilt;if(temp>0)  InFilt[1]=(fioat)sqrt(temp);x_cor=(((InFilt-MINX)/(fioat)XRange)*ScrMaxX);y_cor=(((InFilt[1]-MINY)/(float)YRange)*ScrMaxY);#ifdefGR_ONmoveto(x_cor,y_cor);*#endifndx=0;NewCountAX=NewCountAX[1]=NewCountAX[2]=COUNTS1[CountNdx];NewCountAY=NewCountAY[1]=NewCountAY[2]=COUNTS2[CountNdx];CountAX=CountAX[1]=CountAX[2]=CountAX[3]=CountAX[4]=COUNTS1[CountNdx];CountAY=CountAY[1]=CountAY[2]=CountAY[3]=CountAY[4]=COUNTS2[CountNdx++];while(CountNdx<NumPoints){  count1=COUNTS1[CountNdx];  count2=COUNTS2[CountNdx++];  NewCountAX=NewCountAX[1];NewCountAY=NewCountAY[1];  NewCountAX[1]=NewCountAX[2];NewCountAY[1]=NewCountAY[2];/*NewCountAX[2]=count1;NewCountAY[2]=count2;*/CountAX=CountAX[1];CountAY=CountAY[1];  CountAX[1]=CountAX[2];CountAY[1]=CountAY[2];CountAX[2]=CountAX[3];CountAY[2]=CountAY[3];  CountAX[3]=CountAX[4];CuuntAY[3]=CountAY[4];  CountAX[4]=count1;CountAY[4]=count2;  if(fix)  {  NewCountAX[2]=(CountAX[3]-CountAX)*2./3.+NewCountAX;  fix=0;  }  else  if(abs(CountAX[2]-NewCountAX[1]-ax)<10)  NewCountAX[2]=CountAX[2]-ax;  elseif(abs(CountAX[1]-CountAX[3])<12)  NewCountAX[2]=(CountAX[1]+CountAX[3])/2.-ax;  elseif(abs(CountAX[1]-CountAX[4])<12)  {  NewCountAX[2]=(CountAX[4]-CountAX[1])/3.+CountAX[1]-ax;  fix=1;  }  else  {floattmp;  tmp=(NewCountAX[1]-NewCountAX+CountAX[3]-CountAX[2])/2;  ax=(CountAX[2]-NewCountAX[1]-tmp);   NewCountAX[2]=CountAX[2]-ax;  }  if(fly)  {  NewCountAY[2]=(CountAY[3]-CountAY)*2./3.+NewCountAY;  fly=0;   }   else  if(abs(CountAY[2]-NewCountAY[1]-ay)<10)  NewCountAY[2]=CountAY[2]-ay;  elseif(abs(CountAY[1]-CountAY[3])<12)  NewCountAY[2]=(CountAY[1]+CountAY[3])/2.-ay;  elseif(abs(CountAY[1]-CountAY[4])<12)  {  NewCountAY[2]=(CountAY[4]-CountAY[1])/3.+CountAY[1]-ay;  fly=1;  }  else  {floattmp;  tmp=(NewCountAY[1]-NewCountAY+CountAY[3]-CountAY[2])/2;  ay=(CountAY[2]-NewCountAY[1]-tmp);  NewCountAY[2]=CountAY[2]-ay;  }/*  if(abs(CountAY[1]-NewCountAY-ay)<10)  {NewCountAY[1]=CountAY[1]-ay;apy=ay;}elseif(abs(CountAY-CountAY[2])<12)  {NewCountAY[1]=(int)(CountAY+CountAY[2])/2.-ay;apy=ay;}  elseif(ay==apy)   {  apy=ay;  ay=(int)(CountAY[1]-NewCountAY);  NewCountAY[1]=CountAY[1]-ay;   }*/  InFilt=375.-  ((float)NewCountAX[2]*NewCountAX[2]-  (fioat)NewCountAY[2]*NewCountAY[2])/1500.;  temp=(float)NewCountAY[2]*NewCountAY[2]-InFilt*InFilt;  if(temp>0)  InFilt[1]=(fioat)sqrt(temp);  butter_filt0(InFilt,OutFilt);#ifdefGR_ON  x_cor=(((OutFilt-MINX)/(float)XRange)*ScrMaxX)*(480./640.);  y_cor=(((OutFilt[1]-MINY)/(float)YRange)*ScrMaxY);  if(CountNdx>21)  {  if(pen_up[CountNdx-20]!pen_up[CountNdx-21])  moveto((x_cor-200)*2,(y_cor-100)*2);  else  if(pen_up[CountNdx-20])  lineto((x_cor-200)*2,(y_cor-100)*2);   }#endif#ifndefGR_ON  printf("%04d%04d%04d%04d\n",NewCountAX[1],NewCountAY[1],(int)OutFilt,(int)OutFilt[1]);  /*printf("%u%u\n",Buffln,BuffOut);*/  ndx++;#endif  if(kbhit)  {  if(getch==0)  getch;  break;  }  /*if(OverFlowFlag)  {  printf("BufferOverFlow\n");  continue;  }*/}/*CloselnterrComm(portbase);*/#ifdefGR_ON  while(!kbhit)/*donothing*/;  getch;/*closegraph;*/#endif  returnO;}/*****************************************************.再構造及筆移動圖及符合*****************************************************/#include<conio.h>#include<stdio.h>#include<math.h>#include<stdlib.h>/*FiltrationbylowPASSfilterButterworth4order.andcutofffreq..04fromhalfsamplingrateInputarayin.Outputarrayout.*/voidbutter_filt0(fioatin[],floatout[]){  staticfloata[5]={1.,-3.6717291,5.0679984,-3.1159669,.71991033};  staticfloatb[5]={1.3293729e-05,5.3174916e-05,7.9762373e-05,5.3174916e-05,1.3293729e-05};  staticfloaty[2][5],x[2][5];  inti,j;  floatsum=0.;  staticintfi=0;  for(j=0;j<2;j++)  {  if(!fi)  for(i=0;i<5;i++)  {  y[j][i]=in[j];  x[j][i]=in[j];  }  for(i=4;i>0;i--)  x[j][i]=x[j][i-1];  x[j]=in[j];if(fl)  {  sum=0;  for(i=4;i>0;i--)  y[j][i]=y[j][i-1];  for(i=0;i<5;i++)  sum+=b[i]*x[j][i];  for(i=1;i<5;i++)  sum-=a[i]*y[j][i];  y[j]=sum;  out[j]=sum;;  }  else  out[j]=in[j];}if(!fi)fl=1;}]]>權利要求1.手寫體識別設備,包括手寫體輸入裝置使用至少兩種不同的檢測技術檢測手寫體和包括至少一個位於手持書寫工具上的加速計;和符號識別裝置接收該手寫體輸入裝置的輸出,提供該手寫體所代表的符號的指示輸出。2.按照權利要求1的手寫體識別設備,其中所述手寫體輸入裝置包括一個位置數位化器。3.按照權利要求1的手寫體識別設備,其中所述手寫體輸入裝置包括在空氣中操作的超聲波位置確定裝置。4.按照權利要求3的手寫體識別設備,其中所述手寫體輸入裝置是在計算機屏幕上書寫操作的。5.用於檢測筆—表面接觸的設備,包括至少一個加速計測量至少一個用戶的手操縱的一個筆的加速度分量,筆一表面接觸檢測器接收來自加速計的輸入,該輸入被濾波,去除噪聲分量。6.按照權利要求2的手寫體識別設備,其中所述至少一個加速計包括多個互相正交放置的加速計。7.按照權利要求2的手寫體識別設備,其中所述符號識別裝置包括,組合位置和加速度處理裝置,該裝置組合來自所述數位化器和所述在識別符號中的至少一個加速計的輸入。8.按照權利要求2的手寫體識別設備,其中所述符號識別裝置包括,第一識別信道,用於從所述數位化器輸入,提供代表符號的識別的第一輸出;第二識別信道,用於從所述至少一個加速計輸入,提供代表符號的識別的第二輸出;和符號選擇裝置,用於根據預定的準則在第一和第二輸出之間進行選擇。9.按照權利要求5的檢測筆—表面接觸設備,其中所述檢測器包括加速度噪聲分析器,進行操做提取出加速度數據的噪聲輸出和使用該噪聲來檢測筆—表面接觸。10.按照權利要求5的用於檢測第—表面接觸的設備,其中所述至少一個加速計是可改型地安裝在筆上。11.一種手寫體識別方法,包括從三個互相正交地安裝在書寫工具上的加速度計上接收涉及一個書寫工具的加速度和至少部分地根據書寫工具的加速度與存儲的具有多個符號的每一個的特徵的加速度序列之間比較;識別由書寫工具寫的符號。12.手寫識別設備,包括一個特徵的加速度序列存儲器有效地存儲具有多個符號的每個的特徵的加速度序列;一個書寫器具監視器有效地從安裝在所述書寫工具上三個互相正交的加速度計接收涉及書寫工件的加速度信息;和一個符號識別器有效地至少根據書寫工具的加速度與存儲的加速度序列的比較,提供由書寫工具書寫的符號的輸出指示。13.按照權利要求12的手寫體識別設備,其中所述書寫工具監視器還有效地接收涉及所述書寫工具的位置的信息。14.一種手寫體識別方法,包括使用至少一個位於手持的書寫工具上的加速計和至少一個附加的不同的檢測技術檢測手寫體;和接收手寫體的輸出指示,以便提供代表手寫體的符號輸出指示。15.按照權利要求14的手寫體識別方法,其中所述至少一個附加的檢測技術包括位置數位化。16.一種檢測筆—表面接觸的方法,包括使用至少一個加速度計測量至少一個用戶手操縱筆的加速度分量;和從加速度計接收一個輸入,該輸入被濾波去除非噪聲分量和提供一個筆—表面接觸輸出指示。17.按照權利要求15的手寫體識別方法,還包括通過組合數位化位置輸入和檢測加速度信息,識別符號。18.按照權利要求14的手寫體識別方法,其中所述接收包括使用數位化的位置輸入,提供代表符號識別的第一輸出;使用加速度信息,提供代表符號識別的第二輸出;和在第一和第二輸出中進行選擇。19.手寫體識別設備,包括手寫體輸入裝置包括至少第一和第二不同的手寫體檢測器,產生第一和第二手寫體輸出,至少所述第一和所述第二不同的手寫體檢測器之一包括至少一個位於手持的書寫工具上的加速計;和一個用於組合第一和第二手寫體輸出的附件,提供增強的手寫體輸出的性能;和符號識別裝置接收所述增加的手寫體輸出性能,提供代表手寫體的符號輸出指示。20.按照權利要求1的手寫體識別設備,其中所述手寫體輸入裝置包括光字符識別裝置。21.按照權利要求19的手寫體識別設備,其中所述第二手寫體檢測器包括一個鍵盤。22.按照權利要求19的手寫體識別設備,其中所述第二手寫體檢測器包括工作在空氣中的超聲波位置確定裝置。23.按照權利要求22的手寫體識別設備,其中所述第二手寫體檢測器有效地檢測在計算機屏幕上的手寫體。24.按照權利要求20的手寫體識別設備,其中所述至少一個加速度計包括多個加速度計。25.按照權利要求19的手寫體識別設備,其中所述第一和第二手寫體檢測器中的至少一個包括有效地檢測書寫工具的位置的裝置。26.按照權利要求19的手寫體識別設備,其中所述附件有效地在兩維範圍相關第一和第二手寫體輸出。27.按照權利要求19的手寫體識別設備,其中所述附件有效地在時間範疇相關第一和第二手寫體輸出。28.一種手寫體識別方法,包括使用至少一個位於手持的書寫器具上的加速度計和至少一個附加的檢測器,產生第一和第二手寫體輸出;組合第一和第二手寫體輸出,提供一個增強性能的手寫體輸出;和使用所述增強性能和手寫體輸出,提供一個代表該手寫體的符號輸出指示。29.按照權利要求24的手寫體識別設備,其中所述多個加速度計是互相正交放置的。30.按照權利要求28的方法,其中所述至少一個附加的不同檢測器是有效地檢測書寫工具的位置。31.按照權利要求28的方法,其中組合的步驟包括在兩維範圍的相關第一和第二手寫體輸出。32.按照權利要求28的方法,其中組合的步驟包括在時間範疇相關第一和第二手寫體輸出。33.手繪體識別設備,包括手繪體輸入裝置使用至少兩個不同的檢測技術,檢測手繪體和包括至少位於手持的書寫工具上的一個加速度計;和形狀識別裝置接收手繪體輸入裝置的輸出,提供代表手繪體的形狀指示輸出。34.按照權利要求33的手繪體識別設備,其中所述手繪輸入裝置包括一個位置數位化器。35.按照權利要求33的手繪體識別設備,其中所述手繪體包括至少描繪和手寫體之一。36.按照權利要求33的手繪體識別設備,其中所述輸入裝置包括工作在空氣中的超聲波位置確定裝置。37.按照權利要求33的手繪體識別設備,其中所述形狀識別裝置包括組合位置和加速度處理裝置,該裝置在識別形狀中組合來自所述數位化器和所述至少一個加速度計的輸入。38.按照權利要求33的手繪體識別設備,其中所述形狀識別裝置包括第一識別信道,用於來自所述數位化器的輸入,提供代表形狀識別的第一輸出,第二識別信道,用於來自至少一個加速計的輸入,提供代表形狀識別的第二輸出,和形狀選擇裝置,用於根據預定的推測在第一和第二輸出之間進行選擇。39.按照權利要求38的手繪體識別設備,其中所述至少一個加速度計是可多種形式安裝在書寫工具上的。40.一種手繪體識別方法包括接收從三個互相正交地安裝在所述書寫工具上的加速度計的涉及書寫工具的加速度信息;和至少部分地根據書寫工具的加速和存儲的具有多個形狀的每個的加速度序列之間的比較識別由書寫工具所寫的形狀。41.按照權利要求40的手繪體識別方法,還包括接收涉及書寫工具的位置的信息。42.按照權利要求40的手繪體識別設備,還包括存儲按照由第二多個用的每一個產生的其有第一多個形狀的每個特徵的加速度序列。43.手繪體識設備,包括特徵的加速度序列存儲器有效地存儲具有多個形狀特徵在每一個的加速度序列;書寫工具監視器有效地接收來自三個互相正交地安裝在所述書寫工具上的加速計的涉及書寫工具的加速度信息;和一個形狀識別器,至少部分地根據書寫工具的加速度和存儲的加速度序列的比較,提供由書寫工具的書寫形狀的輸出指示。44.按照權利要求43的手繪體識別設備,其中所述書寫工具監視器也有效地接收涉及所述書寫工具的位置信息。45.一種手繪體識別方法,包括使用至少一個位於手持的書寫工具上的加速度計和至少一個附加的不同的檢測技術,檢測手繪體;和接收一個手繪體的輸出,以便提供代表該手繪體形狀的輸出指示。46.按照權利要求45的手繪體識別方法,其中所述至少一個附加的檢測技術包括位置數位化。47.按照權利要求45的手繪體識別方法,還包括通過組合數位化位置輸入和檢測的加速度信息識別形狀。48.按照權利要求45的手繪體識別方法,其中所述接收包括使用數位化位置輸入,提供代表形狀識別的第一輸出;使用加速度信息,提供代表形狀識別的第二輸出;和在第一和第二輸出之間進行選擇。49.按照權利要求45的方法,其中所述接收包括提取加速度數據的噪聲輸出和使用該噪聲檢測筆—表面的接觸。50.手繪體識別設備,包括手繪體輸入裝置包括至少第一和第二不同的手繪體檢測器產生第一和第二手繪體輸出,至少所述第一和第二手繪體檢測器之一包括至少一個位於書寫工具上的加速度計;和一個用於組合第一和第二手繪體輸出的附件,提供一個增強性能的手繪體輸出;和形狀識別裝置接收所述增強性能的手繪體輸出,提供代表手繪體的形狀的輸出指示。51.按照權利要求20的手寫體識別設備,其中所述符號識別裝置包括組合位置和加速度處理裝置,該裝置在識別符號中組合來自所述光字符識別裝置和所述至少一個加速度計的輸入。52.按照權利要求50的手寫體識別設備,其中所述第二手繪檢測器包括一個鍵盤。53.按照權利要求50的手寫體識別設備,其中所述第二手寫檢測器包括一個工作在空氣中的超聲波位置確定裝置。54.按照權利要求20的手寫體識別設備,其中所述符號識別裝置包括第一識別信道,用於來自所述光字符識別裝置的輸入,提供代表符號識別的第一輸出,第二識別信道,用於來自所述至少一個加速度計的輸入,提供代表符號識別的第二輸出,和符號選擇裝置,用於根據預定的準則在第一和第二輸出之間進行選擇。55.按照權利要求50的手繪體識別設備,其中所述第一和第二手寫體檢測器中的至少一個包括有效地檢測書寫工具的位置的裝置。56.按照權利要求50的手繪體識別設備,其中所述附件在兩維範圍中有效地相關第一和第二手繪體輸出。57.按照權利要求50的手繪體識別設備,其中所述附件在時間範疇有效地相關第一和第二手繪體輸出。58.一種手繪體識別方法,包括使用至少一個位於手持的繪畫工具上的加速度計和至少一個附加的檢測器,產生第一和第二手繪體輸出;組合該第一和第二手繪體輸出,提供增加性能的手繪體輸出;和使用怕述增強性能的手繪體輸出;提供代表該手繪體的形狀的輸出指示。59.按照權利要求20的手寫體識別設備,其中所述至少一個加速度計是可多種形式安裝在筆上的。60.按照權利要求58的方法,其中所述第一和第二手寫體檢測器中的至少一個是有效地檢測書寫工具的位置。61.按照權利要求58的方法,其中組合包括在兩維範圍中相關所述第一和第二手繪體輸出。62.按照權利要求58的方法,其中組合包括在時間範圍相關所述第一和第二手繪體輸出。63.按照權利要求33的手繪體識別設備,其中所述輸入裝置包括光識別裝置。64.按照權利要求63的手繪體識別設備,其中所述形狀識別裝置包括組合光字符識別和加速處理裝置,該裝置在識別形狀中組合來自所述光字符識別裝置和所述至少一個加速度計的輸入。65.按照權利要求64的手繪體識別設備,其所述形狀識別裝置包括第一識別信道,用於來自所述光字符識別裝置的輸入,提供代表形狀識別的第一輸出,第二識別信道,用於來自所述至少一個加速度計的輸入,提供代表形狀識別的第二輸出,和形狀選擇裝置,用於根據預定的準則在第一和第二輸出之間進行選擇。全文摘要手寫體識別設備包括使用至少兩種不同檢測技術檢測手寫體的手寫體輸入裝置和接收該手寫體輸入裝置的輸出提供代表該手寫體的符號輸出指示的符號識別裝置。文檔編號G06F3/033GK1128380SQ9510140公開日1996年8月7日申請日期1995年2月5日優先權日1994年2月4日發明者埃赫德·巴羅,亞歷山大·普麗赤文,澤福·巴-依特查卡,維克多·科塞斯凱申請人:巴羅技術有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀