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

图形图象

开发平台:

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. #define PI 3.1415926535
  8. #define L 50
  9. #define E 5
  10. #define ELS 1
  11. #define MAS 10
  12. #define FR 1.01
  13. typedef unsigned char byte;
  14. char far*VGA=(char far*)0xA0000000L;
  15. float CX=320/(PI*70/180),CY=200/(PI*70/180);int MED=1;//L*(L+1)/2;
  16. float gx=0,gy=0;
  17. void putpixel(int x,int y,int c){VGA[x+320*y]=c;}
  18. struct punto{float v,p;};
  19. punto*m=(punto*)malloc(L*L*sizeof(punto));
  20. void draw(int n,int c){
  21. float
  22. x=E*(L/2-n%L+.5),
  23. y=E*(L/2-n/L-.5),
  24. z=m[n].v;
  25. float k,r;
  26. k=arg(complex(x,y));r=hypot(x,y);x=r*cos(k+gx);y=r*sin(k+gx);
  27. k=arg(complex(y,z));r=hypot(y,z);y=r*cos(k+gy);z=r*sin(k+gy);
  28. z+=300;if(z>0)putpixel(160+atan(x/z)*CX,100-atan(y/z)*CY,z*c);
  29. }
  30. main()
  31. {
  32. REGS vga;vga.h.ah=0x00;vga.h.al=0x13;int86(0x10,&vga,&vga);
  33. REGS mouse;
  34. int n,k;
  35. for(n=0;n<L*L;n++){m[n].v=7;m[n].p=0;}
  36. while(1)
  37. {
  38. mouse.x.ax=0x0B;int86(0x33,&mouse,&mouse);k=mouse.x.dx;
  39. if(k)
  40. {
  41. 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;
  42. /*for(n=0;n<L;n++)
  43. {
  44. m[n*L].p+=(float)k/10;
  45. m[n*L-1].p-=(float)k/10;
  46. m[n].p+=(float)k/10;
  47. m[n+(L-1)*L].p-=(float)k/10;
  48. }*/
  49. }
  50. 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;}
  51. if(kbhit())
  52. {
  53. k=getch();
  54. if(!k)
  55. {
  56. k=getch();
  57. for(n=0;n<L*L;n++)draw(n,0);
  58. if(k==71)gy-=.1;
  59. if(k==79)gy+=.1;
  60. if(k==83)gx-=.1;
  61. if(k==81)gx+=.1;
  62. }
  63. }
  64. for(n=0;n<L*L;n++){draw(n,0);m[n].v+=m[n].p/MAS;draw(n,1);m[n].p/=FR;}
  65. }
  66. }