




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机图形学实验报告 班级: 姓名: 学号: 指导教师:教 务 处2010年 6 月实验一、一、 实验题目:利用计算机编程语言绘制图形,主要实现以下内容:(1)、Bresenham算法生成斜率在0到1之间的直线(2)、中点算法生成圆(3)、中点算法生成椭圆二、系统分析与设计本实验采用C语言编程,运行环境为TurboC 2.0。三、算法思想及程序实现1、中点算法生成任意斜率直线,并设置线型线宽。(1)算法思想假定直线斜率k在01之间(k的其它取值可以类似处理),当前象素点为(xp,yp),则下一个象素点有两种可选择点P1(xp+1,yp)或P2(xp+1,yp+1)。若P1与P2的中点(xp+1,yp+0.5)称为M,Q为理想直线与x=xp+1垂线的交点。当M在Q的下方时,则取P2应为下一个象素点;当M在Q的上方时,则取P1为下一个象素点。这就是中点画线法的基本原理。下面讨论中点画线法的实现。过点(x0,y0)、(x1, y1)的直线段L的方程式为F(x, y)=ax+by+c=0,其中,a=y0-y1, b=x1-x0, c=x0y1-x1y0,欲判断中点M在Q点的上方还是下方,只要把M代入F(x,y),并判断它的符号即可。为此,我们构造判别式:d=F(M)=F(xp+1, yp+0.5)=a(xp+1)+b(yp+0.5)+c当d0时,M在L(Q点)上方,取P1为下一个象素;当d=0时,选P1或P2均可,约定取P1为下一个象素; 注意到d是xp, yp的线性函数,可采用增量计算,提高运算效率。 若当前象素处于d0情况,则取正右方象素P1(xp+1, yp),要判下一个象素位置,应计算 d1=F(xp+2, yp+0.5)=a(xp+2)+b(yp+0.5)=d+a,增量为a。 若d0时,则取右上方象素P2(xp+1, yp+1)。要判断再下一象素,则要计算d2= F(xp+2, yp+1.5)=a(xp+2)+b(yp+1.5)+c=d+a+b ,增量为ab。画线从(x0, y0)开始,d的初值 d0=F(x0+1, y0+0.5)=F(x0, y0)+a+0.5b,因 F(x0, y0)=0,所以d0=a+0.5b。 由于我们使用的只是d的符号,而且d的增量都是整数,只是初始值包含小数。因此,我们可以用2d代替d来摆脱小数。(2)程序实现#include#include#includevoid myfor(int x,int x1,int y,int color,int k,int x0) for(x=x0;x=1,就把它减去,这样保证d始终在0和1之间。当d0.5时,直线与x+1列垂直网络线交点最接近于当前象素的右上方象素(x+1,y);而d0.5时,更接近于象素(x+1,y),当d=0.5时,与上述二象素一样接近,约定取(x+1,y+1)。令e=d-0.5。则当e大于等于0,下一象素的y下标增加1,则当e0时,下一象素的y下标不增。e 的初始值为-0.5。(2)程序实现#include#include#includeBresenham_Line(x0,y0,x1,y1,color) int i,x,y,dx,dy; float k,e; dx=x1-x0; dy=y1-y0; k=dy/dx; e=-0.5; x=x0; y=y0; for(i=0;i=0) y=y+1; e=e-1; void myinput()int driver,mode; int color; int x0,y0,x1,y1; driver=DETECT; mode=0; initgraph(&driver,&mode,); printf(please input x0,y0,x1,y1,color:); scanf(%d%d%d%d%d,&x0,&y0,&x1,&y1,&color); Bresenham_Line(x0,y0,x1,y1,color); getch(); closegraph(); void main() myinput();实验结果:3、用中点算法实现画圆(1). 算法思想如果我们构造函数 F(x,y)=x2+y2-R2,则对于圆上的点有F(x,y)=0,对于圆外的点有F(x,y)0,对于圆内的点F(x,y)0 。与中点画线法一样,构造判别式:d=F(M)=F(xp+1,yp-0.5)=(xp+1)2+(yp-0.5)2-R2若 d0,则应取P1为下一象素,而且再下一象素的判别式为:d=F(xp+2,yp-0.5)=(xp+2)2+(yp-0.5)2-R2=d+2xp+3若d0,则应取P2为下一象素,而且下一象素的判别式为d=F(xp+2,yp-1.5)=(xp+2)2+(yp-1.5)2-R2=d+2(xp-yp)+5我们这里讨论的第一个象素是(0,R),判别式d的初始值为:d0=F(1,R-0.5)=1.25-R为了进一步提高算法的效率,将上面的算法中的浮点数改写成整数,将乘法运算改成加法运算,即仅用整数实现中点画圆法。(2)程序实现:#include#include#includevoid circlePoint(int x,int y) /*八分法画圆程序*/ circle(320+x*20,240+y*20,3); circle(320+y*20,240+x*20,3); circle(320-y*20,240+x*20,3); circle(320-x*20,240+y*20,3); circle(320-x*20,240+y*20,3); circle(320-x*20,240-y*20,3); circle(320-y*20,240-x*20,3); circle(320+y*20,240-x*20,3); circle(320+x*20,240-y*20,3);void panduan(int x,int y,float d)while(xy) if(d0) d+=2*x+3; x+; else d+=2*(x-y)+5; x+; y-; circlePoint( x,y); MidpointCircle(r) int x,y; float d; x=0;y=r;d=1.25-r; circlePoint(x, y); panduan(x,y,d);void mygetch()getch();void input(int r)printf(please input r:); scanf(%d,&r); getch(); outtextxy(320,245,0); /*原点坐标*/ setcolor(YELLOW); MidpointCircle(r); mygetch(); closegraph(); void main() int r,color; int driver,mode; driver=DETECT; mo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 遗传性肾癌VHL综合征型护理查房
- 特发性肺纤维化合并呼吸衰竭护理查房
- 阿尔山市2025-2026学年八年级下学期语文月考测试试卷
- 安徽省淮北市相山区2024-2025学年高一上学期第二次月考物理试题及答案
- 2025 年小升初忻州市初一新生分班考试英语试卷(带答案解析)-(外研版)
- 2025 年小升初衡水市初一新生分班考试数学试卷(带答案解析)-(冀教版)
- 工程热力学及内燃机原理2012年7月自考试题
- 甘肃省白银十中2024-2025学年八年级下学期期末物理试卷(含答案)
- 进口药品销售合同范本
- 别墅改造租房合同范本
- AI在护理查房中的应用
- 2025版安全生产法培训
- 机动车环检试题及答案
- 钉钉操作培训
- TCAPC 016-2024 院外呼吸慢病健康管理规范
- 地理与劳动教育
- 露天矿山安全知识培训课件
- 人教版(2025新版)七年级下册数学第七章 相交线与平行线 单元测试卷(含答案)
- 《中小企业员工激励机制存在的问题及完善对策研究》4000字
- 第1章 汽车4S店概述
- 厂房消防应急预案
评论
0/150
提交评论