只是实现了算法的思想,因为不会用OpenGL画像素点,无奈只能用大大的点来代替像素。其实用自带的turtle完全可以实现相同效果。
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
def DDA(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
maxxy = max(abs(dx),abs(dy))
stepx = dx / maxxy #步长
stepy = dy / maxxy
glBegin(GL_POINTS)
for i in range(maxxy + 1):
x = x1 + stepx * i
y = y1 + stepy * i
ix = sswr(x)
iy = sswr(y)
glVertex2i(ix,iy)
glEnd()
#对比的线
glBegin(GL_LINES)
glVertex2i(x1, y1)
glVertex2i(x2, y2)
glEnd()
glFlush()
def sswr(x): #四舍五入
if x >= 0:
return int(x+0.5)
else:
return int(x-0.5)
def Display():
glColor3f(1.0, 0.0, 0.0)
glPointSize(5)
#glEnable(GL_POINT_SMOOTH)
DDA(-25,30,20,-25)
def main():
glutInit()
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
glutInitWindowSize(400, 400)
glutCreateWindow("DDA")
gluOrtho2D(-40,4