您的位置:首页 > 其它

直线生成(DDA、中点、Bresenham)算法

2013-07-24 11:08 447 查看
#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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: