当前位置:文档之家› 计算机图形学实验报告

计算机图形学实验报告

《计算机图形学》实验报告学号: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,单击“画图”菜单,选择“画椭圆”,客户区窗口显示出一个椭圆图案;选择“画圆”,客户区窗口显示出一个圆形。

1、设计思路第一步:使用Visual C++6.0,创建一个单文档应用程序DrawShape 。

第二步:单击Recourse View 视图,选择MENU 项,双击其下的IDR_MAINFRAME 选项,打开菜单资源编辑器,添加主菜单“绘图”,添加子菜单如图1所示。

右键单击菜单项,设置菜单属性,在Menu Item Properties 对话框的Caption 框中输入菜单名称,在ID 框中输入菜单相应的ID 值, 设置菜单属性如表1-1所示。

添加子菜单如图1第三步:按Ctrl+W 打开类向导ClassWizard 对话框,在CDrawShapeTestView 视图类中,分别为ID 值为:ID_RECT 、ID_OVAL 、ID_PLOYGON 的三个菜单项添加COMMAND 消息函数如图2所示,当用户选中相应菜单项时,会执行对应消息的表1-1 设置菜单属性 ID 菜单标题 属性 — 绘图 选中Pop-up -线性画刷 选中Pop-up _ 方形画刷选中Pop-up ID_TOUY1(2)画椭圆(&R)默认 画圆(&C) 默认函数体。

图2 添加消息函数对话框第四步:依次对每个函数单击Edit Code按钮,分别添加菜单的消息函数CMainFrame::OnYuan1()//画圆CMainFrame::OnYuan2()//画圆CMainFrame::OnTuoy1()//画椭圆CMainFrame::OnTuoy2()//画椭圆首先定义两个画刷CBrush *oldBrush,newBrush;newBrush.CreateHatchBrush(HS_CROSS,RGB(0,255,0)); //创建一个绿色的方形新画刷。

newBrush.CreateHatchBrush(HS_BDIAGONAL,RGB(0,255,0) ;//创建一个绿色的线形新画刷oldBrush=dc.SelectObject(&newBrush);//将新画刷赋给旧画刷。

dc.Ellipse(190,200,290,300) ; ; // 绘制绿色线性圆形dc.Ellipse(150,180,340,260);//画绿色线性椭圆dc.Ellipse(190,200,290,300)//画绿色方形圆dc.Ellipse(50,80,240,160); //画绿色方形椭圆dc.SelectObject(oldBrush); // 恢复系统默认的画刷注意:在DrawShapeTestView.cpp文件头部添加如下语句:#include"math.h"#define pi 3.14159262、实验效果及分析分析:在Recourse View视图中,选择MENU项,双击其下的IDR_MAINFRAME选项,打开菜单资源编辑器,添加主菜单“画图(&D)”,添加子菜单。

再在函数void CDrawShapeView::OnYUAN()//画圆void CDrawShapeView::OnTUOY()//画椭圆中定义两个画刷newBrush.CreateHatchBrush(HS_CROSS,RGB(0,255,0));//创建一个绿色的方形新画刷。

newBrush.CreateHatchBrush(HS_BDIAGONAL,RGB(0,255,0);//创建一个绿色的线形新画刷利用画圆和画椭圆函数.Ellipse来画出圆和椭圆五、二维图形的放缩,旋转和对称变换实验内容任务三:实现交互式二维图形的放缩,旋转和对称变换1、设计思路第一步:建立DDAMouseLine工程文件;第二步:向视图类中添加自定义的成员变量用鼠标右键单击视图类,选择“Add Member Variable…”,添加下面三个成员变量。

proctected :int MaxX,MaxY;//屏幕x和y的最大坐标double P[4][3];//变换点double TM[3][3];//平移变换矩阵double TS[3][3];//比例变换矩阵double TR[3][3];//旋转变换矩阵double TF[3][3];//反射变换矩阵double OSquare[4][3]; //矩形坐标int ntype;第三步:单击Recourse View视图,选择MENU项,双击其下的IDR_MAINFRAME选项,打开菜单资源编辑器,添加主菜单“绘图(&D)”和“变换(&T)”,在主菜单“绘图(&D)”下添加子菜单“画矩形”,在主菜单“变换(&T)”下添加子菜单“平移”、“旋转”、“缩放”、“对称”。

在分别在子菜单“平移”、“旋转”、“缩放”、“对称”下添加子菜单“向上”、“向下”、“向左”、“向右”“顺时针”、“逆时针”、“放大”、“缩小”、“X轴”、“Y轴”、“原点”。

生成函数分别为:void CTranView::OnMENUAnticlockwise()//逆时针旋转。

在逆时针旋转时调用Trotate(-30)函数逆时针旋转30度void CTranView::OnMENUClockwise()//顺时针旋转在顺时针旋转时调用Trotate(30)函数顺时针旋转30度void CTranView::OnMENUIncrease()//放大比例在放大比例时调用Tscale(2,2)函数,X、Y分别放大2陪。

相关主题