Wave2.cpp
上传用户:shhfmail
上传日期:2007-01-11
资源大小:7k
文件大小:1k
源码类别:

图形图象

开发平台:

C/C++

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4. #include<complex.h>
  5. #include<dos.h>
  6. #include<string.h>
  7. #include<graphics.h>
  8. #define PI 3.1415926535
  9. #define L 30
  10. #define E 2
  11. #define ELS 1
  12. #define MAS 10
  13. #define FR 1.01
  14. typedef unsigned char byte;
  15. float CX=640/PI,CY=480/PI;int MED=L*(L+1)/2;
  16. struct punto{float v,p;};
  17. punto*m=(punto*)malloc(L*L*sizeof(punto));
  18. void draw(int n,int c){
  19. float
  20. x=E*(L/2-n%L+.5),
  21. y=E*(L/2-n/L-.5),
  22. z=m[n].v;
  23. putpixel(320+x*2,37-z,15*c);
  24. z+=30;if(z>0)putpixel(320+atan(x/z)*CX,240-atan(y/z)*CY,z*c);
  25. }
  26. main()
  27. {
  28. int gmode=VGAHI,gdriver=VGA;initgraph(&gdriver,&gmode,"");
  29. int n,k;
  30. REGS mouse;
  31. for(n=0;n<L*L;n++){m[n].v=7;m[n].p=0;}
  32. while(1)
  33. {
  34. mouse.x.ax=0x0B;int86(0x33,&mouse,&mouse);k=mouse.x.dx;
  35. if(k)
  36. {
  37. //m[MED].p+=(float)k/10;m[MED-L].p+=(float)k/10;m[MED+L].p+=(float)k/10;m[MED-1].p+=(float)k/10;m[MED+1].p+=(float)k/10;
  38. for(n=0;n<L;n++)
  39. {
  40. m[n*L].p+=(float)k/10;
  41. m[n*L-1].p-=(float)k/10;
  42. m[n].p+=(float)k/10;
  43. m[n+(L-1)*L].p-=(float)k/10;
  44. }
  45. }
  46. for(n=0;n<L*L;n++){if((n+1)%L)m[n].p+=(m[n+1].v-m[n].v)/ELS;if(n%L)m[n].p+=(m[n-1].v-m[n].v)/ELS;if(n<(L-1)*L)m[n].p+=(m[n+L].v-m[n].v)/ELS;if(n>L)m[n].p+=(m[n-L].v-m[n].v)/ELS;}
  47. for(n=0;n<L*L;n++){draw(n,0);m[n].v+=m[n].p/MAS;draw(n,1);m[n].p/=FR;}
  48. }
  49. }