计算机图形学实验python——画直线的中点算法

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()

运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值