OpenGL中点画圆算法

设计一个函数,在OpenGL环境下使用中点画圆算法(1/8画圆算法)完成画圆程序。画圆函数的参数包括:圆心位置、圆半径和圆弧的颜色(RGB)


from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *

def midpoint_circle(x_center, y_center, radius, color):
    x = 0
    y = radius
    d = 1 - radius
    glColor3f(*color)  # 设置圆弧的颜色
    glBegin(GL_POINTS)
    glVertex2i(x_center, y_center + radius)
    glVertex2i(x_center, y_center - radius)
    glVertex2i(x_center + radius, y_center)
    glVertex2i(x_center - radius, y_center)
    while x < y:
        if d < 0:
            d += 2 * x + 3
        else:
            d += 2 * (x - y) + 5
            y -= 1
        x += 1
        glVertex2i(x_center + x, y_center + y)
        glVertex2i(x_center - x, y_center + y)
        glVertex2i(x_center + x, y_center - y)
        glVertex2i(x_center - x, y_center - y)
        glVertex2i(x_center + y, y_center + x)
        glVertex2i(x_center - y, y_center + x)
        glVertex2i(x_center + y, y_center - x)
        glVertex2i(x_center - y, y_center - x)
    glEnd()

# 绘制圆弧的回调函数
def draw():
    glClear(GL_COLOR_BUFFER_BIT)
    midpoint_circle(0, 0, 50, (1, 0, 0))  # 绘制圆心位置为(0, 0),半径为50,颜色为红色的圆弧
    glFlush()

# 初始化窗口
def init():
    glClearColor(0.0, 0.0, 0.0, 0.0)
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluOrtho2D(-100.0, 100.0, -100.0, 100.0)

# 创建窗口
glutInit()
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutInitWindowSize(400, 400)
glutCreateWindow(b'Midpoint Circle Algorithm')
glutDisplayFunc(draw)
init()
glutMainLoop()