Drawing Straight Line using DDA Algorithm in C/C++

The digital differentia analyzer (DDA) is a scan-conversion line algorithm. In this algorithm, we sample the line at unit intervals in one coordinate and determine corresponding integer values nearest the line path of the other coordinate and plot those coordinate (pixel) in computer screen. Consider first a line with positive slope. If the slope is less than or equal to 1, we sample at unit x intervals (dx = 1) and computer each successive y value as y(k+1) = y(k) + m. Subscript k takes integer values starting from 1, for the first point, and increases by 1 until the final endpoint is reached. For lines with a positive slope greater than 1, we reverse the roles of x and y.That is, we sample at unit y intervals (dy = 1) and calculate each succeeding x value as x(k+1) = x(k) + (1/m)

The following section implements DDA Algorithm in C/C++. The source code is complied using gcc Compiler and Code::Blocks IDE. To print a pixel, SetPixel() function of windows.h is used.

Note

To run this code in your machine with Code::blocks IDE, add a link library libgdi32.a (it is usually inside MinGWlib )  in linker setting and make the file extension .cpp but not .c. For C user, here is a link to download C file of this tutorial. Download

The output of this program is looks like DDA algorithm is faster than the direct use of equation y = mx + c however, the rounding operations and floating-point arithmetic makes it still time consuming. To overcome this limitation of DDA Algorithm, Bresenham discovered Bresenham’s Line Drawing Algorithm.

SHARE Drawing Straight Line using DDA Algorithm in C/C++

10 Responses

1. Mi Blog de prueba says:

I tried to compile this using CodeBlocks 10.5, but failed to do so, can you give any hints on how to compile this? thanks for this great tutorials!

2. Bibek123 says:

@Mi Blog de prueba, the problem can be solved by adding a link library libgdi32.a (it is usually inside MinGWlib ) in linker setting. Hope this will remove your problem.

3. Mi Blog de prueba says:

Hey Bibek123, I still can't get it running,"cmath: No such file or directory|"

and cant seem to find the way to run the Setpixel method, can you give some kind of brief tutorial whenever you have some spare time? thank you so much for what you're doing.

4. Bibek123 says:

cmath is for .cpp file, its c++ header file actually. If you use C then change it to math.h

5. Mi Blog de prueba says:

I see what my problem was, I was trying to compile using C, not C++, now I finally got it running Bibek123

You see, I'm taking this class called "Graphing" and the teacher wants us to generate this same Line using the DDA algorithm, but for some reason, she wants us to compile it using C,not c++, I asked her what library should I use to compile it on C, and she hasn't given me a straight answer (I don't think she even knows) so my question is, is there someway to run this same code but using C instead of C++? even possible to run it on CodeBlocks?

thank you very much Bibek, that algorithm is amazing!

6. Bibek123 says:

Yes there is a way so that you can run the same code in C but not in C++ with little modification. I have updated my article and included a link to download the C version of my code. Plz download the C version of the code and run it and I am 100% sure that this time you won't get any error.

And thank u very very much for keeping interest in my blog article. If you have any problem in programming, then feel free to ask me.

7. Mi Blog de prueba says:

8. Anonymous says:

Do you know how to convert this with C++?

9. Anonymous says:

how to develop different styles of lines using DDA??

10. Areeba Saleem says:

how i can implement y=mx+c on code block kindly help me 