急!一个Bresenham算法画椭圆的问题

xieqian724 2009-05-23 04:22:32
下面是我的函数,请问为什么在VC里画不出来啊?
void CBasedrawView::Ellipse(float a, float b, float x0, float y0, CDC *pDC)
{
float d1,d2,x,y,t;
d1=b*b+a*a*(-b+0.25);
t=sqrt(a*a+b*b);
x=0,y=b;
pDC->SetPixel(x,y,RGB(100,100,100));
while(x<=(a*a/t)&&y<=(b*b/t))
{
if(d1<0)
{
d1+=b*b*(2*x+3);
}
else {
d1+=b*b*(2*x+3)+a*a*(-2*y+2);
y--;
}
x++;
pDC->SetPixel(x+x0,y+y0,RGB(100,100,100));
pDC->SetPixel(x+x0,-y+y0,RGB(100,100,100));
pDC->SetPixel(-x+x0,-y+y0,RGB(100,100,100));
pDC->SetPixel(-x+x0,y+y0,RGB(100,100,100));
}
d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;
while(x<=a&&y<=0)
{
if(d2<0)
{
x++;
d2+=b*b*(2*x+2)+a*a*(-2*y+3);
}
else
{
d2+=a*a*(2*y+3);
}
y--;
pDC->SetPixel(x+x0,y+y0,RGB(100,100,100));
pDC->SetPixel(x+x0,-y+y0,RGB(100,100,100));
pDC->SetPixel(-x+x0,-y+y0,RGB(100,100,100));
pDC->SetPixel(-x+x0,y+y0,RGB(100,100,100));
}

}
...全文
177 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzwu 2009-07-21
  • 打赏
  • 举报
回复
抱歉,以上后一个回复我看错了,作废。
(这是个被调用的函数,完整的还有一个main来提供x0,y0)。
zzwu 2009-07-21
  • 打赏
  • 举报
回复
又非常明显的一个漏洞:
x0,y0没有初始化,这样它们将都为0,
这意味椭圆中心设置在(0,0),因此不可能画出完整的椭圆,最多只能画出其1/4
zzwu 2009-07-21
  • 打赏
  • 举报
回复
没有全部看,但至少有一个bug:

pDC->SetPixel(x,y,RGB(100,100,100));

应该改为

pDC->SetPixel(x+x0,y+y0,RGB(100,100,100));

19,468

社区成员

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

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