#include #include #define febr 800 #define feho 600 //---------------------VARIABLEN------------------------------------- double s,u,v,p,ww,aa,slx,sly,srx,sry,mx,rr,kr,sux,suy,sox,soy,my,gr, lx,ly,rx,ry,ux,uy,ox,oy,w,a,x,y,dlx,dly,dlq,dl,drx,dry,drq,dr, dux,duy,duq,du,odx,ody,odq,od,klx,kly,krx,kry,kux,kuy,kox,koy,fl,flx, fly,fr,frx,fry,fu,fux,fuy,fo,fox,foy,fx,fy,f,ex,ey,c,cx,cy,cw,cs,cz; int i,cr,cg,cb; char t[256]; //------------------------------------------------------------------- static int cxClient, cyClient ; HDC hdc ; LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("DASSISSESS") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("Program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, TEXT ("DASSISSESS"), WS_OVERLAPPEDWINDOW, 0, 0, febr, feho, NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, SW_SHOWMAXIMIZED) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } //------------------------------------UNTERPROGRAMME----------------- void abst(void) { // abstaende dlx=x- lx;dly=y- ly;dlq=dlx*dlx+dly*dly;dl=sqrt(dlq); // abstaende real drx=x- rx;dry=y- ry;drq=drx*drx+dry*dry;dr=sqrt(drq); dux=x- ux;duy=y- uy;duq=dux*dux+duy*duy;du=sqrt(duq); odx=x- ox;ody=y- oy;odq=odx*odx+ody*ody;od=sqrt(odq); klx= mx+rr*cos(((dl-kr)*.75+ww+180)*p);kly=sly+rr*sin(((dl-kr)*.75+ww+180)*p); krx= mx+rr*cos(((dr-kr)*.75+ww )*p);kry=sry+rr*sin(((dr-kr)*.75+ww )*p); kux=sux+rr*cos(((du-kr)*.75+ww+270)*p);kuy= my+rr*sin(((du-kr)*.75+ww+270)*p); kox=sox+rr*cos(((od-kr)*.75+ww+ 90)*p);koy= my+rr*sin(((od-kr)*.75+ww+ 90)*p); dlx=x-klx;dly=y-kly;dlq=dlx*dlx+dly*dly;dl=sqrt(dlq); // abstaende scheinbar drx=x-krx;dry=y-kry;drq=drx*drx+dry*dry;dr=sqrt(drq); dux=x-kux;duy=y-kuy;duq=dux*dux+duy*duy;du=sqrt(duq); odx=x-kox;ody=y-koy;odq=odx*odx+ody*ody;od=sqrt(odq); } void krei(void) { // kreise for( cw = -kr; cw < kr+1; cw++ ) { cs=sqrt(kr*kr-cw*cw); for( cz = -cs; cz < cs+1; cz++ ) { SetPixel(hdc,(int)(cw+cx),(int)(cz+cy),RGB(cr,cg,cb)); } } } //------------------------------------------------------------------- LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps ; switch (message) { case WM_SIZE: cxClient = LOWORD (lParam) ; cyClient = HIWORD (lParam) ; return 0 ; case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; //----------------------------------------HAUPTPROGRAMM-------------- s=0;if(s<1){ // nur ein durchlauf; p=atan(1)/45; // winkel zu arcus umrechnungsfaktor; for( ww = 360; ww > 9; ww=ww-10 ) { aa=ww*p; // 36 bilder; for(u=0;u<200;u++){ // bild loeschen for(v=0;v<320;v++){SetPixel(hdc,(int)v,(int)u,RGB(0,0,0));}} slx=200;sly=100;srx=240;sry=100;mx=.5*(slx+srx);rr=.5*(srx-slx);kr=5; sux=100;suy= 80;sox=100;soy=120;my=.5*(suy+soy);gr=400; lx= mx+rr*cos(( ww+180)*p); ly=sly+rr*sin(( ww+180)*p); rx= mx+rr*cos(( ww )*p); ry=sry+rr*sin(( ww )*p); ux=sux+rr*cos(( ww+270)*p); uy= my+rr*sin(( ww+270)*p); ox=sox+rr*cos(( ww+ 90)*p); oy= my+rr*sin(( ww+ 90)*p); for( w = 0; w < 351; w=w+10 ) { a= w*p; // 36 feldlinien in einem bild; x=lx+kr*cos(a);y=ly+kr*sin(a);c=0; // beginn der ersten iterationsschleife; z1040: abst(); // abstaende fl= 1/dlq;flx=fl*dlx/dl;fly=fl*dly/dl; fr=-1/drq;frx=fr*drx/dr;fry=fr*dry/dr; fu= 1/duq;fux=fu*dux/du;fuy=fu*duy/du; fo=-1/odq;fox=fo*odx/od;foy=fo*ody/od; fx=flx+frx+fux+fox;fy=fly+fry+fuy+foy;f=sqrt(fx*fx+fy*fy);ex=fx/f;ey=fy/f; if( ((c<(gr*3))&&(dl(kr+1.5))&&(od>(kr+1.5))) ) { x=x+ex;y=y+ey;if( (x>-1)&&(x<320)&&(y>-1)&&(y<200) ) {SetPixel(hdc,(int)x,(int)y,RGB(255,255,255));} c=c+1;goto z1040; } x=rx+kr*cos(a);y=ry+kr*sin(a);c=0; // beginn der zweiten iterationsschleife; z1140: abst(); // abstaende fl=-1/dlq;flx=fl*dlx/dl;fly=fl*dly/dl; fr= 1/drq;frx=fr*drx/dr;fry=fr*dry/dr; fu=-1/duq;fux=fu*dux/du;fuy=fu*duy/du; fo= 1/odq;fox=fo*odx/od;foy=fo*ody/od; fx=flx+frx+fux+fox;fy=fly+fry+fuy+foy;f=sqrt(fx*fx+fy*fy);ex=fx/f;ey=fy/f; if( ((c<(gr*3))&&(dr(kr+1.5))&&(du>(kr+1.5))) ) { x=x+ex;y=y+ey;if( (x>-1)&&(x<320)&&(y>-1)&&(y<200) ) {SetPixel(hdc,(int)x,(int)y,RGB(255,255,255));} c=c+1;goto z1140; } x=ux+kr*cos(a);y=uy+kr*sin(a);c=0; // beginn der dritten iterationsschleife; z1240: abst(); // abstaende fl= 1/dlq;flx=fl*dlx/dl;fly=fl*dly/dl; fr=-1/drq;frx=fr*drx/dr;fry=fr*dry/dr; fu= 1/duq;fux=fu*dux/du;fuy=fu*duy/du; fo=-1/odq;fox=fo*odx/od;foy=fo*ody/od; fx=flx+frx+fux+fox;fy=fly+fry+fuy+foy;f=sqrt(fx*fx+fy*fy);ex=fx/f;ey=fy/f; if( ((c<(gr*3))&&(du(kr+1.5))&&(od>(kr+1.5))) ) { x=x+ex;y=y+ey;if( (x>-1)&&(x<320)&&(y>-1)&&(y<200) ) {SetPixel(hdc,(int)x,(int)y,RGB(255,255,255));} c=c+1;goto z1240; } x=ox+kr*cos(a);y=oy+kr*sin(a);c=0; // beginn der vierten iterationsschleife; z1340: abst(); // abstaende fl=-1/dlq;flx=fl*dlx/dl;fly=fl*dly/dl; fr= 1/drq;frx=fr*drx/dr;fry=fr*dry/dr; fu=-1/duq;fux=fu*dux/du;fuy=fu*duy/du; fo= 1/odq;fox=fo*odx/od;foy=fo*ody/od; fx=flx+frx+fux+fox;fy=fly+fry+fuy+foy;f=sqrt(fx*fx+fy*fy);ex=fx/f;ey=fy/f; if( ((c<(gr*3))&&(od(kr+1.5))&&(du>(kr+1.5))) ) { x=x+ex;y=y+ey;if( (x>-1)&&(x<320)&&(y>-1)&&(y<200) ) {SetPixel(hdc,(int)x,(int)y,RGB(255,255,255));} c=c+1;goto z1340; } } // next w naechste feldlinie; cx=lx;cy=ly;cr= 0;cg=255;cb=255;krei(); // kreise cx=rx;cy=ry;cr=255;cg= 0;cb=255;krei(); cx=ux;cy=uy;cr= 0;cg=255;cb=255;krei(); cx=ox;cy=oy;cr=255;cg= 0;cb=255;krei(); SelectObject (hdc, GetStockObject (OEM_FIXED_FONT)); gcvt( 37-ww*0.1, 2, t ); TextOut(hdc,500,(int)(37-ww*0.1)*13+2,t,strlen(t)); strcpy( t, "press space bar to continue" ); TextOut(hdc,100,400,t,strlen(t)); while( GetAsyncKeyState(32) == 0 ) { ; } // warten; while( GetAsyncKeyState(32) != 0 ) { ; } strcpy( t, " " ); TextOut(hdc,100,400,t,strlen(t)); strcpy(t,"This program uses only static equations."); TextOut(hdc, 10,230,t,strlen(t)); strcpy(t,"For correct calculations it needs dynamic equations."); TextOut(hdc, 10,260,t,strlen(t)); } // next ww naechstes bild; s=2;} // nur ein durchlauf; //------------------------------------------------------------------- EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY: PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }