#!/usr/bin/env python from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * v = ((-1, -.58), (1, -.58), (0, 1.15)) def mid(a,b): return ((a[0]+b[0])*.5, (a[1]+b[1])*.5) def divide_triangle(a,b,c,m): if m > 0: v0 = mid(a,b) v1 = mid(a,c) v2 = mid(b,c) divide_triangle(a, v0, v1, m-1) divide_triangle(c, v1, v2, m-1) divide_triangle(b, v2, v0, m-1) else: glVertexPointerf( [a,b,c] ) glDrawArrays( GL_TRIANGLES, 0, 3 ) def init(): glMatrixMode(GL_PROJECTION) glLoadIdentity() s = 1.2 gluOrtho2D(-s,s,-s,s) glMatrixMode(GL_MODELVIEW) glClearColor(1,1,1,1) # white background glColor3f(0,0,0) # draw in black glEnableClientState( GL_VERTEX_ARRAY ) def display(): glClear(GL_COLOR_BUFFER_BIT) divide_triangle(v[0], v[1], v[2], n) glFlush() if __name__ == '__main__': import sys, string try: n = string.atoi(sys.argv[1]) except: n = 5 glutInit([]) glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB) glutInitWindowSize(700,700) glutCreateWindow('Sierpinski gasket -- Recursive') glutDisplayFunc(display) init() glutMainLoop()