//----------------------------------------------------------------------------- // Fraktaly v pocitacove grafice // Ukazkovy priklad cislo 48.2 // Autor: Pavel Tisnovsky // // Pouziti spektralni syntezy pro vytvoreni jednorozmerne stochasticke krivky // s fraktalni charakteristikou. Pomoci klaves [A] a [S] je mozne menit pocet // koeficientu Fourierovy transformace, klavesy [Z] a [X] slouzi k urceni // Hurstova koeficientu a tim i fraktalni dimenze vytvorene krivky. // Ukonceni aplikace se provede klavesou [Esc] nebo klavesou [Q]. //----------------------------------------------------------------------------- #ifdef __BORLANDC__ #include #endif #include // hlavickovy soubor funkci GLUTu a OpenGL #include #include #include #include #include #define WINDOW_TITLE "Fraktaly 48.2" // titulek okna #define WINDOW_WIDTH 640 // pocatecni velikost okna #define WINDOW_HEIGHT 480 int width, height; // velikost okna float h=0.5; // Hurstuv exponent int n=10; // pocet koeficientu spektralni syntezy //----------------------------------------------------------------------------- // Vygenerovani nahodneho cisla v rozsahu 0..1 s pribliznym Gaussovym rozlozenim //----------------------------------------------------------------------------- float randomGauss(void) { #define N 50 float sum=0.0; int i; for (i=0; i='A' && key<='Z') key+='a'-'A'; switch (key) { case 'q': case 27: exit(0); break;// pokud byla stlacena klavesa ESC, konec programu case 'a': if (n>3) n-=2; glutPostRedisplay(); break; case 's': if (n<50) n+=2; glutPostRedisplay(); break; case 'z': if (h>0.1) h-=0.1; glutPostRedisplay(); break; case 'x': if (h<1.0) h+=0.1; 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 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); 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 volane pri stlaceni klavesy onInit(); // inicializace vykreslovani glutMainLoop(); // nekonecna smycka, kde se volaji zaregistrovane funkce return 0; // navratova hodnota vracena operacnimu systemu } //----------------------------------------------------------------------------- // finito //-----------------------------------------------------------------------------