DDA算法画直线
#include "glut.h"
#include <math.h>
void LineDDA(int x1,int y1,int xn,int yn)
{
int dm=0;
if(abs(xn-x1)>abs(yn-y1)) //寻找步长方向
dm=abs(xn-x1);
else
dm=abs(yn-y1);
float dx=(float)(xn-x1)/dm;
float dy=(float)(yn-y1)/dm; //计算
float x=x1+0.5; //四舍五入,避免后面数据有误
float y=y1+0.5;
for(int i=0;i<dm;i++)
{
glBegin(GL_POINTS);
glVertex2f((int) (x)/400.0 , (int) (y)/400.0); //坐标除窗口大小,一定要加.0
glEnd();
x+=dx;
y+=dy;
}
}
void myDisplay(void)
{
glClearColor(0.8, 0.5, 0.5, 0.5); //窗口背景色
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0f, 0.0f, 1.0f);
LineDDA(-300, 90, 300, 90); //写坐标画点
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("Hello World!");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
要熟记DDA算法的原理,怎么去找步长方向。+0.5别忘记