DDA Algorithm

Download as pdf or txt
Download as pdf or txt
You are on page 1of 3

DDA Algorithm

DDA stands for Digital Differential Analyzer. It is an incremental method of scan


conversion of line. In this method calculation is performed at each step but by using
results of previous steps.

Advantage:
1) It is a faster method than method of using direct use of line equation.
2) This method does not use multiplication theorem.
3) It allows us to detect the change in the value of x and y, so plotting of same
point twice is not possible.
4) This method gives overflow indication when a point is repositioned.
5) It is an easy method because each step involves just two additions.

Disadvantage:
1) It involves floating point additions rounding off is done. Accumulations of
round off error cause accumulation of error.
2) Rounding off operations and floating point operations consumes a lot of
time.
3) It is more suitable for generating line using the software. But it is less suited
for hardware implementation.

Algorithm Steps
Step1: Start Algorithm
Step2: Declare x1, y1, x2, y2, dx, dy, x,y as integer variables.
Step3: Enter value of x1,y1,x2,y2.
Step4: Calculate dx = x2-x1
Step5: Calculate dy = y2-y1
Step6: If ABS (dx) > ABS (dy)
Then step = abs (dx)
Else
Step7: xinc=dx/step
yinc=dy/step
assign x = x1
assign y = y1
Step8: Set pixel (x, y)
Step9: x = x + xinc
y = y + yinc
Set pixels (Round (x), Round (y))
Step10: Repeat step 9 until x = x2
Step11: End Algorithm
 Example: If a line is drawn from (2, 3) to (6, 15) with use of DDA. How
many points will needed to generate such line?

Program to implement DDA Line Drawing Algorithm:


#include<graphics.h>

#include<conio.h>

#include<stdio.h>

void main()

intgd = DETECT ,gm, i;

float x, y,dx,dy,steps;

int x0, x1, y0, y1;

initgraph(&gd, &gm, "C:\\TC\\BGI");

setbkcolor(WHITE);

x0 = 100 , y0 = 200, x1 = 500, y1 = 300;

dx = (float)(x1 - x0);

dy = (float)(y1 - y0);

if(dx>=dy)

{
steps = dx;

else

steps = dy;

dx = dx/steps;

dy = dy/steps;

x = x0;

y = y0;

i = 1;

while(i<= steps)

putpixel(x, y, RED);

x += dx;

y += dy;

i=i+1;

getch();

closegraph();

You might also like