计算机图形学实验报告

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

计算机图形学

实习报告

姓名:

学号:

专业:

学院:

实习性质:

指导教师:

实习时间:

实习成绩:指导教师签名:

目录(一)基本图元绘制

(二)图形变换

(三)曲线曲面

(一)基本图元绘制

一、实验名称

《基本图元绘制》

二、实验目的

1.学会在Visual Studio 2010中新建MFC工程;

2.掌握在MFC工程中编写计算机图形学算法的方法;

3.至少掌握一种直线画线算法(DDA画线法、中点画线法、Bresenham画线法)的实现;

4.至少掌握一种画圆算法(中点画圆法、Bresenham画圆法)的实现;

三、实验内容

1. 直线画线算法(DDA画线法、中点画线法、Bresenham画线法)的实现;

2. 画圆算法(中点画圆法、Bresenham画圆法)的实现;

四、实验步骤

1打开Visual Studio 2010软件

在开始菜单找到Microsoft Visual Studio 2010,单击Microsoft Visual Studio 2010打开。

2新建MFC工程

单击File->New->Project菜单

所示:

在弹出的对话框中单击Next

在弹出的对话框中,按下图进行设置,设置完成后,单击Finish

生成的工程如下图所示:

打开*View.cpp文件,找到OnDraw函数

将对/*pDC*/的注释去掉

在OnDraw函数中设计算法,下图为其中的一种画线算法

Studio 2010 C++ 调试学习更多技巧)

确认程序没有错误后,对程序进行编译:

编译完成后,可执行程序

上述示例代码的执行效果如下图所示。

4画线算法设计

选择DDA画线算法、中点画线算法或者Bresenham画线算法的一种,绘制从(200,200)到(1600,1000)的直线。

DDA绘制代码如下:

void DDA(int x1, int y1, int x2, int y2, CDC* pDC)

{

double dx, dy, e, x, y;

dx = x2 - x1;

dy = y2 - y1;

x = x1;

y = y1;

e = (dx > dy) ? dx : dy;

dx /= e;

dy /= e;

for (int i = 0; i <= e; i++)

{

pDC->SetPixel(int(x + 0.5), int(y + 0.5), RGB(255, 0, 0));

x += dx;

y += dy;

}

}

// Cwujiafeng02View 绘图

void Cwujiafeng02View::OnDraw(CDC* pDC)

{

Cwujiafeng02Doc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

if (!pDoc)

return;

DDA(200, 200, 1600, 1000, pDC);

// TODO: 在此处为本机数据添加绘制代码

}

绘制结果如下:

5画圆算法设计

选择中点画圆法或Bresenham画圆法,绘制中点在(200,200)、半径为100的圆。

绘制代码如下:

//中点画圆算法

void MidpointCircle(int R,CDC* pDC)

{

int x, y;

int d;//判别结果

x = 0; y = R; d = 1 - R;

while (x < y)

{

if (d < 0)

{

d += 2 * x + 3;

x++;

}

else

{

d += 2 * (x - y) + 5;

x++;

y--;

}

int x1 = x + 200;

int y1 = y + 200;

pDC->SetPixel(x1, y1, RGB(255, 0, 0));

x1 = -x + 200;

y1 = y + 200;

pDC->SetPixel(x1, y1, RGB(255, 0, 0));

x1 = x + 200;

y1 = -y + 200;

pDC->SetPixel(x1, y1, RGB(255, 0, 0));

x1 = -x + 200;

y1 = -y + 200;

pDC->SetPixel(x1, y1, RGB(255, 0, 0));

//另外半个圆

x1 = x + 200;

y1 = y + 200;

pDC->SetPixel(y1, x1, RGB(255, 0, 0));

x1 = -x + 200;

y1 = y + 200;

pDC->SetPixel(y1, x1, RGB(255, 0, 0));

x1 = x + 200;

y1 = -y + 200;

pDC->SetPixel(y1, x1, RGB(255, 0, 0));

x1 = -x + 200;

y1 = -y + 200;

pDC->SetPixel(y1, x1, RGB(255, 0, 0));

}

}

// CMidpointCircleView 绘图

void CMidpointCircleView::OnDraw(CDC* pDC)

{

CMidpointCircleDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

if (!pDoc)

return;

MidpointCircle(100, pDC);

// TODO: 在此处为本机数据添加绘制代码

相关文档
最新文档