Bresenham算法画直线问题,急,在线等!!!

来源:百度知道 编辑:UC知道 时间:2024/06/05 15:53:39
以下函数为一VC项目中用来画直线的函数,请帮忙看下为啥只能画出水平,垂直和45度的直线。。。
void CCGPainterView::DrawLine(CDC *pDC, CPoint ptStartPoint, CPoint ptEndPoint, COLORREF cLineColor)
{
int i,j,k,l;
float x,y,xincre,yincre;
CPoint point;
k = abs(ptStartPoint.x-ptEndPoint.x);
l = abs(ptStartPoint.y-ptEndPoint.y);
j = k;
if (l>k){
j=l;
}
x=ptStartPoint.x;
y=ptStartPoint.y;
xincre = (ptEndPoint.x-ptStartPoint.x)/j;
yincre = (ptEndPoint.y-ptStartPoint.y)/j;
for(i=1; i<=j; i++) {
point.x=x;
point.y=y;
pDC->SetPixelV(point,cLineColor);
x = x + xincre;
y = y + yincre;
}
}

void CCGPainterView::DrawLine(CDC *pDC, CPoint ptStartPoint, CPoint ptEndPoint, COLORREF cLineColor)
{
int i,j,k,l;
float x,y,xincre,yincre;
CPoint point;
k = abs(ptStartPoint.x-ptEndPoint.x);
l = abs(ptStartPoint.y-ptEndPoint.y);
j = k;
if (l>k){
j=l;
}
x=ptStartPoint.x;
y=ptStartPoint.y;
xincre = (ptEndPoint.x-ptStartPoint.x)/(float)j; //如果这里不转换为浮点数,结果会去掉小数位,只保留整数位
yincre = (ptEndPoint.y-ptStartPoint.y)/(float)j;
for(i=1; i<=j; i++) {
point.x=x;
point.y=y;
pDC->SetPixelV(point,cLineColor);
x = x + xincre;
y = y + yincre;
}
}