#include #include #include #include int k[4],wave[4096],r_l,u_d,grow,dir; double a[4],b[4],c[4],d[4]; main(){ int z,i; double s,t,u,v,w,th; display_setting(0); for(i=0;i<4096;i++){ th=(double)i*3.1415926535/128.0; s=sin(th*55.0)*0.1; t=sin(th*36.0)*0.15; u=sin(th*25.0)*0.2; v=sin(th*13.0)*0.25; w=sin(th*1.0)*1.0; wave[i]=(int)(32767.9*(s+t+u+v+w)/2.0); } a[0]=0.5; b[0]=0.5; c[0]=0.5; d[0]=0.5; k[0]=3; a[1]=0.5; b[1]=0.5; c[1]=0.5; d[1]=-0.5; k[1]=3; a[2]=0.5; b[2]=0.5; c[2]=-0.5; d[2]=-0.5; k[2]=3; a[3]=0.5; b[3]=-0.5; c[3]=-0.5; d[3]=-0.5; k[3]=3; r_l=0; wave_display(0); keyboard(0); for(i=0;i<4;i++){ u_d=i; wave_display(1); } u_d=0; grow=1; dir=1; while(1){ if(kbhit()!=0){ z=getch(); if(z==0x1b) break; else keyboard(z); } else wave_display(1); } display_setting(1); } keyboard(data) int data; { int i,j; if(data==0x0b){ u_d=u_d-1; if(u_d<0) u_d=3; } else if(data==0x0a){ u_d=u_d+1; if(u_d>3) u_d=0; } else if(data==0x0c){ r_l=r_l+1; if(r_l>4) r_l=0; } else if(data==0x08){ r_l=r_l-1; if(r_l<0) r_l=4; } else if(data==0x20){ grow=(grow+1)&1; } for(j=0;j<4;j++){ for(i=0;i<5;i++){ _settextposition(6+j*5,1+i*15); printf(" "); } } _settextposition(6+u_d*5,1+r_l*15); printf("##"); if(data==0){ for(j=0;j<4;j++){ i=0; _settextposition(6+j*5,4+i*15); printf(" "); _settextposition(6+j*5,4+i*15); printf("K=%d",k[j]); i=1; _settextposition(6+j*5,4+i*15); printf(" "); _settextposition(6+j*5,4+i*15); printf("a=%f",a[j]); i=2; _settextposition(6+j*5,4+i*15); printf(" "); _settextposition(6+j*5,4+i*15); printf("b=%f",b[j]); i=3; _settextposition(6+j*5,4+i*15); printf(" "); _settextposition(6+j*5,4+i*15); printf("c=%f",c[j]); i=4; _settextposition(6+j*5,4+i*15); printf(" "); _settextposition(6+j*5,4+i*15); printf("d=%f",d[j]); } } else if((grow==1)&&(data==0x0d)){ j=u_d; i=r_l; _settextposition(6+j*5,4+i*15); printf(" "); _settextposition(6+j*5,4+i*15); if(i==0){ k[j]=k[j]+1; if(k[j]>128) k[j]=1; printf("K=%d",k[j]); } else if(i==1){ a[j]=a[j]+0.1; if(a[j]>1.0) a[j]=-1.0; printf("a=%f",a[j]); } else if(i==2){ b[j]=b[j]+0.1; if(b[j]>1.0) b[j]=-1.0; printf("b=%f",b[j]); } else if(i==3){ c[j]=c[j]+0.1; if(c[j]>1.0) c[j]=-1.0; printf("c=%f",c[j]); } else{ d[j]=d[j]+0.1; if(d[j]>1.0) d[j]=-1.0; printf("d=%f",d[j]); } } } wave_display(mode) int mode; { int v_point; int i,j,l,x,y,ox,oy,p,q,r,s; double e,f,g,h,u; if(mode==0){ _clearscreen(_GCLEARTEXT); _clearscreen(_GCLEARSCREEN); ox=0; oy=0; v_point=60; for(i=0;i<512;i++){ x=i; y=wave[i]/656; _moveto(ox+50,v_point-oy); _lineto(x+50,v_point-y); ox=x; oy=y; } return(0); } if(grow==0){ j=u_d; i=r_l; _settextposition(6+j*5,4+i*15); printf(" "); _settextposition(6+j*5,4+i*15); if(i==0){ if(dir==1){ k[j]=k[j]+1; if(k[j]>127) dir=0; } else{ k[j]=k[j]-1; if(k[j]<2) dir=1; } printf("K=%d",k[j]); } else if(i==1){ if(dir==1){ a[j]=a[j]+0.1; if(a[j]>0.999) dir=0; } else{ a[j]=a[j]-0.1; if(a[j]<-0.999) dir=1; } printf("a=%f",a[j]); } else if(i==2){ if(dir==1){ b[j]=b[j]+0.1; if(b[j]>0.999) dir=0; } else{ b[j]=b[j]-0.1; if(b[j]<-0.999) dir=1; } printf("b=%f",b[j]); } else if(i==3){ if(dir==1){ c[j]=c[j]+0.1; if(c[j]>0.999) dir=0; } else{ c[j]=c[j]-0.1; if(c[j]<-0.999) dir=1; } printf("c=%f",c[j]); } else{ if(dir==1){ d[j]=d[j]+0.1; if(d[j]>0.999) dir=0; } else{ d[j]=d[j]-0.1; if(d[j]<-0.999) dir=1; } printf("d=%f",d[j]); } } j=u_d; e=a[j]; f=b[j]; g=c[j]; h=d[j]; l=k[j]; ox=0; oy=0; v_point=140+j*70; for(i=0;i<512;i++){ _setcolor(0); _moveto(i+50,v_point-35); _lineto(i+50,v_point+35); _setcolor(7); p=wave[i]; q=wave[i+l]; r=wave[i+l*2]; s=wave[i+l*3]; u=e*(double)p+f*(double)q+g*(double)r+h*(double)s; x=i; y=(int)(u/sqrt(e*e+f*f+g*g+h*h)/1312.0); _moveto(ox+50,v_point-oy); _lineto(x+50,v_point-y); ox=x; oy=y; } } display_setting(x) int x; { if(x==0){ _setvideomode(_98RESS16COLOR); _displaycursor(_GCURSOROFF); _clearscreen(_GCLEARTEXT); _clearscreen(_GCLEARSCREEN); } else{ _clearscreen(_GCLEARSCREEN); _displaycursor(_GCURSORON); _setvideomode (_DEFAULTMODE); } }