#include <stdio.h>
#include <graphics.h>
void linedda(int x0,int y0,int x1,int y1,int color);
void BresenhamLine(int x0,int y0,int x1,int y1);
void MidPointLine(int x0,int y0,int x1,int y1,int color);
main()
{
int a,b,c,d,e;
int gdriver=DETECT; int gmode=0;
initgraph(&gdriver,&gmode," ");
cleardevice();
printf("\t DDA-Function\n");
printf("\tputin a,b,c,d,color:");
scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
linedda(a,b,c,d,e);
getch();
cleardevice();
printf("\tBresenhamLine-Function\n");
printf("\tputin a,d,c,d:");
scanf("%d%d%d%d",&a,&b,&c,&d);
BresenhamLine(a,b,c,d);
getch();
cleardevice();
printf("\tMidPointLine-Function\n");
printf("\tputin a,b,c,d,color:");
scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
MidPointLine(a,b,c,d,e);
getch();
closegraph();
}
void linedda(int x0,int y0,int x1,int y1,int color)
{
int x,dy,dx,y;
float m;
dx=x1-x0;
dy=y1-y0;
m=dy/dx;
y=y0;
for(x=x0;x<=x1;x++)
{
putpixel(x,(int)(y+0.5),color);
y+=m;
}
}
void BresenhamLine(int x0,int y0,int x1,int y1)
{
int x,y,dx,dy,e;
dx=x1-x0;dy=y1-y0;
e=2*dy-dx;x=x0;y=y0;
while(x<=x1)
{
putpixel(x,y,2);
x++;
e=e+2*dy;
if(e<0)
{
e+=2*dy;
}
else{
y++;
e=2*dy-dx;
}
}
}
void MidPointLine(int x0,int y0,int x1,int y1,int color)
{
int a,b,delta1,delta2,d,x,y;
a=y0-y1;
b=x1-x0;
d=2*a+b;
delta1=2*a;
delta2=2*(a+b);
x=x0;y=y0;
putpixel(x,y,color);
while(x<x1)
{
if(d<0)
{
x++;y++;
d+=delta2;
}
else
{
x++;
d+=delta1;
}
putpixel(x,y,color);
}
}
直线生成(DDA、中点、Bresenham)算法
最新推荐文章于 2022-09-10 17:03:04 发布