Digital Differential Analyzer (graphics algorithm)
From Wikipedia, the free encyclopedia
| This article needs additional citations for verification. Please help improve this article by adding reliable references. Unsourced material may be challenged and removed. (August 2007) |
This article is about a graphics algorithm. For other uses of DDA, see DDA. For the digital implementation of a Differential Analyzer, see Digital Differential Analyzer.
In Computer graphics, Digital Differential Analyzer (DDA) is an algorithm used to determine which points need to be plotted in order to draw a straight line between two given points. It employs the equation for line representation (example: y=mx+c), then scan through an axis. Each scan it would determine the value on the other axis using the equation, this way the proper pixel can be located.
Contents |
[edit] Overview
The DDA method is not very efficient due to the need for division and rounding. Bresenham's line algorithm is a more efficient method to draw lines because it uses only addition, subtraction and bit shifting.
[edit] The algorithm in code
This is a sample implementation of the DDA algorithm in the C programming language:
/* Draw a straight line between the points (xa, ya) and (xb, yb) */
void line DDA(int xa, int ya, int xb, int yb) {
int dx=xb-xa; // horizontal difference
int dy=yb-ya; // vertical difference
int steps, k;
float xIncrement, yIncrement;
float x=xa, y=ya; // the drawing points x and y are initiated to one endpoint of the line
// calculate the number of steps used to draw the line (number of pixels)
if(abs(dx)>abs(dy))
steps=abs(dx);
else
steps=abs(dy);
// calculate the increment for x and y in each step
xIncrement=dx/(float)steps;
yIncrement=dy/(float)steps;
// point out the starting pixel
setPixel(ROUND(x), ROUND(y));
// loop through the line from one end to the other and point out the pixels
for(k=0; k<steps; k++) {
// the points are incremented an equal amount for every step
x += xIncrement;
y += yIncrement;
// since the values for x and y are float they are rounded before they are plotted
setPixel(ROUND(x), ROUND(y));
}
}
[edit] See also
- Xiaolin Wu's line algorithm is an algorithm for line antialiasing

