Wave3.cpp
上传用户:shhfmail
上传日期:2007-01-11
资源大小:7k
文件大小:2k
- #include<stdio.h>
- #include<stdlib.h>
- #include<conio.h>
- #include<complex.h>
- #include<dos.h>
- #include<string.h>
- #define PI 3.1415926535
- #define L 50
- #define E 5
- #define ELS 1
- #define MAS 10
- #define FR 1.01
- typedef unsigned char byte;
- char far*VGA=(char far*)0xA0000000L;
- float CX=320/(PI*70/180),CY=200/(PI*70/180);int MED=1;//L*(L+1)/2;
- float gx=0,gy=0;
- void putpixel(int x,int y,int c){VGA[x+320*y]=c;}
- struct punto{float v,p;};
- punto*m=(punto*)malloc(L*L*sizeof(punto));
- void draw(int n,int c){
- float
- x=E*(L/2-n%L+.5),
- y=E*(L/2-n/L-.5),
- z=m[n].v;
- float k,r;
- k=arg(complex(x,y));r=hypot(x,y);x=r*cos(k+gx);y=r*sin(k+gx);
- k=arg(complex(y,z));r=hypot(y,z);y=r*cos(k+gy);z=r*sin(k+gy);
- z+=300;if(z>0)putpixel(160+atan(x/z)*CX,100-atan(y/z)*CY,z*c);
- }
- main()
- {
- REGS vga;vga.h.ah=0x00;vga.h.al=0x13;int86(0x10,&vga,&vga);
- REGS mouse;
- int n,k;
- for(n=0;n<L*L;n++){m[n].v=7;m[n].p=0;}
- while(1)
- {
- mouse.x.ax=0x0B;int86(0x33,&mouse,&mouse);k=mouse.x.dx;
- if(k)
- {
- 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;
- /*for(n=0;n<L;n++)
- {
- m[n*L].p+=(float)k/10;
- m[n*L-1].p-=(float)k/10;
- m[n].p+=(float)k/10;
- m[n+(L-1)*L].p-=(float)k/10;
- }*/
- }
- 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;}
- if(kbhit())
- {
- k=getch();
- if(!k)
- {
- k=getch();
- for(n=0;n<L*L;n++)draw(n,0);
- if(k==71)gy-=.1;
- if(k==79)gy+=.1;
- if(k==83)gx-=.1;
- if(k==81)gx+=.1;
- }
- }
- for(n=0;n<L*L;n++){draw(n,0);m[n].v+=m[n].p/MAS;draw(n,1);m[n].p/=FR;}
- }
- }