- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
西安交大计算机图形学实验报告精要
计算机图形学实验报告
《计算机图形学课内实验》
实验报告
班级:
姓名:
学号:
日期:2016.10.29
要 求
1.任选四个实验(直线的DDA算法、直线的Bresenham画线算法、中点圆算法、中点椭圆算法)之一来写。
2.实验报告必须上交书面形式(打印好),11月8日前以班级为单位交到西一楼820房间。
一、实验目的及要求
1.1 实验目的:
通过上机编程,实践计算机图形学课上所讲解的各种算法。完成基本的椭圆的绘制,进一步熟悉课上所讲解的算法——中点椭圆算法。
1.2 实验要求:
eq \o\ac(○,1)以绘图区域中心为(0,0)点。
eq \o\ac(○,2)要求能够输入任意椭圆中心坐标(XC,YC)和参数RX和RY的值。
二、实验环境
VS2010、MFC、C
三、实验内容
3.1上机实践准备
由于实验要求实现中点椭圆算法且最好能有图形化界面进行所需的显示,所以我决定采用C语言进行算法的编程,然后有MFC实现交互式界面。首先,在VS2010中建立一个MFC工程和一个Win32控制台程序工程。
3.2 设定画图窗口的坐标原点
由于计算机默认左上角为坐标原点(0,0),这样的设定不符合我们实验中对原点的要求,因此需要编写相关的函数对原点进行平移,使其恰好位于屏幕的正中央。
int transx(int x){
return(x+325);
}
int transy(int y){
return(225-y);
}
这两个函数实现的功能就是完成坐标的平移,使屏幕上显示的坐标系和我们日常用的坐标系一致。
3.3 建立坐标系的建立
接下来,按照调整后的坐标系,编写程序绘制坐标系。建立后的坐标系如下图所示。
3.4 基本算法的实现
在建立完坐标系之后,就可以根据课上所学的中点椭圆算法,编程实现在坐标系中绘制任意的椭圆。详细描述见第四节。
3.5 对程序的修改
在第一次进行测试后,我发现只要是椭圆的长轴半径和短轴半径过大就会出现一定的失真,这是由于数据类型的设置不合适造成溢出而产生的。如下图所示
为了改正这个错误,我重新调整了数据类型,选择用long型去存储数据。
四、数据结构和算法描述
4.1 中点椭圆算法的描述
首先在程序中输入RX和RY,并且得到椭圆(假设中心在原点??上的第一个点:
X0,Y0=(0,ry)
设定算法中的决策参数为:Pk
计算区域1中决策参数的初始值:
P0=RX-RX2RY+14RX2
在区域1中的每一个xi位置,从k=0开始,完成下列测试:如果Pk0,沿中心在0,0的椭圆的下一个点为Xk+1,Yk,并且
Pk+1=Pk+2RY2Xk+1+RY2
否则,沿椭圆的下一个点为Xk+1,Yk-1,并且
Pk+1=Pk+2RY2Xk+1+RY2-2RX2Yk+1
并且直到2RY2Xk≥2RX2Yk
使用区域1中计算的最后点X0,Y0来计算区域2中参数的初始值:
P0=RY2(X0+0.5)2+RX2(Y0-1)2-2RX2RY2
在区域2的每个Yk位置处,从k=0开始,完成下列测试:如果Pk0,沿中心在0,0的椭圆的下一个点为Xk,Yk-1,并且
Pk+1=Pk+RX2-RX2Yk+1
否则,沿椭圆的下一个点为Xk+1,Yk-1,并且
Pk+1=Pk+2RY2Xk+1+RX2-2RX2Yk+1
使用与区域1中相同的X和Y增量进行计算,直到Y=0。
根据椭圆的中心坐标确定其他三个象限中的对称点。
将计算出的每个像素位置进行平移得到实际的轨迹点。在程序中绘制出实际的点
4.2数据结构的使用
在本次实验中,并没有使用特殊的数据结构,主要使用最多的就是数组,用来存储点坐标的信息。
五、调试过程及实验结果
5.1实验结果截图
此图为程序开始运行的MFC页面
程序正在绘制椭圆中心在原点,长轴为100,短轴为60的椭圆:
完成绘制后的结果:
测试绘制椭圆中心不在原点的椭圆,基本满足要求。
测试程序绘制竖椭圆,基本满足要求。
六、总结
通过对上机实践的结果进行分析,可以发现所编写的程序基本达到了该实验的要求,能够输入任意椭圆中心坐标(XC,YC)和参数RX和RY的值,然后进行绘制。但是由于屏幕大小所限制,我的坐标系的坐标范围只是[-325,325],[-225,225],在这种情况下,并不能测试更大坐标情况下该程序的正确性,所以仍然存在可以改进的空间。总体上基本完成了实验的要求。
通过本次上机实践,我对杨老师课上所讲的算法有了更深一步的了解,更加熟悉了中点椭圆算法,并在实现这一算法的过程中发现了一些自己在学习过程中没有考虑的问题,尝试着自己去解决,使自己的编程能力得到了提升。
七、附录(源程序清单)
中点椭圆算
文档评论(0)