//----------------------------------------------------------------------------- // Fraktaly v pocitacove grafice // Ukazkovy priklad cislo 5.1 // Autor: Pavel Tisnovsky // // Program po svem spusteni otevre hlavni okno a vykresli do nej logistickou // funkci. Ovladani aplikace pomoci klavesnice je popsano v pate casti // serialu o fraktalech pouzivanych v pocitacove grafice. //----------------------------------------------------------------------------- #ifdef __BORLANDC__ #include #endif #include // hlavickovy soubor funkci GLUTu a OpenGL #include #include #include #include #define WINDOW_TITLE "Fraktaly 5.1" // titulek okna #define WINDOW_WIDTH 512 // pocatecni velikost okna #define WINDOW_HEIGHT 384 double x0=0.7; // uroven populace v nultem kroku int yp=0; // posun diagramu nahoru ci dolu double gr0=1.0; // posun populacniho rustu //----------------------------------------------------------------------------- // Prekresleni logisticke funkce //----------------------------------------------------------------------------- void recalcLogistic(double x0, double gr0, int yp) { int i; double gr=gr0; // hodnota velikosti rustu double x=x0, y; // pocatecni hodnota x0 glColor3f(1.0f, 1.0f, 1.0f); glBegin(GL_LINE_STRIP); // zacatek vykreslovani lomene cary for (i=8; i='A' && key<='Z') ? key-'A'+'a': key; switch (key) { case 27: // pokud byla stlacena klavesa ESC, konec programu case 'q': exit(0); break; // totez co klavesa ESC case 'l': gr0-=0.05; glutPostRedisplay(); break; // zmena parametru gr0 case 'h': gr0+=0.05; glutPostRedisplay(); break; case 'j': yp-=5; glutPostRedisplay(); break; // zmena parametru x0 case 'k': yp+=5; glutPostRedisplay(); break; case '1': if (x0>0.1) x0-=0.01; glutPostRedisplay(); break; // zmena parametru x0 case '2': if (x0<0.9) x0+=0.01; glutPostRedisplay(); break; default: break; } } #ifdef __BORLANDC__ #pragma option -w+par #endif //----------------------------------------------------------------------------- // Hlavni funkce konzolove aplikace //----------------------------------------------------------------------------- int main(int argc, char **argv) { glutInit(&argc, argv); // inicializace knihovny GLUT glutCreateWindow(WINDOW_TITLE); // vytvoreni okna pro kresleni glutReshapeWindow(WINDOW_WIDTH, WINDOW_HEIGHT);// zmena velikosti okna glutPositionWindow(100, 100); // pozice leveho horniho rohu okna glutDisplayFunc(onDisplay); // registrace funkce volane pri prekreslovani okna glutReshapeFunc(onResize); // registrace funkce volane pri zmene velikosti okna glutKeyboardFunc(onKeyboard); // registrace funkce volani pri stlaceni klavesy onInit(); // inicializace vykreslovani glutMainLoop(); // nekonecna smycka, kde se volaji zaregistrovane funkce return 0; // navratova hodnota vracena operacnimu systemu } //----------------------------------------------------------------------------- // finito //-----------------------------------------------------------------------------