Bresenham画直线代码分析

来源:百度知道 编辑:UC知道 时间:2024/05/16 13:16:34
帮我分析一下这段代码的思想
void Bresenham_line(int x1,int y1,int x2,int y2,int colour)
{
int i,interchange,s1,s2;
int x,y;
int dx,dy,dxy,d;
_setcolor(colour);
x=x1;y=y1;
dx=abs(x2-x1);dy=abs(y2-y1);
s1=(x2-x1)>0?1:-1;
s2=(y2-y1)>0?1:-1;
if(dy>dx)
{
dxy=dx;dx=dy;dy=dxy;
interchange=1;
}
else interchange=0;
d=2*dy-dx;
for(i=1;i<=dx;i++)
{
_setpixel(x,y);
while(d>=0)
{
if(interchange==1)x=x+s1;
else y=y+s2;
d+=-2*dx;
}
if(interchange==1)y=y+s2;
else x=x+s1;
d+=2*dy;
}
}

这个代码是书上的吧。。不完整。。还少了很多东西。。
我有四个象限多可以划直线的。。

#include<graphics.h>
#include<math.h>
#include<stdio.h>

swap(int *a,int *b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}

int zhixian(int x1,int y1,int x2,int y2,int color)
{

double dx,dy,h,x,y,t;
if(x1>x2){swap(&x1,&x2);swap(&y1,&y2);}
dx=x2-x1;
dy=y2-y1;
x=x1;y=y1;
putpixel(x,y,color);
if(dx==0)
{ while(y!=y2){ putpixel(x,y,color);y++;}}
if(dy==0)
{while(x!=x2){putpixel(x,y,color);x++;}}
if(dy!=0&&dx!=0)
if(dy>0)
if(dy<=dx)
{
h=2*dy-dx;
while(x!=x2)
{
if(h<0)
h+=2*dy;
else
{
y++;
h+=2*(dy-dx);
}
putpixel(x,y,color);
x++;
}
}
else
{