DDA_为微分绘制直线算法

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 }
原文地址:https://www.cnblogs.com/icmzn/p/5045283.html