我以前用过数值微分法画过直线.
int DDALine (int x0,int y0,int x1,int y1,int color)
{
int coordinate;
float dx=x1-x0/*X方向的增量*/,
dy=y1-y0/*Y方向的增量*/;
float eXY;
float coorXY;
if(dx==0) /*X方向的增量为0*/
{
coorXY=x0;
if(dy>=0) /*Y方向的增量为正方向*/
{
for(coordinate=y0;coordinate<=y1;coordinate++)
putpixel(coorXY,coordinate,color);
}
else /*Y方向的增量为负方向*/
{
for(coordinate=y0;coordinate>=y1;coordinate--)
putpixel(coorXY,coordinate,color);
}
}
else if(dy/dx<=1 && dy/dx>=-1) /*|dy/dx|<=1*/
{
/*X方向的增量为+1/-1,Y方向随之增量为+eXY/-eXY*/
coorXY=y0; /*Y方向的初始值为y0*/
if(dx>=0)
{
eXY=dy/dx; /*当dy>=0时,eXY=dy/dx>=0,
当dy<0 时,eXY=dy/dx<0*/
for(coordinate=x0;coordinate<=x1;coordinate++)
{
putpixel(coordinate,(int)(coorXY),color);
coorXY+=eXY; /*Y方向增量为eXY*/
}
}
else
{
eXY=-dy/dx; /*当dy>=0时,eXY=-dy/dx>=0,
当dy<0 时,eXY=-dy/dx<0*/
for(coordinate=x0;coordinate>=x1;coordinate--)
{
putpixel(coordinate,(int)(coorXY),color);
coorXY+=eXY; /*Y方向增量为eXY*/
}
}
}
else /*|dy/dx|>1*/
{
coorXY=x0; /*X方向的初始值为y0*/
if(dy>=0)
{
eXY=dx/dy; /*当dx>=0时,eXY=dx/dy>=0,
当dx< 0时,eXY=dx/dy<0*/
for(coordinate=y0;coordinate<=y1;coordinate++)
{
putpixel((int)(coorXY),coordinate,color);
coorXY+=eXY; /*X方向增量为eXY*/
}
}
else
{
eXY=-dx/dy; /*当dx>=0时,eXY=-dx/dy>=0,
当dx< 0时,eXY=-dx/dy<0*/
for(coordinate=y0;coordinate>=y1;coordinate--)
{
putpixel((int)(coorXY),coordinate,color);
coorXY+=eXY; /*X方向增量为eXY*/
}
}
}
return 0; /*返回值为0*/
}
我没有听说过用中点算法画直线,
LZ可以交流一下吗,
简介一下中点算法的思路?
[此贴子已经被作者于2007-3-29 20:37:39编辑过]