中点画线法算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中点画线法算法:
void CMyView::OnMidpointline()
{
CDC *pDC=GetDC();
int x0=100,y0=100,x1=400,y1=300,c=RGB(0,0,0); //黑色直线
float a,b,d1,d2,d,x,y;
a=y0-y1;
b=x1-x0;
d=2*a+b;
int x=100,y=200,r=150,color=RGB(0,0,255);
float d;
x=0; y=r; d=1.25-r;
pDC->SetPixel(x,y,color);
while(x<=y)
{
if(d<0) d+=2*x+3;
else {d+=2*(x-y)+5;y--;}
x++;
e=-0.5; x=x1; y=y1;
for(i=0;i<=dx;i++)
{pDC->SetPixel(x,y,color);
x++;
e=e+k;
if(e>=0) { y++; e=e-1;}
}
}
中点画圆:
void CTestView::OnMindpointcircle()
{
CDC *pDC=GetDC();
void CTestView ::OnBresenhamline()
{
CDC *pDC=GetDC();
int x1=100,y1=200,x2=600,y2=800,color=RGB(0,0,255);
int i,x,y,dx,dy;
float k,e;
dx=x2-x1;
dy=y2-y1;
k=dy/dx;
pDC->SetPixel(x+x0,-y+y0,c);
pDC->SetPixel(y+x0,x+y0,c);
pDC->SetPixel(-y+x0,x+y0,c);
pDC->SetPixel(-y+x0,-x+y0,c);
pDC->ቤተ መጻሕፍቲ ባይዱetPixel(y+x0,-x+y0,c);
}
ReleaseDC(pDC);
}
while(x<=y)
{
if (e<0)
{e=e+4*x+6;x++;}
else{e=e+4*(x-y)+10; x++;y--;}
pDC->SetPixel(x+x0,y+y0,c);
pDC->SetPixel(-x+x0,y+y0,c);
pDC->SetPixel(-x+x0,-y+y0,c);
d1=2*a;
d2=2*(a=b);
x=x0;y=y0;
pDC->SetPixel(x,y,c);
while(x<x1)
{if(d<0) {x++;y++;d+=d2;}
else {x++;d+=d1;}
pDC->SetPixel(x,y,c); }
ReleaseDC(pDC);
}
Bresenham算法:
pDC->SetPixel(x,y,color);
}
}
Bresenham画圆:
void CMyView::OnBresenhamcircle()
{
CDC *pDC=GetDC();
int x0=100,y0=100,x,y,r=80,c=0; //黑色圆弧
float e,d;
e=3-2*r;x=0;y=r;
相关文档
最新文档