基本图形生成算法(基于VC++6.0实现)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
仲恺农业工程学院实验报告纸计算科学学院(院、系)信计082 班计算机图形学课学号:200811314211 姓名:孙青海实验日期:2011/5/20 教师评定
实验一基本图形生成算法
一、实验目的与要求:
1. 掌握中点Bresenhanm绘制直线的原理
2. 设计中点Bresenhanm算法
3. 掌握八分法中点Bresenhanm算法绘制圆的原理
4. 设计八分法绘制圆的中点Bresenhanm算法
5. 掌握绘制1/4椭圆弧的上半部分和下半部分的中点Bresenhanm算法原理
6. 掌握下半部分椭圆偏差判别式的初始值计算方法
7.设计顺时针四分法绘制椭圆的中点Bresenhanm算法
二、实验描述:
1. 使用中点Bresenhanm算法绘制斜率为01
≤≤的直线。
k
2. 使用中点Bresenhanm算法绘制圆心位于屏幕客户区中心的圆。
3. 使用中点Bresenhanm算法绘制圆心位于屏幕中心的椭圆。
三、实验结果:
1.打开VC++6.0程序;
2.创建一个MFC工程,命名为exper1;选择单文档和作为静态的DLL,然后完
成创建MFC工程;
3.在ResourceView工作区窗口插入三个Dialog,第一个对话框作为画直线时用户
输入起点坐标和终点坐标使用,第二个对话框作为画圆时用户输入所要画圆的半径使用,第三个对话框作为画椭圆时用户输入所要画椭圆的长半径和短半径
使用;
4.通过右键点击对话框选择建立类向导,因为本对话框是新建对话框还没有建立
类向导,在此要新建一个line类,如下图所示,按照此方法将其他的两个对话框建立类向导分别为画圆建立Round类,画椭圆,建立Ellips类;
5.完成类得建立后,对该对话框中的输入框进行添加变量与其关联,具体步骤如
下图所示,按照此方法将所有的对话框中的输入框进行变量添加;
6.打开Menu菜单中的选项,新建一个画图菜单,在画图菜单中新建直线、圆与
椭圆子菜单,新建方法点击空白方框处右键选择属性,添加标明即可;
7.点击子菜单,这里以直线为例,点击右键选择“建立类向导”,因为此时的直
线的ID为“ID_1”,所以我们选择ID_1,类名选择刚刚建立的line类,按照下图中的方法,点击OK后向导既建立完成,建立完成后的图如下所示;
8.在Class视图框中就会出现刚刚建立的line类、Round类和Ellips类,如下图,
在CExper1View类中添加头文件;
#include "line.h"
#include "Round.h"
#include "Ellips.h"
9.在CExper1View类中添加下图中的变量m_stp记录输入的画直线的起点坐标,
m_endp记录输入的画直线的终点坐标,m_x记录圆和椭圆的长半径(x轴的半径),m_y记录圆和椭圆的短半径(y轴的半径),因为圆的长半径和短相等,而由于我们这里画圆的方法完全采用画椭圆的方法,因此这里也需要长半径和短半径的长度,temp记录工程所要画的图形,在此定义当temp=1时为画直线,当temp=2时为画圆(椭圆);
10.在OnDraw方法中写入以下代码,当temp=1时为画直线的代码,当temp=2时
为画圆(椭圆)的代码,;
11.分别对On1、On2、On3方法赋予实际的操作,主要是传值操作。
void CExper1View::On1()
{
line linep;
if(linep.DoModal() !=IDOK){
return;
}
m_stp.x=linep.m_px0;
m_stp.y=linep.m_py0;
m_endp.x=linep.m_py1;
m_endp.y=linep.m_py1;
temp=1;
InvalidateRect(NULL,true);
UpdateWindow();
}
void CExper1View::On2()
{
Round Roundp;
if(Roundp.DoModal() !=IDOK){ return;
}
m_x=Roundp.m_pr;
m_y=Roundp.m_pr;
temp=2;
InvalidateRect(NULL,true);
UpdateWindow();
}
void CExper1View::On3()
{
Ellips Ellipsp;
if(Ellipsp.DoModal() !=IDOK){ return;
}
m_x=Ellipsp.m_px;
m_y=Ellipsp.m_py;
temp=2;
InvalidateRect(NULL,true);
UpdateWindow();
}
12.实验结果演示
画直线:
画圆:
画椭圆:
四、实验小结
由于平时比较少使用MFC,对其操作过程不是很熟悉,对于一些常见错误很难找到原因,因此对于此工程需要经常练习操作。