from OpenGL.GL import * from OpenGL.GLUT import * import math WIDTH, HEIGHT = 2,2 def draw_points(x, y): glPointSize(2.0) glBegin(GL_POINTS) glVertex2f(x, y) glEnd() def midpointCircle(x0, y0, r): d = 1 - r / WIDTH x = 0 y = r while x < y: draw_points((x + x0) / WIDTH, (y + y0) / HEIGHT) draw_points((y + x0) / WIDTH, (x + y0) / HEIGHT) draw_points((-x + x0) / WIDTH, (-y + y0) / HEIGHT) draw_points((-y + x0) / WIDTH, (-x + y0) / HEIGHT) draw_points((-x + x0) / WIDTH, (y + y0) / HEIGHT) draw_points((y + x0) / WIDTH, (-x + y0) / HEIGHT) draw_points((x + x0) / WIDTH, (-y + y0) / HEIGHT) draw_points((-y + x0) / WIDTH, (x + y0) / HEIGHT) if d < 0: d += 2 * x + 3 else: d += 2 * x - 2 * y + 5 y -= 1 x += 1 def draw_circles(x0, y0, r, num): midpointCircle(x0, y0, r) num2 = math.pi * 2 / num for a in range(1,num): midpointCircle(x0 + (r / 2) * math.cos(a * num2), y0 + (r / 2) * math.sin(a * num2), r / 2) def iterate(): glViewport(0, 0, 500, 500) glMatrixMode(GL_PROJECTION) glLoadIdentity() glOrtho(0.0, 500, 0.0, 500, 0.0, 1.0) glMatrixMode(GL_MODELVIEW) glLoadIdentity() def showScreen(): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glLoadIdentity() iterate() glColor3f(1.0, 1.0, 1.0) draw_circles(X_CO, Y_CO, R, num) glutSwapBuffers() num = 9 X_CO = 500 Y_CO = 500 R = 400 glutInit() glutInitDisplayMode(GLUT_RGBA) glutInitWindowSize(500, 500) #window size glutInitWindowPosition(0, 0) wind = glutCreateWindow(b"OpenGL Coding Practice") #window name glutDisplayFunc(showScreen) glutMainLoop()