Sem 4‎ > ‎CG LAB‎ > ‎0 Algorithms‎ > ‎

### 1 DDA Line Algo

posted Jan 7, 2012, 9:48 PM by Neil Mathew   [ updated Jan 8, 2012, 3:01 AM ] ( DDA uses repeated addition )( Use of floating point operations makes it slightly slower than Bresenham's Algo )Explanation:The program should make use of basic concept of DDA’s line generation algorithm.The DDA is a scan conversion line algorithm based on calculating Dy and Dx. We sample the line at unit intervals in one co-ordinate and determine corresponding integer values nearest the line path for the other co-ordinate.1. We will consider a line with positive slope. >>If the slope is less than or equal to 1,we sample it at unit x intervals (Dx = 1) and compute each successive y value as yk+1 = yk + m(Subscript k takes integer values starting from 1 for the first point and increases by 1 until the final end point is reached. The value of m can be any real number between 0 and 1.2)>>For lines with positive slope greater than 1, we reverse the roles of x and y. We sample at unit y intervals and calculate each succeeding x value as xk+1= xk + 1/m>> For the above equation we are processing the line equation from the left end point to right end point. If this processing is reversed , (negative Slope) so either we haveDx = -1 and  yk+1 = yk - m  Or Dy = -1 and xk+1= xk - 1/mProgram:#define ROUND(a) ((int)(a+0.5))Void lineDDA (int xa , int ya , int xb , int yb){int dx = xb – xa;                       //Calculate Dy Dx (neg value possible)int dy = yb – ya;int steps , k ;float xincr, yincr;int x = xa, y = ya;                     //Print First pixel as initial pixelSetpixel(ROUND(x),ROUND(y));If(abs(dx) > abs(dy))                 //Steps = greater of Dx and Dy (abs values)steps = abs(dx);xincr = dx / (float) steps;           //Increment = (-)1 or [ (-) m (for y) or (-)1/m (for x) ]yincr = dy / (float) steps;           // Implemented how: dx / dx = 1 or dy/dx = mFor(k=0; k