#if !defined(Linux) #include //Not Linux must be windows #endif #include #include #include #include #define RANDOM(M) ((float)rand()/RAND_MAX*(M)); /* Author: Brian J. Ross November 2015 Draw Sierpinski Triangles using IFS algorithm. */ void drawtri(void) { int i, j; float r; glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); for (i=0; i < 100000; i++) { glLoadIdentity(); for (j = 0; j < 10; j++) { r = (float)rand()/RAND_MAX; if (r < 0.33) { glTranslatef(-40.0, -40.0, 0.0); glScalef(0.5, 0.5, 1.0); } else if (r < 0.67) { glTranslatef(40.0, -40.0, 0.0); glScalef(0.5, 0.5, 1.0); } else { glTranslatef(0.0, 40.0, 0.0); glScalef(0.5, 0.5, 1.0); }; }; // j glBegin(GL_POINTS); glVertex2d((float)rand()/RAND_MAX*(600.0)-300.0, (float)rand()/RAND_MAX*(600.0)-300.0); glEnd(); }; // i glFlush(); } main(int argc, char **argv) { glutInit(&argc, argv); glutInitWindowSize(600, 600); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutCreateWindow("Sierpinski Triangles"); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-100.0, 100.0, -100.0, 100.0); glMatrixMode(GL_MODELVIEW); glClearColor(0.0, 0.0, 0.0, 1.0); /* black */ glutDisplayFunc(drawtri); glutMainLoop(); return 0; }