计算机图形学实验报告一

计算机图形学实验报告一

ID:38527601

大小:109.02 KB

页数:5页

时间:2019-06-14

计算机图形学实验报告一_第1页
计算机图形学实验报告一_第2页
计算机图形学实验报告一_第3页
计算机图形学实验报告一_第4页
计算机图形学实验报告一_第5页
资源描述:

《计算机图形学实验报告一》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验一直线、圆、椭圆的生成算法一、实验目的与内容目的:利用实验使我对所学的图形生成算法加深印象,并且练习书写规范的实验报告格式。1、了解VC编程环境中常用控件命令和绘图函数,掌握处理图形的基本方法;2、实现直线生成算法:数值微分法、中点画线法、Bresenham画线法;3、实现圆的生成算法:简单画圆法、中点画圆法、Bresenham画圆法;4、实现椭圆生成算法:中点画椭圆法。二、实验前准备:算法分析使用开发环境VC++6.0,建立工程MFCAppWizardexe,选择单文档。进入IDR_MAINFRAME,编辑菜单栏,对需要处理的菜单项标题“建立类向导”,添加消息映射函数,在映射

2、的函数处添加相应算法的程序代码,就可以完成整个程序。算法的学习和理解是图形学学习的重要部分,以下对各种算法进行分析和总结:1、DDA算法生成直线斜率是DDA算法的关键,用两点坐标很容易可以得到斜率k,但这里要注意k是float。如果k的绝对值在0和1之间,每次画点x++,y+k再进行四舍五入(因为x此时比y的变化快)。否则,y++。也就是为了保持每次+k(或1/k)要小于1。不用对k的正负有太多考虑,例如point1(100,100),point2(200,200),可能得到k=-1,这时我们就从point1开始画点,所得的结果是相同的。2、中点画线法判别式是中点画线法的关键,(0

3、<=k<=1)判别式是为了判断下一个点是在当前点正右边还是右上方,是和中点比较的结果。d的含义下一个点到中点的垂直距离,它的正负可以做下一个位置的判断。初值:d=2*a+b,增量:上一个点d>=0,则d+2*a,上一个点d<=0,则d+2*(a+b)。3、Bresenham算法生成直线由误差d的符号来决定下一个像素是在正右方合适右上方。d的实际意义是实际点到模拟点的垂直距离,我们让它保持在1以内(>=1时,做-1)。d>=0.5,取右上方的点,<0.5取正右方的点。为了执行效率,我们不需要斜率k,而是直接用dx,dy参与计算。e是d的升级版,2e*dx代替e,e每次+2dy,>=0

4、则取右上方点,e-2dx。(替换规则2dx=1,2dy=k)。4、中点画圆法中点法是利用将中点坐标代入到判别式中,通过判断得到点的位置(仅有两种情况)。圆有很好的对称性,八对称性(其实是n对称性),只要求出右上方的八分之一部分就可以得到整个圆弧上的坐标显然,判别式值小于0,中点在圆内,取正右方的点,d+2x+3;判别式大于等于0,中点在圆外或圆上,取右下方的点,d+2(x-y)+5;d的初值,将(1,R-0.5)代入判别式,=1.25-R。为了提高效率,我们转化为整数运算,e=d-0.25=1-R。x++直到x>y。5、Bresenham算法生成圆算法在这两种图形的生成中都是最有效

5、率的,要找到最接近于实际点的点。d1和d2分别是y到右上和正右方距离的平方,将d=d1-d2作为判别的误差。当d<0时,则x++,d=d+4x+6;>=0则,x++,y--,d=d+4(x-y)+10;注意:应该先做d的运算。判别式的初值,d0=3-2R。(推导过程在这里不做进一步阐述)6、中点画椭圆法椭圆具有四对称性,因此我们只需要找到右上方的点即可。需要考虑的是,它在这四分之一弧上斜率会经过-1,也就是说,x和y变化速度的谁大谁小在这个过程不是一定的。因此整个椭圆要分为两个部分来考虑。判断方法,b2x+1

6、个中点是(x+1,y+0.5),将它代入到椭圆的方程中可以得到d=b2(x+1)2+a2(y-0.5)2-a2b21)若d<0,中点在椭圆内,可得正右方为(x+1,y),通过推导可得d=d+b2(2x+3)2)d>=0,中点在椭圆外,可得为右下方的像素点,d=d+b22x+3+2a2(1-y)3)判别式的初值,d=b2+a2(-b+0.25)下面我们来考虑下半部分,1)若d<0,中点在椭圆内,可得右下方为(x+1,y-1),可得d=d+2b2x+1+a2(-2y+3)2)d>=0,中点在椭圆外,可得为正下方的像素点,d=d+2a2(-2y+3)三、具体算法提炼1、DDA算法生成直线

7、1)通过直线L的两个端点P0x0,y0和P1x1,y1,得到直线L的float型斜率k=y1-y0x1-x0,画出起点P0;2)点Pixi,yi的下一个要求的点为Pi+1xi+1,yi+1;若

8、k

9、>1,则xi+1=xi+1,yi+1=round(yi+k);(注:round为求四舍五入);否则,yi+1=yi+1,xi+1=round(xi+1/k);3)当y=y1(或x=x1)结束,否则转到2)。2、中点画线法1)通过直线L的两个端点P0x0,y0和P1x1,y1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。