要求:構(gòu)造完整的DDA畫線算法程序
DDA算法:計算機圖形學中基于直線的微分方程來生成直線的算法。
具體步驟:
- 輸入兩個端點,將左端點保存在
中;
- 計算
;
- 根據(jù)m的值,分情況計算:
①![]()
#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;
}