电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

图形学画圆实验报告VIP免费

图形学画圆实验报告_第1页
1/5
图形学画圆实验报告_第2页
2/5
图形学画圆实验报告_第3页
3/5
4.2.3程序实现与上机实习(二)一、实验目的编写圆和椭圆的扫描转换算法程序,验证算法的正确性。二、实验任务1.编写中点画圆法的扫描转换程序,考虑原点在(x0,y0)处程序的改动;2.添加鼠标程序,实现交互式画圆;3.编写中点画椭圆法的扫描转换程序;4.添加鼠标程序,实现交互式画椭圆;三、实验内容1.编写中点画圆法的扫描转换程序,考虑原点在(x0,y0)处程序的改动;分析:考虑圆心不再原点,设圆心坐标为(x0,y0)。通过平移坐标原点到圆心,则第二个8分圆上一点p(x,y),其原始坐标为x’=x+x0y’=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(intx0,inty0,intr,intcolor){intx,y;floatd;x=0;y=r;d=1.25-r;CirPot(x0,y0,x,y,color);while(x<=y){if(d<0){d+=2*x+3;x++;}else{d+=2*(x-y)+5;x++;y--;}CirPot(x0,y0,x,y,color);}/*while*/}/*MidpointCiecle*/O(0,0)YX(x0,y0)R(x0+R,y0)p(x,y)X’Y’p’1(x0+x,y+y0)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)intCirPot(intx0,inty0,intx,inty,intcolor){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));}程序实现步骤:(1)建立MidPointCircle工程文件;(2)右击CMidPointCircleView类,建立成员函数voidMidpointCircle(CDC*pDC,intx0,inty0,intr,COLORREFcolor)intCirPot(CDC*pDC,intx0,inty0,intx,inty,COLORREFcolor)(3)编写成员函数代码,程序如下:voidCMidPointCircleView::MidpointCircle(CDC*pDC,intx0,inty0,intr,COLORREFcolor){intx,y;floatd;x=0;y=r;d=1.25-r;CirPot(pDC,x0,y0,x,y,color);while(x<=y){if(d<0){d+=2*x+3;x++;}else{d+=2*(x-y)+5;x++;y--;}CirPot(pDC,x0,y0,x,y,color);}/*while*/}intCMidPointCircleView::CirPot(CDC*pDC,intx0,inty0,intx,inty,COLORREFcolor){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);return0;}(4)编写OnDraw(CDC*pDC)函数,程序如下:voidCMidPointCircleView::OnDraw(CDC*pDC){CMidPointCircleDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahereMidpointCircle(pDC,100,100,10,RGB(255,0,0));MidpointCircle(pDC,500,300,60,RGB(255,255,0));}(6)编译、运行程序,查看结果。任务2:添加鼠标程序,实现交互式画圆在任务1的基础上,完成下列步骤:(1)向视图类中添加自定义的成员变量用鼠标右键单击视图类,选择“AddMemberVariable…”,添加下面三个成员变量。proctected:intm_r;//半径CPointm_bO;//圆心CPointm_bR;//圆上的点intm_ist;//圆心与圆周上点的区别,m_ist=0,表示鼠标左击点为圆心,//m_ist=1,表示鼠标左击点为圆周上的点(2)在视图类CPP文件的构造函数中初始化成员变量CMidPointCircleMouseView::CMidPointCircleMouseView(){//TODO:addconstructioncodeherem_bO.x=0;m_bO.y=0;//圆心m_bR.x=0;m_bR.y=0;//圆上的点m_ist=0;//圆心与圆上的点区别m_r=0;//圆的半径}(3)向视图类中添加自定义的成员函数原型:public:intComputeRadius(CPointcenp,CPointardp);添加成员函数的程序代码:intCMouseSpringView::ComputeRadius(CPointcenp,CPointardp){intdx=cenp.x-ardp.x;intdy=cenp.y-ardp.y;//sqrt()函数的调用,在头文件中加入#include"math.h"return(int)sqrt(dx*dx+dy*dy);}(4)向视图类中添加两个鼠标消息响应函数,并输入鼠标处理程序代码。具体操作方法与鼠标示...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

图形学画圆实验报告

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部