#include <GL/glut.h>
#include <stdio.h>
#include <cstdlib>
void dda_line(int x1, int y1, int x2, int y2) {
glPointSize(1.0);
glBegin(GL_POINTS);
glVertex2i(x1, y1);
glVertex2i(x2, y2);
// x,y的增量
int dx = x2 - x1;
int dy = y2 - y1;
double dert_x;
double dert_y;
double x, y;
int steps;
// 步长,看x和y哪个大
if (abs(dx) > abs(dy))
steps = abs(dx);
else
steps = abs(dy);
// 根据步长,算x和y的增量
dert_x = (GLdouble)dx / (GLdouble)steps;
dert_y = (GLdouble)dy / (GLdouble)steps;
x = x1;
y = y1;
for (int i = 1; i <= steps; i++) {
x += dert_x;
y += dert_y;
glVertex2f(x, y);
}
glEnd();
}
void myDisplay(void) {
glClear(GL_COLOR_BUFFER_BIT);
dda_line(250, 250, 350, 450);
glFlush();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(500, 200);
glutInitWindowSize(500, 500);
glutCreateWindow("DDA");
gluOrtho2D(0.0, 500.0, 0.0, 500.0);
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
12-28