from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
def zhongdian(x1, y1, x2, y2):
dx = abs(x2 - x1)
dy = abs(y2 - y1)
maxxy = max(abs(dx),abs(dy))
glBegin(GL_POINTS)
ix = x1
iy = y1
if abs(dy / dx) <= 1: #斜率[-1,1]
d = dx - 2 * dy
if (y2 - y1) / (x2 - x1) < 0: #斜率小于0
iy = -y1
for i in range(maxxy + 1):
glVertex2i(ix, -iy)
d, ix, iy = di(dx, dy, d, ix, iy)
else:
for i in range(maxxy + 1):
glVertex2i(ix, iy)
d, ix, iy = di(dx, dy, d, ix, iy)
else: #斜率大于1或小于-1
d = dy - 2 * dx
if (y2 - y1) / (x2 - x1) < 0:
iy = - y1
for i in range(maxxy + 1):
glVertex2i(ix, iy)
d, iy, ix = di(dy, dx, d, iy, ix)
else:
for i in range(maxxy + 1):
glVertex2i(ix, iy)
d, iy, ix = di(dy, dx, d, iy, ix)
glEnd()
glFlush()
def di(dx,dy,d,x,y): #递推di+1
if d > 0:
return d - 2 * dy, x + 1, y
else:
return d - 2 * (dy - dx), x + 1, y + 1
def Display():
glColor3f(1.0, 0.0, 0.0)
glPointSize(6)
glEnable(GL_POINT_SMOOTH)
zhongdian(-20,20,40,-20)
def main():
glutInit()
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
glutInitWindowSize(600, 600)
glutCreateWindow("zhongdian")
gluOrtho2D(-50,50,-50,50)
glClearColor(1.0,1.0,1.0,0)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glutDisplayFunc(Display)
glutMainLoop()
main()
运行结果