基本图形生成算法(基于VC++6.0实现)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,对其操作过程不是很熟悉,对于一些常见错误很难找到原因,因此对于此工程需要经常练习操作。

相关文档
最新文档