DDA_为微分绘制直线算法
以步进坐标轴部长=1像素为单位,计算y=kx + b,绘制像素点(x, round(y)).
即步进坐标增长1, 另一坐标增长K或者1/k。
程序如下:
1 //数值微分算法DDA 2 void CCGProjectWorkView::DDA_Line(const int startPos[], const int endPos[], const float lineColor[]) 3 { 4 glPushMatrix(); 5 //绘制直线 6 long deltX, deltY, maxStep; 7 deltX = endPos[0] - startPos[0]; 8 deltY = endPos[1] - startPos[1]; 9 maxStep = max(abs(deltX), abs(deltY)); 10 //计算方向有向步进单位,即两个方向的斜率增长单位 11 float xStepUnion = float(deltX) / maxStep; 12 float yStepUnion = float(deltY) / maxStep; 13 14 glColor3f(lineColor[0], lineColor[1], lineColor[2]); 15 glBegin(GL_POINTS); 16 17 float x,y;//绘制的坐标点 18 x = (float)startPos[0]; 19 y = (float)startPos[1]; 20 21 //对两个方向循环步进处理 22 for (long i=1; i<=maxStep; i++) 23 { 24 x = x + xStepUnion; 25 y = y + yStepUnion; 26 glVertex3f((int)x, (int)y, 0); 27 } 28 glEnd(); 29 glPopMatrix(); 30 }