16,472
社区成员
发帖
与我相关
我的任务
分享
void DDAline(int x1, int y1, int x2, int y2, CDC* pDC)
{
int wndWidth=480;
int wndHeight=640;
int steps;
steps=abs(x2-x1) >= abs(y2-y1) ? abs(x2-x1):abs(y2-y1);//步数
afxDump << steps << "\n";// 250
float x,y,dx,dy;
// start point at middle
x=(float)(x1 + wndWidth/2+0.5);
y=(float)(y1 + wndHeight/2+0.5);//起点
//
dx=((float)x2-(float)x1)/steps;
afxDump << dx << " =dx\n";
dy=((float)y2-(float)y1)/steps;//每步增长值
afxDump << dy << " =dy\n";
COLORREF color=RGB(255,0,0);
for(int i=0;i<=steps;i++)
{
pDC->SetPixel((int)x,(int)y,color);
x+=dx;
y+=dy;
}// end for
}// end DDALine
//
// bresenham中点画圆
CRect rc;
GetClientRect(rc);
int add=20;
int xc=rc.Width()/2;
int yc=rc.Height()/2;
COLORREF c=RGB(0,0,0);
for(int r=10;r<200;r += (25+add))
{
for(int i=0;i<400;i++)
{
int x=0;
int y=r;
int d;
d=1-r; // 误差判断
dc.SetPixel ((xc+x),(yc+y),c);
dc.SetPixel ((xc-x),(yc+y),c);
dc.SetPixel ((xc+x),(yc-y),c);
dc.SetPixel ((xc-x),(yc-y),c);
dc.SetPixel ((xc+y),(yc+x),c);
dc.SetPixel ((xc-y),(yc+x),c);
dc.SetPixel ((xc+y),(yc-x),c);
dc.SetPixel ((xc-y),(yc-x),c);
while(x<=y)
{
if(d<0)
{
d += 2*x+3;
}
else
{
d += 2*(x-y)+5;
y--;
}
x++;
dc.SetPixel ((xc+x),(yc+y),c);
dc.SetPixel ((xc-x),(yc+y),c);
dc.SetPixel ((xc+x),(yc-y),c);
dc.SetPixel ((xc-x),(yc-y),c);
dc.SetPixel ((xc+y),(yc+x),c);
dc.SetPixel ((xc-y),(yc+x),c);
dc.SetPixel ((xc+y),(yc-x),c);
dc.SetPixel ((xc-y),(yc-x),c);
}
}
dc.TextOut(10,10,"中点算法画圆");
}
CDC* pDC = GetDC();
pDC->MoveTo(pt1);
pDC->LineTo(pt2);
就完事了