计算机图形学实验报告3
网工二班 陈衍席1205110125 第三章圆和椭圆生成算法 3.1实验原理 Bresenham 算法 3.2实验内容 请用Visual C++实现圆和椭圆的Bresenham算法。 实验环境:Visual C++o 3.3 Visual C++实现圆的Bresenham生成算法。 实验环境:Visual C++ 程序实现步骤: (1) 建立MidPointCircle工程文件; (2) 右击CMidPointCircleView类,建立成员函数 void MidpointCircle(CDC *pDC,int x0, int yO, int r, COLORREF color) int CirPot(CDC *pDC,int xO, int yO, int x, int y, COLORREF color) (3) 编写成员函数代码,程序如下: // MidPointCircleView.cpp : implementation of the CMidPointCircleView class // #include “stdafx.h1 #include “MidPointCircle.h“ #include “MidPointCircleDoc.h“ #include “MidPointCircleView.h“ #ifdef .DEBUG #define new DEBUG_NEW #undefTHIS_FILE static char THIS_FILE[] = _FILE—; #endif IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIH // CMidPointCircleView IMPLEMENT_DYNCREATE(CMidPointCircleView, CView) BEGIN_MESSAGE_MAP(CMidPointCircleView, CView) // ((AFX_MSG_MAP(CMidPointCircleView) // NOTE - the Class Wizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}} AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView: :OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView: :OnFilePrintPreview) END_MESSAGE_MAP() 〃/////////////////////////////////////////////////////////////////////////// // CMidPointCircleView construction/destruction CMidPointCircleV iew:: CMidPointCircleV iew() ( // TODO: add construction code here } CMidPointCircleV iew:: -CMidPointCircleV iew() ( } BOOL CMidPointCircleView: :PreCreateWindow(CREATESTRUCT } 〃/////////////////////////////////////////////////////////////////////////// // CMidPointCircleView drawing void CMidPointCircleView::OnDraw(CDC* pDC) ( CMidPointCircleDoc * pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here MidpointCircle(pDC, 100, 100, 80, RGB(255,0,0)); MidpointCircle(pDC,500, 300, 60, RGB(0,255,0)); } //〃〃/〃〃〃//〃〃///〃〃/〃////〃〃//〃〃///〃〃/〃〃//〃〃///〃〃//〃〃/〃 // CMidPointCircleView printing BOOL CMidPointCircleView::OnPreparePrinting(CPrintInfo* plnfo) ( // default preparation return DoPreparePrinting(pInfo); } void CMidPointCircleView::OnBeginPrinting(CDC* /*pDC*/, CPrintlnfo* /*plnfo*/) ( // TODO: add extra initialization before printing } void CMidPointCircleView::OnEndPrinting(CDC* /*pDC*/, CPrintlnfo* /*plnfo*/) ( // TODO: add cleanup after printing } //〃〃/〃〃〃//〃〃///〃〃/〃////〃〃//〃〃///〃〃/〃〃//〃〃///〃〃//〃〃/〃 // CMidPointCircleView diagnostics #ifdef .DEBUG void CMidPointCircleView::AssertValid() const ( CV iew:: AssertV alid(); } void CMidPointCircleView::Dump(CDumpContext } CMidPointCircleDoc* CMidPointCircleView: :GetDocument() // non-debug version is inline ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMidPointC