计算机图形学实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《计算机图形学》

实验报告

学号:0908610211

姓名:宋雪英

班级:计算机0961

项目:

1.利用其它两种画直线方法实现放大10陪显示方法,交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。

2.利用方形、线性两种画刷来绘制圆和椭圆。

3.实现交互式二维图形的放缩,旋转和对称变换

2012年12月25日

基本图形的生成技术

一、实验目的

在一个图形系统中,基本图形(也称为图元、图素等)的生成技术是最基本的,任何复杂的图形都是由基本图形组成的,基本图形生成的质量直接影响该图形系统绘图的质量。所以,需要设计出精确的基本图形生成算法,以确保图形系统绘图的精确性。本次实验的目的就是利用Bresenham 算法和中心画线法两种画直线方法实现放大10陪显示方法,交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。利用方形、线性两种画刷来绘制圆和椭圆。实现交互式二维图形的放缩,旋转和对称变换。

二、实验任务

1.利用其它两种画直线方法实现放大10陪显示方法,交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。

2.利用方形、线性两种画刷来绘制圆和椭圆。

3.实现交互式二维图形的放缩,旋转和对称变换。

三、画直线的实验内容

任务一:利用其它两种画直线方法实现放大10陪显示方法交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。

1、设计思路

第一步:建立DDAMouseLine工程文件;

第二步:向视图类中添加自定义的成员变量

用鼠标右键单击视图类,选择“Add Member Variable…”,添加下面三个成员变量。

proctected :

CPoint m_p1; //起点

CPoint m_p2; //起点

CPoint m_p; //点击鼠标时点的取值

第三步:向视图类中添加自定义的成员函数原型:

public:

V oid DDAMouseLine(CDC *pDC, int x0, int y0, int x1, int y1, COLORREF color);

Line()函数以当前位置所在的点为直线的起点,另指定一个点为直线的终点,画出一段直线。

第四步:在视图类CPP文件的构造函数中初始化成员变量。

视图类的构造函数名与该视图类的名字相同。在视图类中选择构造函数,如:CDDAMouseLineView(),并赋值:m_p1.x=100; m_p1.y=100; //起点

m_p.x=100;m_p.y=100;

m_p2.x=600; m_p2.y=400; //终点

第五步:在视图类的OnDraw()函数中加入下列代码,画出网格,实现视图绘图。

//画网格

int gi,gj;

//画横线

pDC->TextOut(90,90,"(100,100)");

pDC->MoveTo(100,100);

for(gj=100;gj<=400;gj=gj+10)

{

pDC->MoveTo(100,gj);

pDC->LineTo(600,gj);

}

//画竖线

pDC->MoveTo(100,100);

for (gi=100;gi<=600;gi=gi+10)

{

pDC->MoveTo(gi,100);

pDC->LineTo(gi,400);

}

pDC->TextOut(590,410,"(600,400)");

pDC->SelectStockObject(NULL_BRUSH);

第六步:向视图类中添加鼠标OnLButtonDown()函数消息响应函数

OnLButtonDown(UINT nFlags, CPoint point);

在鼠标处理函数中,point参数代表鼠标热点处的坐标位置,point.x为横坐标,point.y为纵坐标。默认坐标原点(0,0)位于窗口的左上角。由于应用程序要求自动捕获鼠标事件,因此应当采用Windows事件处理函数,而不是成员函数。if (m_p.x<=m_p2.x && m_p.y <= m_p2.y)

{

pDC->SetPixel(m_p.x,m_p.y,RGB(255,0,0));

pDC->Ellipse(m_p.x-5,m_p.y-5,m_p.x+5,m_p.y+5);

}

m_p.x=m_p.x+10;

m_p.y=m_p.x*0.6+40;

m_p.y=(int)((m_p.y+5)/10)*10;

//将从(100,100)以10为单位,计算出直线上各个像素位置。

pDC->SetPixel(m_p.x,m_p.y,RGB(255,0,0));

pDC->Ellipse(m_p.x-5,m_p.y-5,m_p.x+5,m_p.y+5);

//调用自定义的成员函数,用鼠标画直线。

2、实验效果及分析

分析:先在OnDraw()函数中画出网格,再在鼠标OnLButtonDown()函数中获取像素值并放大10陪,用DDAMouseLine()函数用Bresenham算法和中心画线算法画出放大10陪的直线。

四、绘制圆和椭圆实验内容

任务二:利用方形、线性两种画刷来绘制圆和椭圆创建一个单文档应用程序DrawShapeTest创建一个单文档应用程序DrawShapeTest,单击“画图”菜单,选择“画椭圆”,客户区窗口显示出一个椭圆图案;选择“画圆”,客

相关文档
最新文档