OpenGL DDA畫線算法

要求:構(gòu)造完整的DDA畫線算法程序

DDA算法:計算機圖形學中基于直線的微分方程來生成直線的算法。

具體步驟:

  1. 輸入兩個端點,將左端點保存在(x_L,y_L)中;
  2. 計算m=(y_R-x_L)/(x_R-x_L);
  3. 根據(jù)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;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基于學生學習共同體培育語文生態(tài)課堂文化的研究 近年來,隨著現(xiàn)代教育理念的不斷深入與...
    火車頭123閱讀 2,281評論 0 8
  • 歸去來兮。 1.1 說明 本篇為《挑戰(zhàn)程序設(shè)計競賽(第2版)》[http://www.ituring.com.cn...
    尤汐Yogy閱讀 14,897評論 0 160
  • 1. 矢量減法 設(shè)二維矢量 P = (x1,y1) ,Q = (x2,y2) 則矢量減法定義為: P - Q = ...
    潭潭_180閱讀 2,391評論 0 1
  • 不倒嗡嗡 2016年10月10日,在圣地亞哥召開的美國計算力學等幾何分析會議上,受等幾何分析的創(chuàng)始人Tom Hug...
    技術(shù)汪閱讀 2,701評論 0 1
  • 今天晚上吃完飯,女兒對我說,媽媽,我們今天先不背古詩了,我們閱讀吧?我說可以。然后她就去學習桌上拿了一本《一...
    韓家琪媽媽閱讀 165評論 0 0

友情鏈接更多精彩內(nèi)容