OpenGL DDA画线算法

要求:构造完整的DDA画线算法程序

DDA算法:计算机图形学中基于直线的微分方程来生成直线的算法。

具体步骤:

  1. 输入两个端点,将左端点保存在(x_L,y_L)中;
  2. 计算m=(y_R-x_L)/(x_R-x_L)
  3. 根据m的值,分情况计算:
    |m|<1
#include <iostream>
#include <windows.h>
#include <GL/glut.h>

using namespace std;

GLint x1,y1,x2,y2;

void drawLine(GLint x1,GLint y1,GLint x2,GLint y2)
{
    float m = 1.0*(y2-y1)/(x2-x1);
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POINTS);
    float x,y;
    if (m>=-1 || m<=1)
        for(x=x1,y=y1;x<=x2;x++,y+=m)
            glVertex2f(x,y);
    else if (m>1) {
        m=1/m;
        for(x=x1,y=y1;y<=y2;x+=m,y++)
            glVertex2f(x,y);
    } else {
        m=1/m;
        for(x=x1,y=y1;y<=y2;x-=m,y++)
            glVertex2f(x,y);
    }
    glEnd();
    glFlush();
}

void display(void)
{
    glClearColor(1,1,1,1);
    glColor3f(1,0,0);
    gluOrtho2D(0,400,0,300);
    glClear(GL_COLOR_BUFFER_BIT);
    drawLine(x1,y1,x2,y2);
}

int main()
{
    glutInitWindowSize(400, 300);
    glutCreateWindow("DDA Algorithm");
    cout<<"请输入起点(x1,y1)和终点(x2,y2)的坐标:\n"<<"(0<x<400,0<y<300)"<<endl;
    cin>>x1>>y1>>x2>>y2;
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 基于学生学习共同体培育语文生态课堂文化的研究 近年来,随着现代教育理念的不断深入与...
    火车头123阅读 2,281评论 0 8
  • 归去来兮。 1.1 说明 本篇为《挑战程序设计竞赛(第2版)》[http://www.ituring.com.cn...
    尤汐Yogy阅读 14,897评论 0 160
  • 1. 矢量减法 设二维矢量 P = (x1,y1) ,Q = (x2,y2) 则矢量减法定义为: P - Q = ...
    潭潭_180阅读 2,391评论 0 1
  • 不倒嗡嗡 2016年10月10日,在圣地亚哥召开的美国计算力学等几何分析会议上,受等几何分析的创始人Tom Hug...
    技术汪阅读 2,696评论 0 1
  • 今天晚上吃完饭,女儿对我说,妈妈,我们今天先不背古诗了,我们阅读吧?我说可以。然后她就去学习桌上拿了一本《一...
    韩家琪妈妈阅读 165评论 0 0

友情链接更多精彩内容