In any 2-Dimensional plane if we connect two points (x0, y0) and (x1, y1), we get a line segment. But in the case of computer graphics we can not directly join any two coordinate points, for that we should calculate intermediate point’s coordinate and put a pixel for each intermediate point, of the desired color with help of functions like putpixel(x, y, K) in C, where (x,y) is our co-ordinate and K denotes some color.

Examples:

Input: For line segment between (2, 2) and (6, 6) : we need (3, 3) (4, 4) and (5, 5) as our intermediate points. Input: For line segment between (0, 2) and (0, 6) : we need (0, 3) (0, 4) and (0, 5) as our intermediate points.

For using graphics functions, our system output screen is treated as a coordinate system where the coordinate of the top-left corner is (0, 0) and as we move down our y-ordinate increases and as we move right our x-ordinate increases for any point (x, y).

Now, for generating any line segment we need intermediate points and for calculating them we have can use a basic algorithm called DDA(Digital differential analyzer) line generating algorithm.

**DDA Algorithm:**

Consider one point of the line as (X0,Y0) and the second point of the line as (X1,Y1).

// calculate dx , dy dx = X1 - X0; dy = Y1 - Y0; // Depending upon absolute value of dx & dy // choose number of steps to put pixel as // steps = abs(dx) > abs(dy) ? abs(dx) : abs(dy) steps = abs(dx) > abs(dy) ? abs(dx) : abs(dy); // calculate increment in x & y for each steps Xinc = dx / (float) steps; Yinc = dy / (float) steps; // Put pixel for each step X = X0; Y = Y0; for (int i = 0; i <= steps; i++) { putpixel (X,Y,WHITE); X += Xinc; Y += Yinc; }

`// C program for DDA line generation ` `#include<stdio.h> ` `#include<graphics.h> ` ` ` `//Function for finding absolute value ` `int` `abs` `(` `int` `n) ` `{ ` ` ` `return` `( (n>0) ? n : ( n * (-1))); ` `} ` ` ` `//DDA Function for line generation ` `void` `DDA(` `int` `X0, ` `int` `Y0, ` `int` `X1, ` `int` `Y1) ` `{ ` ` ` `// calculate dx & dy ` ` ` `int` `dx = X1 - X0; ` ` ` `int` `dy = Y1 - Y0; ` ` ` ` ` `// calculate steps required for generating pixels ` ` ` `int` `steps = ` `abs` `(dx) > ` `abs` `(dy) ? ` `abs` `(dx) : ` `abs` `(dy); ` ` ` ` ` `// calculate increment in x & y for each steps ` ` ` `float` `Xinc = dx / (` `float` `) steps; ` ` ` `float` `Yinc = dy / (` `float` `) steps; ` ` ` ` ` `// Put pixel for each step ` ` ` `float` `X = X0; ` ` ` `float` `Y = Y0; ` ` ` `for` `(` `int` `i = 0; i <= steps; i++) ` ` ` `{ ` ` ` `putpixel (X,Y,RED); ` `// put pixel at (X,Y) ` ` ` `X += Xinc; ` `// increment in x at each step ` ` ` `Y += Yinc; ` `// increment in y at each step ` ` ` `delay(100); ` `// for visualization of line- ` ` ` `// generation step by step ` ` ` `} ` `} ` ` ` `// Driver program ` `int` `main() ` `{ ` ` ` `int` `gd = DETECT, gm; ` ` ` ` ` `// Initialize graphics function ` ` ` `initgraph (&gd, &gm, ` `""` `); ` ` ` ` ` `int` `X0 = 2, Y0 = 2, X1 = 14, Y1 = 16; ` ` ` `DDA(2, 2, 14, 16); ` ` ` `return` `0; ` `} ` |

Output:

Bresenham’s Line Generation Algorithm

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

## leave a comment

## 0 Comments