西安交大计算机图形学实验报告

上传人:第*** 文档编号:31043420 上传时间:2018-02-04 格式:DOCX 页数:25 大小:56.67KB
返回 下载 相关 举报
西安交大计算机图形学实验报告_第1页
第1页 / 共25页
西安交大计算机图形学实验报告_第2页
第2页 / 共25页
西安交大计算机图形学实验报告_第3页
第3页 / 共25页
西安交大计算机图形学实验报告_第4页
第4页 / 共25页
西安交大计算机图形学实验报告_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《西安交大计算机图形学实验报告》由会员分享,可在线阅读,更多相关《西安交大计算机图形学实验报告(25页珍藏版)》请在金锄头文库上搜索。

1、计算机图形学课内实验实验报告班级:姓名:学号:日期: 一:实验目的及要求(1)理解和掌握计算机中的基本图形绘画算法,包括直线 DDA算法,直线Bresenham算法,圆 Bresenham算法,椭圆 Bresenham算法。(2)学习 MFC类程序编程,巩固提高编程能力。(3)提高调试纠错能力,提高自学能力。二:实验环境Windows 8.1系统,Visual Studio 2015 社区版,MFC 类库。三:实验内容直线的 DDA算法实现。四:数据结构与算法描述(1)问题分析设直线方程 y=kx+b,该算法从直线端点(x1,y1)开始画点,画到(x2,y2)为止,分|k|1 两种情况。|k|

2、1时,方程改为 x=y/k-b/k,以纵坐标为步进,y 每次加 1(取决于 y1小于 y2还是大于 y2) ,x 每次加 1/k(1/k 为正数或负数) ,x 以浮点数计算,画点时取整形数,画到另一端点为止。(2)C+代码表示的算法概述:该程序在对话框中输入(x1,y1) (x2,y2)坐标,点击确定后在用户区画线(使用消息处理程序) 。画线算法为程序核心,如下:CDialog:OnOK();UpdateData(TRUE); /将输入对话框的数据送入变量,该对话框类包含四个成员变量:/m_x1,m_y1为第一个点坐标,m_x2,m_y2为第二个点坐标CDC* p = k; /创建CDC 对象

