已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数学与软件科学学院 实验报告 学期: 2010 至 2011 第 一 学期 2010年 10月 5日 课程名称: 计算机图形学 专业:信息与计算科学2007级5班实验编号: 03 实验项目: 圆弧生成算法 指导教师: 庞朝阳 学号:20070605 实验成绩: 一、实验目的及要求1:圆弧上的八个对称点的算法描述;2:了解圆弧的的基本绘制算法;3:绘制椭圆;二.基本思想 1:圆弧被定义为到给定中心位置(x0,y0)距离为r的点集,圆心为与原点的圆有四条对称轴:x=0, y=0, x=y, x=-y 。已知圆弧上一点(x ,y),则可以的到关于四条对称轴的其他7个点(八对称性),因此只需要扫描八分之一的圆弧就可以求的整个圆弧的所有点。三:首先来了解一下圆弧上的八个对称点的算法描述(以中心在原点,半径为整数R的圆为例)。Void circlepoints(int x, int y ,int color)Setpixel(x,y,color); setpixel(y, x,color);Setpixel(-x,y,color); setpixel(y,-x,color);Setpixel(x,-y,color); setpixel(-y,x,color); Setpixel(-x,-y,color);setpixel(-y,-x,color);四:八分之一圆弧的扫描变换的实现。1 算法根据圆的基本方,沿X轴从0到/2R,以单位步长计算对应的y值来获得圆周上每点的位置:y=,缺点:算法每一步均包含大量的复杂计算(浮点乘)且所绘制的像素间隔不一致解决方法:使用极坐标r和来计算圆弧上的点(0,)该算法使用了三角函数和浮点运算,运算速度依然很慢。五:中点画圆法(以从(0,R)到(R/, R/)的1/8圆为例)1. 基本原理假定当前已确定了圆弧上的一个个像素点P(x,y),则下一像素点只会是右方的P(x,y)或右下方的P(x,y)如图构造函数F(x,y)=x+y-R,对于圆上的点有F(x,y)=0;对于圆外点有F(x,y)0,对于圆内点有F(x,y)0设M为P、P的中点,即M(x,y).则当F(M)0时, P离圆弧较近,取P为F的下一像素点当 F(M)=0时,约定取P。根据以上原理,构造判别式:d=F(M)= F(x,y)=(x)+( y)-R 若d0,则取P为下一像素点,且再下一像素点的判别式为d=F(M)= F(x,y)=(x)+( y)-R = d+2x+3若 d0 则取p作为下一像素点,且再下一像素点的判别式为d= F(x,y)=(x)+( y)-R= d+2(x-y)+5取第一个像素点为(0.R)则判断式d的初始值为:d=F=1.25-R为避免浮点运算,令e=d-0.25此时初始化运算d=1.25-R对应于e=1-R判别式d0对应于e-0.25,又由于e的初始值和运算过程中的增值为整数故e始终为整数,那e-0.25可用e0代替。2.代码实现及结果:#include#includestdafx.husing namespace std; class Yuanpublic: int x; int y; int r; int color;public: void MidpointCircle(int r,int color,CDC *pDC); void CirclePoints(int x,int y,int color,CDC *pDC); void Chu(int x,int y); ;void Yuan:Chu(int x,int y) this-x=x; this-y=y; void Yuan:CirclePoints(int x,int y,int color,CDC *pDC) pDC-SetPixel(x+200,y+200,color); pDC-SetPixel(y+200,x+200,color); pDC-SetPixel(-x+200,y+200,color); pDC-SetPixel(y+200,-x+200,color); pDC-SetPixel(x+200,-y+200,color); pDC-SetPixel(-y+200,x+200,color); pDC-SetPixel(-x+200,-y+200,color); pDC-SetPixel(-y+200,-x+200,color); Sleep(30);void Yuan:MidpointCircle(int r,int color,CDC *pDC) int x,y; int e; x=0; y=r; e=1-r; this-CirclePoints(x,y,color,pDC); while(x=y) if(eCirclePoints(x,y,color,pDC); 实验结果:六:椭圆的绘制(1):基本原理1:对于一般的椭圆,可将中心平移到坐标原点,确定好中心在原点的标准位置的椭圆像素点集后,在平移到(x0,y0)位置,将问题转化为标准位置的椭圆的绘制问题2:若椭圆的长轴和短轴方向不与坐标轴x与Y平行则可采用旋坐标轴的变换方式,同样将问题转变为标准位置的椭圆绘制。3:定义椭圆中点算法的判别式:F(x,y)=bx+ay-ab则若F(x,y)0,则说明中点M(x,y)在椭圆边界上;若F(x,y)0,则说明中点M(x,y)在椭圆边界外;4:根据椭圆的对称性,只需讨论第一象限椭圆弧的生成。在处理该段椭圆弧时,进一步与把他分为两部分:上下部分。以弧上斜率为-1的点作为边界,针对上部分(k-1),在x轴上取单位步长确定下一像素位置针对下部分(k-1),在y轴上取单位步长确定下一像素位置由F(x,y)=bx+ay-ab可以得到椭圆的斜率dy/dx=-2bx/2ay,在上下部分的交界处有斜率dy/dx=-1即2bx=2ay首先讨论圆弧的上部分:假设当前已确定一圆弧上的像素点(x,y)则下一对候选像素点是(x+1,y-0.5)即判断式为d= F(x+1,y-0.5)=b(x+1)+a( y-0.5)-ab他的符号确定下一像素点取正右方还是左下方像素,若d0那中点在椭圆外,则取左下方像素,判别式为:d= F(x,y-1.5)=b(x)+a ( y-1.5)-1 = d+ b (2 x+1)+2 ay因此沿左下方,判别式d1的增量为b (2 x+1)+2 ayd的初始条件是:据圆弧起点(0,b)得到第一个中点是(1,b-0.5),对应判别式为:d=F(1,b-0.5)= b+ a(b-0.5)-ab= b+ a(-b+0.25)其中,每一步的迭代过程中需要随时的计算和比较从上部分转入下部分的条件是否成立,从而将逼近方向由x改为y。2.代码实现及结果:#include math.hclass CCircleprotected:int m_nRadius;public:double m_dMidTime;double m_dGenTime;public:CCircle();CCircle(int radius);void MidpointEllipse(int xc, int yc, int a, int b, int color, CDC *pDC);CCircle:CCircle(int radius)this-m_nRadius=radius;this-m_dGenTime=0.0;this-m_dMidTime=0.0;CCircle:CCircle()this-m_nRadius=200;this-m_dGenTime=0.0;this-m_dMidTime=0.0;void CCircle:MidpointEllipse(int xc, int yc, int a, int b, int color, CDC *pDC)int aa=a*a, bb=b*b;int twoaa=2*aa, twobb=2*bb;int x=0,y=b;int d,dx=0,dy=twoaa*y;d=int(bb+aa*(-b+0.25)+0.5);pDC-SetPixel(xc+x,yc+y,color);pDC-SetPixel(xc+x,yc-y,color);pDC-SetPixel(xc-x,yc+y,color);pDC-SetPixel(xc-x,yc-y,color);while(dxdy)x+;dx+=twobb;if(dSetPixel(xc+x,yc+y,color);pDC-SetPixel(xc+x,yc-y,color);pDC-SetPixel(xc-x,yc+y,color);pDC-SetPixel(xc-x,yc-y,color);d=int(bb*(x+0.5)*(x+0.5)+aa*(y-1)*(y-1)-aa*b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 服务礼仪封面设计课件
- 服务类礼仪模板课件
- 法务晋升述职课件
- 房屋风格介绍课件
- 服务窗口作风建设课件
- 防烫伤小知识课件
- 副胎盘超声检查课件
- 腹痛临床表现课件
- 事业单位财会岗2026高频考题全真模拟试卷及解析
- 关于产品包装变更事宜商洽函(6篇)范文
- 2026年党支部书记党务工作培训练习题及答案
- 2026年中石化笔试题库(含答案)
- 高中美术必修《中国书法和中国画的密切关系》教学设计
- 2026秋沪科版(五四学制)八年级物理上册全册每课知识点清单
- 2026中银数字服务(南宁)有限公司招聘笔试模拟试题及答案详解
- RoHS 3.0 指令 2024-1020-EU 中文版(完整译文 + 新旧对比 + 2027 年实施时间表)
- 交管12123学法减分题库500题(含标准答案+解析2026全国)
- 高中入团积极分子考试题库
- 思想政治教育方法论考题
- 免疫规划知识普及课件
- 雨课堂学堂在线学堂云《学术规范与论文写作指导(四川)》单元测试考核答案
评论
0/150
提交评论