




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一、直线的生成实验目的:1、 掌握DDA直线画法、中点画线法和Bresenham画线法2、 掌握VC+简单程序设计方法实验内容:根据提供的程序框架,修改部分代码,完成画一条直线的功能(中点画线法或者Bresenham画线法任选一),只要求实现在第一象限内的直线。实验步骤和方法:首先启动Visual C+ 6.0(注意,其它版本程序无法正确编译),文件(file)打开工作空间(open workspace)。打开 实验12用基本图形生成基本图形生成.dsw。在fileview窗口,source file下,双击 直线生成view.cpp,或者classview窗口下,cmyview类下相应的
2、函数,按注释改写下列函数:void CMyView:OnDdaline() (此为DDA生成直线)void CMyView:OnBresenhamline()(此为Bresenham画直线)void CMYView:OnMidPointLine()(此为中点画线法)程序代码说明:1、直线的两个端点,由对话框输入,给定程序已经完成输入代码。2、SetPixel的用法:COLORREF SetPixel(int x, int y, COLORREF crColor);/x,y为坐标点。COLORREF SetPixel(POINT point, COLORREF crColor);/point为坐
3、标点。3、 本实验事先提供DDA话直线的函数示范(红色部分是重点,其它部分可以不看)中点画直线函数和BresenHam画直线函数由同学们参照dda直线的示例函数自己完成。/以下为DDA画直线的源程序float x,y,dx,dy,k;dx=(float)(xb-xa);dy=(float)(yb-ya);k=dy/dx;x=xa;y=ya;if(abs(k)<1)for (x=xa;x<=xb;x+)pdc->SetPixel(x, int(y+0.5),COLOR);y=y+k;if(abs(k)>=1)for(y=ya;y<=yb;y+)pdc->Set
4、Pixel(int(x+0.5),y,COLOR);x=x+1/k;/DDA画直线结束/以下为中点画直线的源程序float a,b,d1,d2,d,x,y; a=ya-yb,b=xb-xa,d=2*a+b; d1=2*a,d2=2*(a+b); x=xa,y=ya; pdc->SetPixel(x,y,COLOR); while(x<xb) if(d<0) x+,y+,d+=d2; else x+,d+=d1; pdc->SetPixel(x,y,COLOR); /中点画直线结束/以下为Bresenham画直线的源程序int i,s1,s2,interchange;fl
5、oat f,x,y,deltax,deltay,temp;x=xa;y=ya;deltax=abs(xb-xa);deltay=abs(yb-ya);if(xb-xa>=0) s1=1;else s1=-1;if(yb-ya>=0) s2=1;else s2=-1;if(deltay>deltax) temp=deltax;deltax=deltay;deltay=temp;interchange=1;else interchange=0;f=2*deltay-deltax;pdc->SetPixel(x,y,COLOR);for(i=1;i<=deltax;i+
6、) if(f>=0)if(interchange=1) x+=s1;else y+=s2;pdc->SetPixel(x,y,COLOR);f=f-2*deltax;else if(interchange=1) y+=s2;else x+=s1;f=f+2*deltay;/Bresenham画直线结束实验二、圆的生成(中点和Bresenham法)实验目的:1、 掌握bresenham画圆的算法。2、 掌握VC+简单程序设计方法实验内容:根据提供的程序框架,修改部分代码,用Bresenham和中点画圆法画一段圆弧或者画圆。实验步骤和方法:同实验一,修改下列函数:void CMyVie
7、w:OnBresenhamCircle()void CMyView:OnMidpointCircle()程序代码说明:1、圆的圆心为原点,半径为给定参数,由函数编写时给定,不要求人机交换。/以下请同学们自己编写画圆函数int x,y;int c=0;float d;x=0;y=radius;d=1.25-radius;pdc->SetPixel(x0+x),(y0+y),c);pdc->SetPixel(x0-x),(y0+y),c);pdc->SetPixel(x0+x),(y0-y),c);pdc->SetPixel(x0-x),(y0-y),c);pdc->
8、SetPixel(x0+y),(y0+x),c);pdc->SetPixel(x0-y),(y0+x),c);pdc->SetPixel(x0+y),(y0-x),c);pdc->SetPixel(x0-y),(y0-x),c);while (x<=y)if (d<0) d+=2*x+3;elsed+=2*(x-y)+5;y-;x+;pdc->SetPixel(x0+x),(y0+y),c);pdc->SetPixel(x0-x),(y0+y),c);pdc->SetPixel(x0+x),(y0-y),c);pdc->SetPixel(x
9、0-x),(y0-y),c);pdc->SetPixel(x0+y),(y0+x),c);pdc->SetPixel(x0-y),(y0+x),c);pdc->SetPixel(x0+y),(y0-x),c);pdc->SetPixel(x0-y),(y0-x),c);/中点画圆结束/以下请同学们自己编写画圆函数int c=0;int x=0,y=radius,p=3-2*radius;while(x<y)pdc->SetPixel(x0+x),(y0+y),c);pdc->SetPixel(x0-x),(y0+y),c);pdc->SetPix
10、el(x0+x),(y0-y),c);pdc->SetPixel(x0-x),(y0-y),c);pdc->SetPixel(x0+y),(y0+x),c);pdc->SetPixel(x0-y),(y0+x),c);pdc->SetPixel(x0+y),(y0-x),c);pdc->SetPixel(x0-y),(y0-x),c);if(p<0)p=p+4*x+6;elsep=p+4*(x-y)+10;y-=1;x+=1;if (x=y)pdc->SetPixel(x0+x),(y0+y),c);pdc->SetPixel(x0-x),(y0
11、+y),c);pdc->SetPixel(x0+x),(y0-y),c);pdc->SetPixel(x0-x),(y0-y),c);pdc->SetPixel(x0+y),(y0+x),c);pdc->SetPixel(x0-y),(y0+x),c);pdc->SetPixel(x0+y),(y0-x),c);pdc->SetPixel(x0-y),(y0-x),c);/BresenHam画圆结束实验三、二维图形的平移实验目的:1、 验证二维图形的几何变换矩阵2、 掌握VC+简单程序设计实验内容:以一条直线段为例,完成目标的平移(缩放等其它变换选做)软件的
12、结果:点击平移,首先会弹出一个对话框要求输入直线的起点和中点,以及平移的数值,确定后,原直线和平移后的直线同时显示。实验步骤和方法:1、 打开实验34用/二维变换.dsw2、 改写二维变换view.cpp里的void CMyView:OnMove()函数(需要改写的地方已经做了说明)。3、 生成直线的函数采用VC里的函数。4、 函数的主要任务是计算出平移后的坐标。程序代码说明:绘制一条直线需要两个函数。pdc->MoveTo(int x, int y); 将当前点移动至(x ,y)坐标pdc->LineTo(int x, int y); 从当前点绘制一条直线至(x,y)坐标,并将当
13、前点移动至(x,y)。比如,要绘制一条直线,起点(x0, y0),终点(x1, y1):pdc->MoveTo(x0,y0);pdc->LineTo(x1,y1);/此处请同学们自己编写,计算出直线两个端点xa1,ya1,xb1,yb1,直线的平移。xa1=xa+dx;ya1=ya+dy;xb1=xb+dx;yb1=yb+dy;实验四、二维图形的旋转实验目的:1、 验证二维图形的几何变换矩阵2、 掌握VC+简单程序设计实验内容:以一个三角形为例,完成二维图形绕任一点旋转。软件的结果:点击平移,首先会弹出一个对话框要求输入三角形的三个顶点,以及要绕着旋转的点和旋转角度,确定后,原图形
14、和变换后的图形同时显示。实验步骤和方法:1、 打开二维变换.dsw2、 改写二维变换view.cpp里的void CMyView:OnRotate()函数(需要改写的地方我已经做了说明)。3、 生成直线的函数采用VC里的函数。4、 函数的主要任务是计算出变换后的坐标。程序代码说明:绘制一条直线需要两个函数。pdc->MoveTo(int x, int y); 将当前点移动至(x ,y)坐标pdc->LineTo(int x, int y); 从当前点绘制一条直线至(x,y)坐标,并将当前点移动至(x,y)。比如,要绘制一条直线,起点(x0, y0),终点(x1, y1):pdc-&
15、gt;MoveTo(x0,y0);pdc->LineTo(x1,y1);/此处请同学们自己编写,计算出变换后的三角形的三个端点xa1,ya1,xb1,yb1,xc1,yc1,三角形的旋转。 xa1=(xa-x)*cos(angle)-(ya-y)*sin(angle)+x;ya1=(xa-x)*sin(angle)+(ya-y)*cos(angle)+y;xb1=(xb-x)*cos(angle)-(yb-y)*sin(angle)+x;yb1=(xb-x)*sin(angle)+(yb-y)*cos(angle)+y;xc1=(xc-x)*cos(angle)-(yc-y)*sin(angle)+x;yc1=(xc-x)*sin(angle)+(yc-y)*cos(angle)+y;实验五、Bezier曲线的生成实验目的:1、 掌握曲线的参数化表示方法2、 掌握Bezi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025海南澄迈县就业局招聘见习生1人模拟试卷及完整答案详解
- 2025广东惠州市博罗县东部自来水有限公司招聘及模拟试卷及答案详解(新)
- 2025年松原市繁荣社区卫生服务中心公开招用编外(聘用)人员的(20人)考前自测高频考点模拟试题附答案详解(突破训练)
- 2025广东惠州市惠阳区教育局选调下属事业单位工作人员15人模拟试卷及答案详解(必刷)
- 2025福建厦门夏商集团有限公司招聘2人考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025安徽蚌埠市五河县乡村医生“乡聘村用”招聘30人考前自测高频考点模拟试题及完整答案详解一套
- 2025福建福州市招聘培训顾问1人模拟试卷及答案详解(网校专用)
- 2025年甘肃陇南事业单位预计将于5月中旬发布模拟试卷及答案详解(易错题)
- 2025广西柳州市柳江区投资集团有限公司下属子公司柳州市堡鑫建筑工程有限公司招聘工作人员考前自测高频考点模拟试题及参考答案详解
- 2025贵州务川自治县司法局、县审计局和砚山镇人民政府招聘城镇公益性岗位人员6人考前自测高频考点模拟试题及答案详解(典优)
- 中小学学生心理健康测评工具汇编
- 采光顶玻璃拆除施工方案
- 医院电梯乘坐安全培训课件
- 2025重庆市勘测院有限公司招聘6人考试参考题库及答案解析
- 钢厂安全教育培训课件
- 第一部分 第七章 第41课时 气象灾害(重难课时)2026年高考地理第一轮总复习
- 2025年中国航空发动机整体叶盘零件市场调查研究报告
- 2025年中考数学真题知识点分类汇编之二次函数(四)
- 2025年注册会计师题库带答案分析
- 呼吸科出科考试题临床及答案2025版
- 设计管控管理办法
评论
0/150
提交评论