Write a program to draw a line using DDA algorithm in any quadrant.
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
#include<dos.h>
void main()
{
clrscr();
intgd = DETECT, gm;
detectgraph(&gd, &gm);
initgraph(&gd, &gm, "");
int x1,x2,y1,y2,xd,yd;
xd=getmaxx();
yd=getmaxy();
line(xd/2,0,xd/2,yd);
line(0,yd/2,xd,yd/2);
printf("enter x1, y1\n");
scanf("%d %d",&x1,&y1);
printf("enter x2, y2\n");
scanf("%d %d",&x2,&y2);
intdx,dy,steps;
dx=abs(x2-x1);
dy=abs(y2-y1);
if(dx>dy)
{
steps=dx;
}
else
{
steps=dy;
}
float xi,yi,x,y;
xi=dx/float(steps);
yi=dy/float(steps);
int mx=xd/2,my=yd/2;
// 1st quadrant
if(x1>0 && y1>0)
{
if(x2>0 && y2>0)
{
if(x2<x1)
xi=-xi;
if(y2<y1)
yi=-yi;
}
if(x2<0 && y2>0)
{
xi=-xi;
if(y2<y1)
yi=-yi;
}
if(x2<0 && y2<0)
{
xi=-xi;
yi=-yi;
}
if(x2>0 && y2<0)
{
if(x2<x1)
xi=-xi;
yi=-yi;
}
}
// 2nd quadrant
if(x1<0 && y1>0)
{
{
if(x2>0 && y2>0)
{
{
xi=xi;
if(y2<y1)
yi=-yi;
}
if(x2<0 && y2>0)
{
if(x2<x1)
xi=-xi;
if(y2<y1)
yi=-yi;
}
if(x2<0 && y2<0)
{
if(x2<x1)
xi=-xi;
yi=-yi;
}
if(x2>0 && y2<0)
{
xi=xi;
yi=-yi;
}
}
//3rd quadrant
if(x1<0 && y1<0)
{
{
if(x2>0 && y2>0)
{
{
xi=xi;
yi=yi;
}
if(x2<0 && y2>0)
{
if(x2<x1)
xi=-xi;
yi=yi;
}
if(x2<0 && y2<0)
{
if(x2<x1)
xi=-xi;
if(y2<y1)
yi=-yi;
}
if(x2>0 && y2<0)
{
xi=xi;
if(y2<y1)
yi=-yi;
}
}
}
//4th Quadrant
if(x1>0 && y1<0)
{
if(x2>0 && y2>0)
{
{
if(x2<x1)
xi=-xi;
yi=yi;
}
}
if(x2<0 && y2>0)
{
xi=-xi;
yi=yi;
}
if(x2<0 && y2<0)
{
xi=-xi;
if(y2<y1)
yi=-yi;
}
if(x2>0 && y2<0)
{
if(x2<x1)
xi=-xi;
if(y2<y1)
yi=-yi;
}
}
}
x=x1;
y=y1;
putpixel(mx+x1,my-y1,4);
putpixel(mx+x2,my-y2,4);
for(int k=1;k<=steps;k++)
{
putpixel(mx+floor(x),my-floor(y),14);
putpixel(mx+floor(x),my-floor(y),14);
x=x+xi;
y=y+yi;
y=y+yi;
delay(40);
}
getch();
}
No comments:
Post a Comment