/* Photon Model */ /* Compile with g++ phot.cpp -l SDL */ #include #include #include #include #include "veblib.h" #include int main(int argc, char *argv[]) { char c; int waiting = 40; int dummy, half = 1; int x = 400, y = 300, zp, upd = 0, updc = 1; int ox = x, oy = y, amp = 55, blank; int xi = 2, yi = 2, oxi = xi, oyi = yi; float conv, z = 0, zi = .1, ozi = zi; if((SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO)==-1)) { printf("Could not initialize SDL: %s.\n", SDL_GetError()); exit(-1); } conv = amp * .12; blank = (int) conv; SDL_WM_SetCaption("Photon Schematic", "photon.bmp"); SDL_WM_SetIcon(SDL_LoadBMP("photon.bmp"), NULL); dummy = init_screen(); ColorFill(color); SDL_UpdateRect(screen, 0, 0, 800, 600); while(waiting){ x += xi; if(x > 799 || x < 1){ xi *= -1; } y += yi; if(y > 599 || y < 1){ yi *= -1; } z += zi; if(z > 1.5 || z < .1){ zi *= -1; if( z < .1){ if(half == 0){ half = 1; upd ++; if(upd > updc){ SDL_UpdateRect(screen, 0, 0, 800, 600); upd = 0; SDL_Delay(updc); } x = ox + oxi; xi = oxi; zi = ozi; yi = oyi; if(x > 799 || x < 1){ oxi *= -1; xi = oxi; } y = oy + oyi; if(y > 599 || y < 1){ oyi *= -1; yi = oyi; } z = 0; ox = x; oy = y; } else{ half = 0; } } } conv = sin(z) * amp; zp = (int) conv; photon(x, y, zp + blank, 2); photon(x, y, zp, half); //SDL_UpdateRect(screen, 0, 0, 800, 600); c = keystroke(); if(c == 'q') break; switch(c){ case 'd': SDL_Delay(5000); break; case 'a': blank ++; break; case 'b': if(blank + zp > 0) blank --; break; case 'c': amp ++; break; case 'e': amp --; break; case 'x': xi++; oxi = xi; ColorFill(color); break; case 'y': yi++; oyi = yi; ColorFill(color); break; } } SDL_Quit(); exit(0); }