import sys, random from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * seed = 1 if len(sys.argv) > 1: seed = int(sys.argv[1]) def generatePoints(level): random.seed(seed) numPoints = 2**level + 1 p = [0] * numPoints displacement = 1.0 for l in range(level-1, -1, -1): step = 2**l for i in range(step, numPoints, step*2): p[i] = (p[i-step] + p[i+step])/2.0 + random.gauss(0.0, displacement) displacement /= 2.5 return p level = 0 def draw(): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluOrtho2D(-0.5, 1.5, -2.0, 2.0) glMatrixMode(GL_MODELVIEW) glLoadIdentity() points = generatePoints(level) glBegin(GL_LINE_STRIP) i = 0 for p in points: glVertex2f(i/(len(points)-1.0), p) i += 1 glEnd() glutSwapBuffers() def keyboard(key, x, y): global level if key == chr(27): sys.exit(0) elif key == '+': level += 1 elif key == '-' and level > 0: level -= 1 glutPostRedisplay() glutInit([]) glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH) glutInitWindowSize(400,400) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutMainLoop()