




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
423 程序实现与上机实习(二)一、实验目的编写圆和椭圆的扫描转换算法程序,验证算法的正确性。二、实验任务1 编写中点画圆法的扫描转换程序,考虑原点在(x0,y0)处程序的改动;2 添加鼠标程序,实现交互式画圆;3 编写中点画椭圆法的扫描转换程序;4 添加鼠标程序,实现交互式画椭圆;三、实验内容 1编写中点画圆法的扫描转换程序,考虑原点在(x0,y0)处程序的改动;分析:考虑圆心不再原点,设圆心坐标为(x0,y0)。通过平移坐标原点到圆心,则第二个8分圆上一点p(x,y),其原始坐标为 x=x+x0 y=y+y0 即p1(x0 +x, y+y0)其它7个对称点分别是:p2(x0+y,y+x0), p3 (x0+y,y0-x),p4 (x0+x,y0-y),p5 (x0-x,y0-y),p6 (x0-y,y0-x),p7 (x0-y,y0+x),p8 (x0-x,y0+y)O(0,0)YX (x0,y0)R (x0+R,y0) p(x,y)XY p1(x0 +x, y+y0) p2(x0+y,y+x0) p3 (x0+y,y0-x) p4 (x0+x,y0-y)) p5 (x0-x,y0-y) p6 (x0-y,y0-x) p7 (x0-y,y0+x) p8 (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);程序实现步骤:(1) 建立MidPointCircle工程文件;(2) 右击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(dSetPixel(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 CMidPointCircleView:OnDraw(CDC* pDC)CMidPointCircleDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereMidpointCircle(pDC,100, 100, 10, RGB(255,0,0); MidpointCircle(pDC,500, 300, 60, RGB(255,255,0);(6) 编译、运行程序,查看结果。任务2:添加鼠标程序,实现交互式画圆 在任务1的基础上,完成下列步骤: (1)向视图类中添加自定义的成员变量 用鼠标右键单击视图类,选择“Add Member Variable”,添加下面三个成员变量。proctected : int m_r; / 半径CPoint m_bO; / 圆心 CPoint m_bR; /圆上的点 int m_ist; /圆心与圆周上点的区别,m_ist=0,表示鼠标左击点为圆心, /m_ist=1,表示鼠标左击点为圆周上的点 (2)在视图类CPP文件的构造函数中初始化成员变量CMidPointCircleMouseView:CMidPointCircleMouseView()/ TODO: add construction code here m_bO.x=0; m_bO.y=0; /圆心 m_bR.x=0; m_bR.y=0; /圆上的点 m_ist=0; /圆心与圆上的点区别 m_r=0; /圆的半径(3)向视图类中添加自定义的成员函数原型: public: int ComputeRadius(CPoint cenp,CPoint ardp);添加成员函数的程序代码:int CMouseSpringView:ComputeRadius(CPoint cenp, CPoint ardp) int dx=cenp.x-ardp.x; int dy=cenp.y-ardp.y; /sqrt()函数的调用,在头文件中加入#include math.h return (int)sqrt(dx*dx+dy*dy);(4)向视图类中添加两个鼠标消息响应函数,并输入鼠标处理程序代码。 具体操作方法与鼠标示例1方法相同。一个是OnLButtonDown()函数,另一个是OnMouseMove()函数。程序如下:void CMidPointCircleMouseView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default CDC *pDC=GetDC(); pDC-SelectStockObject(NULL_BRUSH);if (!m_ist) /绘制圆m_bO=m_bR=point; /纪录第一次单击鼠标位置,定圆心m_ist+;elsem_bR=point; /记录第二次单击鼠标的位置,定圆周上的点m_ist-; / 为新绘图作准备m_r=ComputeRadius(m_bO,m_bR);MidpointCircle(pDC,m_bO.x,m_bO.y,m_r,RGB(255,0,0);ReleaseDC(pDC); /释放设备环境CView:OnLButtonDown(nFlags, point);void CMidPointCircleMouseView:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCDC *pDC=GetDC(); int nDrawmode=pDC-SetROP2(R2_NOT); /设置异或绘图模式,并保存原来绘图模式pDC-SelectStockObject(NULL_BRUSH);if(m_ist=1)CPoint prePnt,curPnt; prePnt=m_bR; /获得鼠标所在的前一位置curPnt=point;/绘制橡皮筋线 m_r=ComputeRadius(m_bO,prePnt); MidpointCircle(pDC,m_bO.x,m_bO.y,m_r,RGB(255,0,0);/用异或模式重复画圆,擦出所画的圆/DrawCircle(pDC,m_bO,prePnt); m_r=Comp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江西陶瓷工艺美术职业技术学院《时尚项目策划》2023-2024学年第一学期期末试卷
- 东莞理工学院《农业资源评价与利用》2023-2024学年第一学期期末试卷
- 河南财政金融学院《行政职业能力测验》2023-2024学年第一学期期末试卷
- 2024-2025学年云南省富源县联考数学七上期末调研模拟试题含解析
- 包头铁道职业技术学院《AE影视片头制作》2023-2024学年第一学期期末试卷
- 厂房股权转让与产业园区公共配套服务协议
- 生产线厂区门卫安全防护合同
- 高科技企业定制化办公用品采购协议
- 智能化采棉机操作工劳动合同书
- 智能化厂房产权转移合同
- 2024《整治形式主义为基层减负若干规定》全文课件
- 经桡动脉介入诊疗患者术肢并发症预防及护理专家共识解读
- 山东省烟台市2023-2024学年高二年级下册7月期末考试 历史(含解析)
- 专科护士岗位竞聘5分钟
- “掌上品”非法集资案件处置平台小程序端操作手册
- COPD综合评分表完整
- 上海对外经贸大学金融管理学院2023级“青领工程”志愿者选拔测试附有答案
- QB4833-2015扫地机器人性能测试方法解读
- 企业开户指南客户开户协议书
- HYT 147.7-2013 海洋监测技术规程 第7部分:卫星遥感技术方法(正式版)
- 中国法律史-第三次平时作业-国开-参考资料
评论
0/150
提交评论