- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序实现与上机实习(二)
一、实验目的
编写圆和椭圆的扫描转换算法程序,验证算法的正确性。
二、实验任务
编写中点画圆法的扫描转换程序,考虑原点在(x0,y0)处程序的改动;
添加鼠标程序,实现交互式画圆;
编写中点画椭圆法的扫描转换程序;
添加鼠标程序,实现交互式画椭圆;
三、实验内容
1.编写中点画圆法的扫描转换程序,考虑原点在(x0,y0)处程序的改动;
分析:考虑圆心不再原点,设圆心坐标为(x0,y0)。通过平移坐标原点到圆心,则第二个8分圆上一点p(x,y),其原始坐标为
x’=x+x0
y’=y+y0
即p’1(x0 +x, y+y0)
其它7个对称点分别是:p’2(x0+y,y+x0), p’3 (x0+y,y0-x),p’4 (x0+x,y0-y),p’5 (x0-x,y0-y),p’6 (x0-y,y0-x),p’7 (x0-y,y0+x),p’8 (x0-x,y0+y)
算法程序如下:
MidpointCircle(int x0,int y0,int r, int color)
{
int x,y;
float d;
x=0;y=r;d=1.25-r;
CirPot(x0,y0,x,y,color);
while (x=y)
{
if(d0)
{
d+=2*x+3; x++;
}
else
{
d+=2*(x-y)+5;
x++; y--;
}
CirPot(x0,y0,x,y,color);
} /* while*/
} /* MidpointCiecle */
int CirPot(int x0,int y0,int x,int y,int color)
{
Setpixel((x0+x),(y0+y));
Setpixel((x0+y),(y0+x));
Setpixel((x0+y),(y0-x));
Setpixel((x0+x),(y0-y));
Setpixel((x0-x),(y0-y));
Setpixel((x0-y),(y0-x));
Setpixel((x0-y),(y0+x));
Setpixel((x0-x),(y0+y));
}
程序实现步骤:
建立MidPointCircle工程文件;
右击CMidPointCircleView类,建立成员函数
void MidpointCircle(CDC *pDC,int x0, int y0, int r, COLORREF color)
int CirPot(CDC *pDC,int x0, int y0, int x, int y, COLORREF color)
(3) 编写成员函数代码,程序如下:
void CMidPointCircleView::MidpointCircle(CDC *pDC,int x0, int y0, int r, COLORREF color)
{
int x,y;
float d;
x=0;y=r;d=1.25-r;
CirPot(pDC,x0,y0,x,y,color);
while (x=y)
{
if(d0)
{
d+=2*x+3; x++;
}
else
{
d+=2*(x-y)+5;
x++; y--;
}
CirPot(pDC,x0,y0,x,y,color);
} /* while*/
}
int CMidPointCircleView::CirPot(CDC *pDC,int x0, int y0, int x, int y, COLORREF color)
{
pDC-SetPixel((x0+x),(y0+y),color);
pDC-SetPixel((x0+y),(y0+x),color);
pDC-SetPixel((x0+y),(y0-x),color);
pDC-SetPixel((x0+x),(y0-y),color);
pDC-SetPixel((x0-x),(y0-y),color);
pDC-SetPixel((x0-y),(y0-x),color);
pDC-SetPixel((x0-y),(y0+x),color);
pDC-SetPixel((x0-x),(y0+y),color);
return 0;
}
(4)编写OnDraw(CDC* pDC)函数,程序如下:
void
文档评论(0)