#include #include #define febr 800 // BREITE #define feho 600 // HOEHE //---------------------VARIABLEN------------------------------------- int bx, by, // BILD X Y s, // SCHALTER rf, gf, bf; // FARBEN double px, py, // POSITION X Y vx, vy, // GESCHWINDIGKEIT X Y ax, ay, // BESCHLEUNIGUNG X Y r, // ABSTAND g, // GRAVITATION hx, hy, // HILFS X Y zx, zy, // ZEICHEN X Y a, // WINKEL z, // ZAEHLER er, // R ERDE sr, // R SYNCHRON gm; // GM ERDE //------------------------------------------------------------------- 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 bahn(void){ // UMLAUFBAHN s = 0; // SCHALTER hupf: // WIEDERHOLEN a = z * 8 * atan( 1 ) / 86164.0905; // STERNSEKUNDEN hx = px; hy = py; // HILFS X Y zx = hx * cos( a ) - hy * sin( a ); // DREHEN zy = hx * sin( a ) + hy * cos( a ); z = z + 1 ; // ZAEHLER bx = (int)floor(0.5+125+px*0.000015); // BILD ZEICHNEN by = (int)floor(0.5+250+py*0.000015); if(bx< 0){goto nein;} // AUSSERHALB if(bx>799){goto nein;} if(by< 0){goto nein;} if(by>599){goto nein;} SetPixel( hdc, bx, by, RGB( rf, gf, bf ) ); nein: ; bx = (int)floor(0.5+125+zx*0.000015); // BILD GEDREHT by = (int)floor(0.5+250+zy*0.000015); if(bx< 0){goto neyn;} // AUSSERHALB if(bx>799){goto neyn;} if(by< 0){goto neyn;} if(by>599){goto neyn;} SetPixel( hdc, bx, by, RGB( rf, gf, bf ) ); neyn: ; r = sqrt(px*px+py*py); // ABSTAND g = -gm/(r*r); // GRAVITATION ax = g*px/r; ay = g*py/r; // KOMPONENTEN X Y vx = vx+ax; vy = vy+ay; // GESCHWINDIGKEIT X Y px = px+vx; py = py+vy; // POSITION X Y if(r< (er-5000)){goto ausi;} // KOLLISION if(r>10000000000){goto ausi;} // FLUCHT if(py> 0){s=1;} // UNTERE HAELFTE if(s < 1){goto hupf;} // OBERE HAELFTE if(py> 0){goto hupf;} // UNTERE HAELFTE ausi: ; } //------------------------------------------------------------------- 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-------------- gm = 3.986004418e14; // GM ERDE er = 6378160; // R ERDE sr = 42164172; // R SYNCHRON rf = 0; gf = 127; bf = 255; z = 0; // BLAU ERDE px = er ; py = 0; vx = 0; vy = -sqrt(gm/er); bahn(); rf = 0; gf = 255; bf = 0; z = 0; // GRUEN SYNCHRON px = sr ; py = 0; vx = 0; vy = -sqrt(gm/sr); bahn(); rf = 255; gf = 0; bf = 255; z = 0; // VIOLETT STURZ px = sr ; py = 0; vx = 0; vy = 0; bahn(); rf = 127; gf = 127; bf = 0; z = 0; // GELB HOHMANN px = sr ; py = 0; vx = 0; vy = -sqrt(gm/sr) * 0.5124; bahn(); rf = 0; gf = 0; bf = 0; z = 0; // SCHWARZ GEOFALL px = sr ; py = 0; vx = 0; vy = -sqrt(gm/sr) * 0.31; bahn(); //------------------------------------------------------------------- EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY: PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }