图形学问题,再线等待。

vvvvvvv 2003-10-09 03:52:03
我用Bresenham算法画连续线时,线段不能相互衔接,错开很多。为什么?

代码如下:
void CMapViewView::Bre_SETLINE(long x1, long y1, long x2, long y2, CDC *pDC, COLORREF rgb)
{
CRect rect;
GetClientRect(&rect);
CPoint pt;
int x,y,dx,dy,i;
float k,e;
dx=(int)(x2-x1);
if(x1==x2)
return;
dy=(int)(y2-y1);
k=dy/dx;
e=-dx;
x=(int)x1;
y=(int)y1;
for(i=0;i<=dx;i++)
{
pt.x=x;
pt.y=y;
if(rect.PtInRect(pt))
{
pDC->SetPixel(x,y,egb);
}
x=x+1;
e=e+2*dy;
if(e>=0)
{
y=y+1;
e=e-2*dx;
}
}
}

例如作如下调用:
Bre_SETLINE(0,0,200,300, pDC,RGB(255,0,0));
Bre_SETLINE(200,300,800,500, pDC,RGB(255,0,0));

两条线却不能连接在一起。为什么。
...全文
26 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shadowrain 2003-10-09
  • 打赏
  • 举报
回复
楼上的说得对,你的程序没有注意到K>1和K<1区别,很容易,你可以对K>1进行一个转换。只要把横纵坐标转换过来,understand??
if (k>1)
{ exchange(&x1,&y1);
exchange(&x2,&y2);
exchange(&dx,&dy);
}
把这个东东插到合适的位置,记住我这里的exchange(&,&)是要自己写的.就是交换两个元素啦.


timetogiveup 2003-10-09
  • 打赏
  • 举报
回复
为什么这样会化成直线?

Bre_SETLINE(20,100,200,5,pDC,RGB(255,0,0));

因为你没有分k>1和k<=1的情况;


timetogiveup 2003-10-09
  • 打赏
  • 举报
回复
没怎么看,你的代码比较奇怪,我记得以前写时,全部是整型数据的,否则bresenham有什么意义
duqiang2050 2003-10-09
  • 打赏
  • 举报
回复

if(e>=0)
{
y=y+1;
e=e-2*dx;////e=e-1;
}
改为

while (e>=0)
{
y=y+1;
pDC->SetPixel(x,y,rgb);
e=e-2*dx;
}
就完整了
duqiang2050 2003-10-09
  • 打赏
  • 举报
回复
不是吧,我都试了,把if改成while就对了
vvvvvvv 2003-10-09
  • 打赏
  • 举报
回复
为什么这样会化成直线?

Bre_SETLINE(20,100,200,5,pDC,RGB(255,0,0));
vvvvvvv 2003-10-09
  • 打赏
  • 举报
回复
还是不对。请再看一看!
duqiang2050 2003-10-09
  • 打赏
  • 举报
回复

if(e>=0)
{
y=y+1;
e=e-2*dx;
}
的if改成while就对了
wuwind 2003-10-09
  • 打赏
  • 举报
回复
void CMapViewView::Bre_SETLINE(long x1, long y1, long x2, long y2, CDC *pDC, COLORREF rgb)
{
CRect rect;
GetClientRect(&rect);
CPoint pt;
int x,y,dx,dy,i;
float k,e;
dx=(int)(x2-x1);
if(x1==x2)
return;
dy=(int)(y2-y1);
k=dy/dx;
e=-dx; ///////e=-0.5
x=(int)x1;
y=(int)y1;
for(i=0;i<=dx;i++)
{
pt.x=x;
pt.y=y;
if(rect.PtInRect(pt))
{
pDC->SetPixel(x,y,egb);
}
x=x+1;
e=e+2*dy; ////e=e+k;
if(e>=0)
{
y=y+1;
e=e-2*dx;////e=e-1;
}
}
}

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