3、指针,用于调用画点函数p-SetViewportOrg(683, 300); /坐标轴提前画好,原点在(683,300)int i, x = m_x1, y = m_y1;float xi, yi, st, dx = m_x2 - m_x1, dy = m_y2 - m_y1, xf = (float)x, yf = (float)y;st = abs(dx); /设定步进,以下三行代码确定横坐标差和纵坐标差中较大的,abs()为绝对值函数if (abs(dx) SetPixel(CPoint(x, -y), RGB(255, 0, 0); /画初始点,mfc坐标系y轴正方向朝下for (i

4、= 1; i SetPixel(CPoint(x, -y), RGB(255, 0, 0); /循环画点Sleep(10);(3)执行结果事例输入:绘制结果:(4)遇到的问题和解决手段在编写界面时不知道如何实现在菜单点击后出现上图所示对话框,查询得知需设置消息处理程序打开对话框。对话框点击确定后仅仅对话框消失不画线,研究后发现需在其他文件内声明函数。画线时发现只能画出平行于 x轴或 y轴的线,研究后发现画点时不能用整形数计算下一个点的位置,而应该用浮点数计算。六:总结心得体会:编写程序时在建立界面和对话框,让程序协调运行方面耗费了较大时间精力,绘制算法部分则相对简单。本次实验,让我对各类绘制算

5、法的原理有了较好的认识,了解了计算机内绘制的方式。除了学习到计算机内的绘制算法以外,还巩固了编程知识,学习了文件协调工作的手段,学习到界面的设计和运行方式。改进意见:本程序无法自行控制线色,应当再编写程序使得使用者可以自行控制线色,时间仓促未能完成。七:附录(源程序清单)有重要改动的相关文件共计 10个,包括MainFrm.h,MFCApplication3.h,MFCApplication3Doc.h,MFCApplication3View.h,Clinedda.h 五个头文件及同名源文件。 (MFCApplication3 为工程名,8个文件内含有直线 Bresenham算法,圆 Bres

6、enham算法,椭圆 Bresenham算法的使用,这里未给出)(1)MainFrm.h/ MainFrm.h : CMainFrame 类的接口/#pragma onceclass CMainFrame : public CFrameWndprotected: / 仅从序列化创建CMainFrame();DECLARE_DYNCREATE(CMainFrame)/ 特性public:/ 操作public:/ 重写public:virtual BOOL PreCreateWindow(CREATESTRUCT/ 实现public:virtual CMainFrame();#ifdef _DEB

7、UGvirtual void AssertValid() const;virtual void Dump(CDumpContext#endifprotected: / 控件条嵌入成员CToolBar m_wndToolBar;CStatusBar m_wndStatusBar;/ 生成的消息映射函数protected:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);DECLARE_MESSAGE_MAP()public:afx_msg void OnPointLinedda();afx_msg void OnPointLinebre();

8、afx_msg void OnPointCircle();afx_msg void OnPointEllipse();(2)MFCApplication3.h/ MFCApplication3.h : MFCApplication3 应用程序的主头文件/#pragma once#ifndef _AFXWIN_H_#error 在包含此文件之前包含“stdafx.h”以生成 PCH 文件#endif#include resource.h / 主符号/ CMFCApplication3App:/ 有关此类的实现,请参阅 MFCApplication3.cpp/class CMFCApplicati

9、on3App : public CWinApppublic:CMFCApplication3App();/ 重写public:virtual BOOL InitInstance();virtual int ExitInstance();/ 实现afx_msg void OnAppAbout();DECLARE_MESSAGE_MAP();extern CMFCApplication3App theApp;(3) MFCApplication3Doc.h/ MFCApplication3Doc.h : CMFCApplication3Doc 类的接口/#pragma onceclass CMFC

10、Application3Doc : public CDocumentprotected: / 仅从序列化创建CMFCApplication3Doc();DECLARE_DYNCREATE(CMFCApplication3Doc)/ 特性public:/ 操作public:/ 重写public:virtual BOOL OnNewDocument();virtual void Serialize(CArchive#ifdef SHARED_HANDLERSvirtual void InitializeSearchContent();virtual void OnDrawThumbnail(CDC

11、#endif / SHARED_HANDLERS/ 实现public:virtual CMFCApplication3Doc();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext#endifprotected:/ 生成的消息映射函数protected:DECLARE_MESSAGE_MAP()#ifdef SHARED_HANDLERS/ 用于为搜索处理程序设置搜索内容的 Helper 函数void SetSearchContent(const CString#endif / SHARED_

12、HANDLERS;(4)MFCApplication3View.h/ MFCApplication3View.h : CMFCApplication3View 类的接口/#pragma onceclass CMFCApplication3View : public CViewprotected: / 仅从序列化创建CMFCApplication3View();DECLARE_DYNCREATE(CMFCApplication3View)/ 特性public:CMFCApplication3Doc* GetDocument() const;/ 操作public:/ 重写public:virtua

13、l void OnDraw(CDC* pDC); / 重写以绘制该视图virtual BOOL PreCreateWindow(CREATESTRUCTprotected:virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);/ 实现public:virtual CMFCApplication3View();#ifdef _

14、DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext#endifprotected:/ 生成的消息映射函数protected:DECLARE_MESSAGE_MAP()public:afx_msg void Goline_dda();afx_msg void Goline_bre();afx_msg void Gocircle();afx_msg void Goellipse();#ifndef _DEBUG / MFCApplication3View.cpp 中的调试版本inline CMFCApplicat

15、ion3Doc* CMFCApplication3View:GetDocument() const return reinterpret_cast(m_pDocument); #endif(5)MainFrm.cpp/ MainFrm.cpp : CMainFrame 类的实现/#include stdafx.h#include MFCApplication3.h#include MainFrm.h#ifdef _DEBUG#define new DEBUG_NEW#endif/ CMainFrameIMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)BEGIN

16、_MESSAGE_MAP(CMainFrame, CFrameWnd)ON_WM_CREATE()ON_COMMAND(ID_POINT_LINEDDA, &CMainFrame:OnPointLinedda)ON_COMMAND(ID_POINT_LINEBRE, &CMainFrame:OnPointLinebre)ON_COMMAND(ID_POINT_CIRCLE, &CMainFrame:OnPointCircle)ON_COMMAND(ID_POINT_ELLIPSE, &CMainFrame:OnPointEllipse)END_MESSAGE_MAP()static UINT indicators =ID_SEPARATOR, / 状

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号