文档库 最新最全的文档下载
当前位置:文档库 › 计算机图形学报告

计算机图形学报告

计算机图形学报告
计算机图形学报告

计算机图形学实验报告

姓名:刘肖飞

班级:计算机01

学号:10055015

一、实验目的

○1掌握直线段的Bresenham生成算法,能生成不同斜率的直线

○2掌握基本曲线的生成算法,并用C/VC++实现算法,包括圆,椭圆

的生成算法。

○3通过实验对计算机图形显示系统有一定的了解,图形显示技术的函

数实现。

二、运行环境

Windows 7操作系统,2G内存,VS2010,MFC

三、实验内容

○1Bresenham直线的生成算法实现

○2中点画圆的算法实现

○3中点椭圆的算法实现

四、实验原理

○1Bresenham直线的生成算法

直线的Bresenham算法

本算法由Bresenham在1965年提出。设直线从起点(x1, y1)到终点(x2, y2)。直线可表示为方程y=mx+b。其中

b = y1 - m * x1,

我们的讨论先将直线方向限于1a象限(图2.1.1)在这种情况下,当直线光栅化时,x每次都增加1个单元,即

xi+1=xi+1

而y的相应增加应当小于1。为了光栅化,yi+1只可能选择如下两种位置之一(图2.1.2)。

图2.1.2 yi+1的位置选择yi-1=yi或者yi+1=yi+1

选择的原则是看精确值y与yi及yi+1的距离d1及d2的大小而定。计算式为:

y=m(xi+1)+b (2.1.1)

d1=y-yi (2.1.2)

d2=yi+1-y (2.1.3)

如果d1-d2>0,则yi+1=yi+1,否则yi+1=yi。因此算法的关键在于简便地求出d1-d2的符号。将式(2.1.1)、(2.1.2)、(2.1.3)代入d1-d2,得

用dx乘等式两边,并以Pi=dx(d1-d2)代入上述等式,得

Pi=2xidy-2yidx+2dy+dx(2b-1) (2.1.4)

d1-d2是我们用以判断符号的误差。由于在1a象限,dx总大于0,所以Pi仍旧可以用作判断符号的误差。Pi+1为:

Pi+1=Pi+2dy-2dx(yi+1-yi) (2.1.5)

误差的初值P1,可将x1, y1,和b代入式(2.1.4)中的xi, yi 而得到:

P1=2dy-dx

综述上面的推导,第1a象限内的直线Bresenham算法思想如下:

1、画点(x1, y2); dx=x2-x1; dy=y2-y1;

计算误差初值P1=2dy-dx; i=1;

2、求直线的下一点位置:

xi+1=xi+1;

if Pi>0 则yi+1=yi+1;

否则yi+1=yi;

3、画点(xi+1, yi-1);

4、求下一个误差Pi+1;

if Pi>0 则Pi+1=Pi+2dy-2dx;

否则Pi+1=Pi+2dy;

5、i=i+1; if i

Bresenham算法的优点是:

1、不必计算直线之斜率,因此不做除法;

2、不用浮点数,只用整数;

3、只做整数加减法和乘2运算,而乘2运算可以用硬件移位实现。

Bresenham算法速度很快,并适于用硬件实现。

○2中点画圆的算法

如图所示,函数为F(x, y)=x2+y2–R2的构造圆,圆上的点为F(x, y)=0,圆外的点F(x, y)>0,圆内的点F(x, y)<0,构造判别式:d=F(M)=F(x p+1, y p–0.5)=(x p+1)2+(y p–0.5)2

若d<0,则应取P1为下一像素,而且下一像

素的判别式为

d=F(x p+2, y p–0.5)=

(x p+2)2+(y p–0.5)2–R2=d+2x p+3

若d≥0,则应取P2为下一像素,而且下一像素的判别式为

d=F(x p+2, y p–1.5)= (x p+2)2+(y p–1.5)2–R2=d+2(x p–y p)+5

我们讨论按顺时针方向生成第二个八分圆,则第一个像素是(0, R),判别式d的初始值为

d0=F(1, R–0.5)=1.25–R

○3中点椭圆的算法

下面讨论椭圆的扫描转换中点算法,设椭圆为中心在坐标原点的标准椭圆,其方程为

F(x, y)=b2x2+a2y2–a2b2=0

(1)对于椭圆上的点,有F(x, y)=0;

(2)对于椭圆外的点,F(x, y)>0;

(3)对于椭圆内的点,F(x, y)<0。

以弧上斜率为–1的点作为分界将第一象限

第一象限的椭圆弧

M

P2

P1

P=(x p, y p)

上半部分

下半部分

二分量相等的法向量

y

x

椭圆弧分为上下两部分(如图所示)。

法向量:

22(,)i j 2i 2j F F

N x y b x a y x y ??=

+=+??

22(1)(0.5)i i b x a y +<-

而在下一个点,不等号改变方向,则说明椭圆弧从上部分转入下部分。

与中点绘制圆算法类似,一个像素确定后,在下面两个候选像素点的中点计算一个判别式的值,再根据判别式符号确定离椭圆最近的点。先看椭圆弧的上半部分,具体算法如下:

假设横坐标为x p 的像素中与椭圆最近点为(x p , y p ),下一对候选像素的中点应为(x p +1,y p –0.5),判别式为

222222

1(1,0.5)(1)(0.5)p p p p d F x y b x a y a b =+-=++--

10d <,表明中点在椭圆内,应取正右方像素点,判别式变为

22222221

1(2,0.5)(2)(0.5)(23)p p p p p d F x y b x a y a b d b x '=+-=++--=++

若10d ≥,表明中点在椭圆外,应取右下方像素点,判别式变为

2222221222

1(2, 1.5)(2)( 1.5) (23)(22)p p p p p p d F x y b x a y a b d b x a y '=+-=++--=+++-+

判别式1d 的初始条件确定。椭圆弧起点为(0, b ),第一个中点为(1,b – 0.5),对应判别式为

222222210(1,0.5)(0.5)(0.25)d F b b a b a b b a b =-=+--=+-+

在扫描转换椭圆的上半部分时,在每步迭代中需要比较法向量的两个分量来确定核实从上部分转到下半部分。在下半部分算法有些不

同,要从正上方和右下方两个像素中选择下一个像素。在从上半部

分转到下半部分时,还需要对下半部分的中点判别式进行初始化。

即若上半部分所选择的最后一个像素点为(x p, y p),则下半部分中点

判别式应在(x p+0.5, y p–1)的点上计算。其在正下方与右下方的增

量计算同上半部分。

五、实验步骤与结果分析

○1MFC框架的建立. 在VS2010中新建项目,选择MFC项目,根据提

示建立单文档的MFC项目,其他选择默认即可.MFC项目建立之后,

然后根据我们程序的功能,为MFC建立菜单,选择MFC的“资源”视图,

在其中点击Menu选项,生成的菜单上点击最右边生长点,编辑为“绘

图函数“,再为其设置子菜单,分别为”Bresenham画线“、“中点画圆”、

“中点椭圆”,他们的ID分别为

ID_DRAW_BresenhamID_DRAW_MidPointCircleID_DRAW_MidEl

lipse,然后再类向导中为其添加消息响应函数,分别为

OnDRAWMidEllipse()OnDRAWMidpointCircle()

OnDRAWMidEllipse() 之后我们就可以在函数下面添加各种画图代码了。

○2为了更好的实现交互能力,我设计了三个模态对话框,如下图所示:

三个对话框分别对应三个不同的类,均在类向导中加以声明。为了

完成交互,还必须为各个编辑框指定控件变量,也是在类向导中完

成。具体的工作在此不再赘述,其实这是最好时间的工作,但是我

们在这里的重点是画图,而不是学习MFC。

○3之后就是在图形中建立坐标系统,这一点倒是花费了很长的时间,

因为MFC有两种坐标系统,一个是逻辑坐标,一个是设备坐标,设

备坐标下又分为屏幕坐标、窗口坐标、客户区坐标。他们之间的对

应关系不是那么简单,但是它有一点很重要,逻辑坐标的原点需要

经过映射后才能在图形中显示,而映射后的那个点正事设备坐标系

的原点;视口的坐标原点可以任意移动,但其零点始终在客户区左

上角。我们画图中所使用的函数都是逻辑坐标。一下代码是我对坐

标系的设置:

void CGraphView::OnDraw(CDC* pDC)

{

CGraphDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

CRectRect; //获取客户区尺寸

GetClientRect(&Rect);

pDC->SetMapMode(MM_ISOTROPIC); //设置映射模式,此模式下坐标的方向和单位长度的像素数可以调整

pDC->SetViewportOrg(Rect.Width()/2,Rect.Height()/2);//将视口坐标移动到客户区中点处pDC->SetWindowExt(800,-600);

pDC->SetViewportExt(800,600);//以上代码是为单位逻辑长度的像素数设置,这里用1:1来绘制pDC->MoveTo(-400,0);

pDC->LineTo(400,0);

pDC->LineTo(390,10);

pDC->MoveTo(400,0);

pDC->LineTo(390,-10);

pDC->TextOut(390,-10,"x");

pDC->MoveTo(0,-Rect.Height()/2);

pDC->LineTo(0,Rect.Height()/2);

pDC->LineTo(-10,Rect.Height()/2-10);

pDC->MoveTo(0,Rect.Height()/2);

pDC->LineTo(10,Rect.Height()/2-10);

pDC->TextOut(10,Rect.Height()/2-10,"y");

}

○4鼠标右键单击时显示坐标消息提示框的功能

在MFC中,鼠标右键单击是一个事件,事件要通过发送消息来响应

函数,在此工程中,我们移动鼠标时,它的坐标应该实时更新,当

我们右键单击时,会显示出一个消息框。因此我们的函数定义为:void CGraphView::OnMouseMove(UINT nFlags, CPoint point)

{

CRectRect; //获取客户区尺寸

GetClientRect(&Rect);

point.x-=Rect.Width()/2;

point.y=Rect.Height()/2-point.y;

m_MousePos=point;

CView::OnMouseMove(nFlags, point);

}

void CGraphView::OnRButtonDown(UINT nFlags, CPoint point)

{

CStringstr;

str.Format("x位置:%d,y位置:%d",m_MousePos.x,m_MousePos.y);

MessageBox(str,"鼠标当前位置",MB_OK);

CView::OnRButtonDown(nFlags, point);

}

截图如下:

鼠标的位置由于截图的原因显示不出来。

○5Bresenham画线算法

在OnDRAWBresenham()函数中添加如下代码

void CGraphView::OnDRAWBresenham()

{

// TODO: Add your command handler code here

CBresenhamdlg(this);

if(dlg.DoModal()==IDOK) //创建和显示模态对话框

BresenhamLine(dlg.m_LineX1,dlg.m_LineY1,dlg.m_LineX2,dlg.m_LineY2);

elsereturn;

}

其中BresenhamLine函数的实现见附录

○6中点画圆

在OnDRAWMidpointCircle()函数中添加如下代码void CGraphView::OnDRAWMidpointCircle()

{

// TODO: Add your command handler code here

CMidCircle dlg(this);

if(dlg.DoModal()==IDOK)

circleMidPoint(dlg.m_CircleX,dlg.m_CircleY,dlg.m_CircleR);

else return;

}

其中circleMidPoint函数的实现见附录

○7中点椭圆

在OnDRAWMidEllipse()函数中添加如下代码

void CGraphView::OnDRAWMidEllipse()

{

// TODO: Add your command handler code here

CMidEllispedlg(this);

if(dlg.DoModal()==IDOK)

EllipseMidPoint(dlg.m_EX,dlg.m_EY,dlg.m_ERx,dlg.m_ERy);

elsereturn;

}

其中EllipseMidPoint函数的实现见附录

○8运行结果:

在具体实现画圆时每执行八点画法之后停顿300ms

○9结果分析

以上图形的显示均在预期结果之内,符合算法的思想,运行结果正确。

六、心得与体会

用计算机来显示图形,这有区别于之前的所有上机实验,有一定的难

度,特别是在做图形用户界面时.我在做的过程中也遇到很大的困难,

有时是往往编译都过不了,即使编译过了,图形的坐标系统还是不能

进行修改.针对以上难题,我自己上网查找资料,运行调试,并最终把图

形学的坐标系统弄明白了,这是我所感到自豪的一件事.整个程序是

我用MFC制作的,先前想到了用openGL,但是它的交互性不如MFC

那么强,在编写的过程中,学习了MFC的知识,从图形学的上机中学到

了不少有用的知识和技能.

附录:程序源代码

/---------------------Bresenham画线算法-----------------/

void CGraphView::Swap(int *a, int *b)

{

int tmp ;

tmp = * a ;

* a = * b ;

* b = tmp ;

}

int CGraphView::BresenhamLine(int x1, int y1, int x2, int y2)

{

CDC *pDC=GetDC();

OnDraw(pDC);

int dx , dy ;

int tx , ty ;

int inc1 , inc2 ;

int d , iTag ;

int x , y ;

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

if ( x1 == x2 && y1 == y2 ) /*如果两点重合结束后面的动作*/ return 1 ;

iTag = 0 ;

dx = abs ( x2 - x1 );

dy = abs ( y2 - y1 );

if ( dx

{

iTag = 1 ;

Swap ( & x1 , & y1 );

Swap ( & x2 , & y2 );

Swap ( & dx , &dy );

}

tx = ( x2 - x1 ) > 0 ? 1 : -1 ; /*确定是增1还1是减1*/

ty = ( y2 - y1 ) > 0 ? 1 : -1 ;

x = x1 ;

y = y1 ;

inc1 = 2 * dy ;

inc2 = 2 * ( dy - dx );

d = inc1 - dx ;

while ( x != x2 ) /*循环画点*/

{

if ( d < 0 )

d += inc1 ;

else

{

y += ty ;

d += inc2 ;

}

if ( iTag )

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

else

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

x += tx ;

}

return 0;

}

/--------------------------中点画圆--------------------/

voidCGraphView::circlePlotPoints(intxc,intyc,intx,int y) {

CDC *pDC=GetDC();

OnDraw(pDC);

Sleep(300);

pDC->SetPixel(xc+x,yc+y,RGB(0,0,255));

pDC->SetPixel(xc-x,yc+y,RGB(0,0,255));

pDC->SetPixel(xc+x,yc-y,RGB(0,0,255));

pDC->SetPixel(xc-x,yc-y,RGB(0,0,255));

pDC->SetPixel(xc+y,yc+x,RGB(0,0,255));

pDC->SetPixel(xc-y,yc+x,RGB(0,0,255));

pDC->SetPixel(xc+y,yc-x,RGB(0,0,255));

pDC->SetPixel(xc-y,yc-x,RGB(0,0,255));

}

voidCGraphView::circleMidPoint(intxc,intyc, int r)

{

int p=1-r;

int x=0;

int y=r;

circlePlotPoints(xc,yc,x,y);

while(x

{

if(p<0)

p+=2*x+1;

else

{

y--;

p+=2*(x-y)+1;

}

circlePlotPoints(xc,yc,x,y);

}

}

/----------------------中点椭圆------------------------/

inlineint round (const double a) { return int (a+0.5);} voidCGraphView::EllipseMidPoint(intxCenter,intyCenter,intRx,intRy) {

int Rx2=Rx*Rx;

int Ry2=Ry*Ry;

int twoRx2=2*Rx2;

int twoRy2=2*Ry2;

int p;

int x=0;

int y=Ry;

intpx=0;

intpy=twoRx2*y;

EllipsePlotPoints(xCenter,yCenter,x,y);

p=round(Ry2-(Rx2*Ry)+(0.25*Rx2));

while(px

{

x++;

px+=twoRy2;

if(p<0)

p+=Ry2+px;

else

{

y--;

py-=twoRx2;

p+=Ry2+px-py;

}

EllipsePlotPoints(xCenter,yCenter,x,y);

}

p=round(Ry2*(x+0.5)*(x+0.5)+Rx2*(y-1)*(y-1)-Rx2*Ry2);

while(y>0)

{

计算机图形学实验报告

《计算机图形学》实验报告姓名:郭子玉 学号:2012211632 班级:计算机12-2班 实验地点:逸夫楼507 实验时间:15.04.10 15.04.17

实验一 1 实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力; 编程实现DDA 算法、Bresenham 中点算法;对于给定起点和终点的直线,分别调用DDA 算法和Bresenham 中点算法进行批量绘制,并记录两种算法的绘制时间;利用excel 等数据分析软件,将试验结果编制成表格,并绘制折线图比较两种算法的性能。 2 实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One (自制平台) 3 实验结果 3.1 程序流程图 (1)DDA 算法 是 否 否 是 是 开始 计算k ,b K<=1 x=x+1;y=y+k; 绘点 x<=X1 y<=Y1 绘点 y=y+1;x=x+1/k; 结束

(2)Mid_Bresenham 算法 是 否 否 是 是 是 否 是 否 开始 计算dx,dy dx>dy D=dx-2*dy 绘点 D<0 y=y+1;D = D + 2*dx - 2*dy; x=x+1; D = D - 2*dy; x=x+1; x

3.2程序代码 //-------------------------算法实现------------------------------// //绘制像素的函数DrawPixel(x, y); (1)DDA算法 void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) { //----------请实现DDA算法------------// float k, b; float d; k = float(Y1 - Y0)/float(X1 - X0); b = float(X1*Y0 - X0*Y1)/float(X1 - X0); if(fabs(k)<= 1) { if(X0 > X1) { int temp = X0; X0 = X1; X1 = temp; }

研究生计算机图形学课程室内场景OpenGL--实验报告Word版

《高级计算机图形学》实验报告 姓名:学号:班级: 【实验报告要求】 实验名称:高级计算机图形学室内场景 实验目的:掌握使用OpenGL生成真实感复杂对象的方法,进一步熟练掌握构造实体几何表示法、扫描表示法、八叉树法、BSP树法等建模方法。 实验要求:要求利用OpenGL生成一个真实感的复杂对象及其周围场景,并显示观测点变化时的几何变换,要具备在一个纹理复杂的场景中漫游功能。要求使用到光线跟踪算法、 纹理映射技术以及实时绘制技术。 一、实验效果图 图1:正面效果图

图2:背面效果图 图4:背面效果图

图4:室内场景细节效果图 图5:场景角度转换效果图

二、源文件数据代码: 共6个文件,其实现代码如下: 1、DlgAbout.cpp #include "StdAfx.h" #include "DlgAbout.h" CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() 2、FormCommandView.cpp #include "stdafx.h" #include "Tool.h" #include "MainFrm.h" #include "FormCommandView.h" #include "ToolDoc.h" #include "RenderView.h" // Download by https://www.wendangku.net/doc/7e2130001.html, #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // CFormCommandView IMPLEMENT_DYNCREATE(CFormCommandView, CFormView) CFormCommandView::CFormCommandView() : CFormView(CFormCommandView::IDD) { //{{AFX_DATA_INIT(CFormCommandView)

图像拼接调研报告

图像拼接的调研报告 1.图像拼接的意义和国内外研究现状 1.1 意义 图像拼接(image mosaic)技术是将一组相互间存在重叠部分的图像序列进行空间配准,经重采样融合后形成一幅包含各图像序列信息的宽视角场景的、完整的、高清晰的新图像的技术。图像拼接是数字图像处理领域的一个重要的研究方向,在摄影测量学、计算机视觉、遥感图像分析、计算机图形等领域有着广泛的应用价值。 图像拼接技术一个日益流行的研究领域,是虚拟现实、计算机视觉、计算机图形学和图像处理等领域的重要研究课题,在宇宙空间探测、海底勘测、医学、气象、地质勘测、军事、视频压缩和传输、视频的索引和检索、物体的3D重建、军事侦察和公安取证、数码相机的超分辨率处理等领域都有广泛的应用。因此,图像拼接技术的研究具有很好的应用前景和实际应用价值。 1.2 国内外研究现状。 关于图像拼接的方法国内外已有不少的论文发表,其算法大致可分为基于模型的方法,基于变换域的方法,基于灰度相关的方法和基于特征的方法,而如何提高图像拼接的效率,减少处理时间和增强拼接系统的适应性一直是研究的重点。 ①基于模型: 1996年,微软研究院的Richard Szeliski提出了一种2D空间八参数投影变换模型,采用Levenberg-Marquardt迭代非线性最小化方法(简称L-M算法)求出图像间的几何变换参数来进行图像配准。这种方法在处理具有平移、旋转、仿射等多种变换的待拼接图像方面效果好,收敛速度快,因此成为图像拼接领域的经典算法,但是计算量大,拼接效果不稳定。 2000年,Shmuel Peleg等人在Richard Szeliski的基础上做了进一步的改进,提出了自适应图像拼接模型,根据相机的不同运动而自适应选择拼接模型,通过把图像分成狭条进行多重投影来完成图像的拼接。这一研究成果推动了图像拼接技术的进一步的发展,从此自适应问题成为图像拼接领域新的研究热点。 匹兹堡大学的Sevket Gumustekin对消除在固定点旋转摄像机拍摄自然景物时形成的透视变形和全景图像的拼接进行了研究。通过标定摄像机来建立成像模型,根据成像模型将捕获到的图像投影到同一的高斯球面上,从而得到拼接图像。这种方法拼接效果好、可靠性高,但是要求对摄像机进行精确的标定,同时要求摄像机透镜本身的畸形参数引起的图像变形可以忽略不计。 ②基于变换域: 1975年,Kuglin和Hines提出了相位相关法,利用傅里叶变换将两幅带配准的图像变换频域,然后利用互功率谱直接计算出两幅图像间的平移矢量。 1987年,De Castro和Morandi提出了扩展相位相关法,利用傅里叶变换的性质能够实现具有旋转和平移变换的图像的配准。随着快速傅里叶变换算法的提出以及信号处理领域对傅里叶变换的成熟应用,Reddy和Chatterji提出了基于快速傅里叶变换(FFT-based)的方法,利用极坐标变换和互功率谱,对具有平移、旋转和缩放变换的图像都能够实现精确配准。 相位相关法计算简单精准,但要求待配准图像之间有较大重叠比例,同时计算量和适用

计算机图形学实验

实验1 直线的绘制 实验目的 1、通过实验,进一步理解和掌握DDA和Bresenham算法; 2、掌握以上算法生成直线段的基本过程; 3、通过编程,会在TC环境下完成用DDA或中点算法实现直线段的绘制。实验环境 计算机、Turbo C或其他C语言程序设计环境 实验学时 2学时,必做实验。 实验内容 用DDA算法或Besenham算法实现斜率k在0和1之间的直线段的绘制。 实验步骤 1、算法、原理清晰,有详细的设计步骤; 2、依据算法、步骤或程序流程图,用C语言编写源程序; 3、编辑源程序并进行调试; 4、进行运行测试,并结合情况进行调整; 5、对运行结果进行保存与分析; 6、把源程序以文件的形式提交; 7、按格式书写实验报告。 实验代码:DDA: # include # include

void DDALine(int x0,int y0,int x1,int y1,int color) { int dx,dy,epsl,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; if(abs(dx)>abs(dy)) epsl=abs(dx); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { putpixel((int)(x+0.5),(int)(y+0.5),4); x+=xIncre; y+=yIncre; } } main(){ int gdriver ,gmode ;

cad制图实习报告

cad制图实习报告 篇一:CAD画图实习报告及总结 CAD实习报告 经过这学期的理论和上机学习,使我们对有了基本掌握,对于CAD这个课程学习也有了一个系统的学习和掌握。我学到的东西很多。首先对于电脑绘图不熟悉的我有很大的帮助,现在的我用Auto CAD绘图的速度快了很多。而且知道了很多快捷方式的运用。以下就是我在CAD实习过程中知道的一些小技巧。现在,我们即将结束这门课程,作为CAD学习的学生,大部分人都想以后成为一名建筑师,更好的去设计出符合企业单位,满足客户的要求,并深受大家喜爱的作品。这是在老师讲的人体工程学里面找的。CAD即计算机辅助设计与制图,是指运用计算机系统辅助一项设计的建立、修改、分析或优化的过程。 CAD软件必须有能接受和使其运行的物体,即硬件来 支持它才能有实际意义,这样就存在了CAD系统。CAD系统是由硬件、软件组成。硬件包括处理运算设备、图形显示设备、外部存储设备、数据图形输入输出设备以及有关的信息传输等硬件平台设备、软件包括系统软件、支撑(图形、汉字等)软件和专业应用软件。我国主要使用的CAD软件是美国AUTODESK公司开发的AUTODESK软件,它是一个功能强大、易学易用、具有开放型结构的软件口不

仅便于用户使用,而且系统本身可不断地扩充和完善,它被广泛地应用于微机及工作站上。因此,国内外软件开发商在此基础上进行有关工程设计专业的二次开发,如建筑行业:华远的HOUSE软件、建研院的ABD集成化软件BICAD软件、理正的CAD软件、方圆公司的方圆三维室内设计系统等。随着CAD技术的不断发展,其覆盖的工作领域也不断地扩大,如工程设计CAD项目的管理、初步设计、分析计算、绘制工程、统计优化等。CAD技术的应用正在有力而迅速地改变着传统的工程设计方法和设计生产的管理模式。 一、课程实习的目的: 把握Auto CAD用于工程制图的基本操作,了解工程图纸绘制的格式和要求,能够用Auto CAD绘制二维的工程图纸。 二、课程实习的任务: 1.学习Auto CAD的基本绘图操作。 2.绘制平面工程图纸。 3.了解工程图纸的一般要求和格式 三、课程设计的要求: 本课程实习以CAD软件为例,介绍计算机辅助设计的功能和应用,并作一定的实践操作。要求学生了解Auto CAD 的主要功能,把握Auto CAD用于工程制图的基本操作,了解工程图纸绘制的格式和要求,能够用Auto CAD绘

计算机图形学实验报告 (2)

中南大学信息科学与工程学院 实验报告实验名称 实验地点科技楼四楼 实验日期2014年6月 指导教师 学生班级 学生姓名 学生学号 提交日期2014年6月

实验一Window图形编程基础 一、实验类型:验证型实验 二、实验目的 1、熟练使用实验主要开发平台VC6.0; 2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序; 3、掌握Window图形编程的基本方法; 4、学会使用基本绘图函数和Window GDI对象; 三、实验内容 创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求: 1、用户可以通过菜单选择绘图颜色; 2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形; 四、实验要求与指导 1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。 2、建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形 其中“曲线”项有级联菜单,包括:圆、椭圆。 3、用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。

五、实验结果: 六、实验主要代码 1、画直线:CClientDC *m_pDC;再在OnDraw函数里给变量初始化m_pDC=new CClientDC(this); 在OnDraw函数中添加: m_pDC=new CClientDC(this); m_pDC->MoveTo(10,10); m_pDC->LineTo(100,100); m_pDC->SetPixel(100,200,RGB(0,0,0)); m_pDC->TextOut(100,100); 2、画圆: void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC) { int dx = xb - xa; int dy = yb - ya; int Steps, k; float xIncrement,yIncrement; float x = xa,y= ya; if(abs(dx)>abs(dy))

计算机图形学课程设计报告

一、设计内容与要求 1.1、设计题目 算法实现时钟运动 1.2、总体目标和要求 (1)目标:以图形学算法为目标,深入研究。继而策划、设计并实现一个能够表现计算机图形学算法原理的或完整过程的演示系统,并能从某些方面作出评价和改进意见。通过完成一个完整程序,经历策划、设计、开发、测试、总结和验收各阶段,达到巩固和实践计算机图形学课程中的理论和算法;学习表现计算机图形学算法的技巧;培养认真学习、积极探索的精神。 (2)总体要求:策划、设计并实现一个能够充分表现图形学算法的演示系统,界面要求美观大方,能清楚地演示算法执行的每一个步骤。(3)开发环境:Viusal C++ 6.0 1.3、设计要求 内容: (1)掌握动画基本原理; (2)实现平面几何变换; 功能要求: (1)显示时钟三个时针,实现三根时针间的相互关系;

(2)通过右键菜单切换时钟背景与时针颜色; 1.4设计方案 通过使用OpenGL提供的标准库函数,综合图形学Bresenham画线和画圆的算法,OpenGL颜色模型中颜色表示模式等实现指针式时钟运动,并通过点击右键菜单实习时钟背景与时针颜色的转换。根据Bresenham画线和画圆的算法,画出时钟的指针和表盘。再根据OpenGL颜色模型定义当前颜色。设置当时钟运行时交换的菜单,运行程序时可变换时钟背景与时针的颜色。最后再设置一个恢复菜单恢复开始时表盘与指针的颜色。

二、总体设计 2.1、过程流程图

2.2、椭圆的中点生成算法 1、椭圆对称性质原理: (1)圆是满足x轴对称的,这样只需要计算原来的1/2点的位置;(2)圆是满足y轴对称的,这样只需要计算原来的1/2点的位置; 通过上面分析可以得到实际上我们计算椭圆生成时候,只需要计算1/4个椭圆就可以实现对于所有点的生成了。 2、中点椭圆算法内容: (1)输入椭圆的两个半径r1和r2,并且输入椭圆的圆心。设置初始点(x0,y0)的位置为(0,r2); (2)计算区域1中央决策参数的初始值 p = ry*ry - rx*rx*ry + 1/4*(rx*rx); (3)在区域1中的每个Xn为止,从n = 0 开始,直到|K|(斜率)小于-1时后结束; <1>如果p < 0 ,绘制下一个点(x+1,y),并且计算 p = p + r2*r2*(3+2*x); <2>如果P >=0 ,绘制下一个点(x+1,y-1),并且计算 p = p + r2*r2*(3+2*point.x) - 2*r1*r1*(y-1) (4)设置新的参数初始值; p = ry*ry(X0+1/2)*(X0+1/2) + rx*rx*(Y0-1) - rx*rx*ry*ry; (5)在区域2中的每个Yn为止,从n = 0开始,直到y = 0时结束。 <1>如果P>0的情况下,下一个目标点为(x,y-1),并且计算 p = p - 2rx*rx*(Yn+1) + rx*rx;

虚拟现实(VR)的调研报告

虚拟现实(V R)技术的 调研报告 姓名: 学号:

一、虚拟现实的概念 1、虚拟现实(VirtualReality,简称VR) 虚拟现实技术(VR)是一种可以创建和体验虚拟世界的计算机仿真系统它利 用计算机生成一种模拟环境是一种多源信息融合的交互式的三维动态视景和实体行为的系统仿真使用户沉浸到该环境中。通过模拟产生一个逼真的虚拟世界,给用户提供完整的视觉、听觉、触觉等感官体验,让用户如身历其境能够实现在自然环境下的各种感知的高级人机交互技术。 2、虚拟现实(VirtualReality)的特征 (1)沉浸感:又称临场感,是指用户感到作为主角存在于虚拟环境中的真实程度,是VR技术最重要的特征,影响沉浸感的主要因素包括多感知性、自主性、三维图像中的深度信息、画面的视野、实现跟踪的时间或空间响应及交互设备的约束程度等。虚拟现实时代,人将从过去只能在计算机系统的外部观测处理结果,到沉浸到计算机系统所创建的环境中。 (2)交互性:指用户对虚拟环境中对象的可操作程度和从虚拟环境中得到反馈的自然程度(包括实时性)。人将从过去只能通过键盘、鼠标与计算环境中的单维数字信息交互,升级为用多种传感器(眼球识别、语音、手势乃至脑电波)与多维信息的环境交互。 (3)想象力:指用户在虚拟世界中根据所获取的多种信息和自身在系统中的行为,通过逻辑判断、推理和联想等思维过程,随着系统的运行状态变化而对其未来进展进行想象的能力。对适当的应用对象加上虚拟现实的创意和想象力,可以大幅度提高生产效率、减轻劳动强度、提高产品开发质量。人将不只从定性和定量综合集成的环境中得到感知和理性的认识,而是能够实现概念深化和新意萌发。

课程实习报告4篇

课程实习报告4篇 本文是关于课程实习报告4篇,仅供参考,希望对您有所帮助,感谢阅读。 §案情简述 被告人姚某因为和妻姐的财务纠纷,将其杀死并自首。故意杀人罪名无可争议,但是在量刑上却有较大争论,在庭审过程之中,围绕量刑问题,原告和被告之间展开了激烈的争论。 §本案争论的逻辑 法院在量刑上应作一个判断: 对被告人应 1)量重刑或2)量轻刑 为做出以上判断,需要考虑以下条件 →①姚某是否属于自首悔罪②姚某主观恶性是强还是弱 如果自首悔罪,主观恶性较弱,此案必将轻判,反之将重判。并且这两点是紧密联系的,双方都非常注意在这方面找出有利于自己的证言。 由此双方争论由此交结在"预谋"这一要素之上。先来看看"预谋"这个概念。 有预谋→意味着主观恶性强,是有计划的,严密的杀人,社会危害大。即使其自首也可以认为是预谋之中的事。并且,供词中的"有预谋"和庭审中姚某辩称自己是一时冲动杀人矛盾,使得被告人姚某的自首情节中"需要坦白自己一切罪行"(包括自己的动机)不能成立,因此自首行为亦值得商榷。 无预谋→意味着姚某只是无意杀人,而非有计划的。主观恶性较弱,社会危害小,加之有自首行为,姚某的罪行可以轻判。姚某就处于较为有利一些的地位。 双方都非常清楚这次交锋的关键点,围绕是否有预谋这个作案动机进行了以事实为依据的大讨论。原告方希望置被告方于死的,被告方希望取得较为有利得地位,通过各种论证和反驳通过各种命题去达到自己的目的。 其一§对于姚某"预谋已久"的论证和反驳 原告为了证明被告人预谋已久,心怀不轨,提出了一下三个证据。 证据一:被告人姚某,携带刀具和雷管进入马某家中,其必然是早有准备,

证据二:被告人姚某,砍被害人20余刀直至对方身亡,由此可见姚某主观恶性之强,预谋之深。 证据三:姚某在伤人之后,并没有仔细观察对方生死,或者拨打120急救电话。放任对方生死,姚某只是区公安机关自首,但并不能认定其自首是悔罪表现,或许只是惧怕重刑。说以其主观恶性更深,更能证明其是有预谋的杀人。 一、课程实习的目的: 把握auto cad用于工程制图的基本操作,了解工程图纸绘制的格式和要求,能够用auto cad绘制二维的工程图纸。 二、课程实习的任务: 1.学习auto cad的基本绘图操作。 2.绘制平面工程图纸。 3.了解工程图纸的一般要求和格式 三、课程设计的要求: 本课程实习以cad软件为例,介绍计算机辅助设计的功能和应用,并作一定的实践操作。要求学生了解auto cad的主要功能,把握auto cad用于工程制图的基本操作,了解工程图纸绘制的格式和要求,能够用auto cad绘制二维的工程图纸。 四、意义: 随着传统cad系统在工业界的应用以及现代设计问题的复杂化、智能化,人们不再仅仅满足于用计算机取代人进行手工绘图。所幸随着计算机图形学、人工智能、计算机网络等基础技术的发展和计算机集成制造、并行工程、协同设计等现代设计理论和方法的研究,使得cad系统也由单纯二维绘图向三维智能设计、物性分析、动态仿真方向发展,参数化设计向变量化和vgx(超变量化)方向发展,几何造型、曲面造型、实体造型向特征造型以及语义造型等方向发展;另一方面,伴随着cad软件复杂程度的增加和各个不同应用系统间互操作的现实需要,人们希望cad系统具有极佳的开放性,同时又能“搭积木”似的自由拼装形成不同的功能配置,软件工程技术非凡是组件开发技术的研究应用和逐渐成熟为解决这一问题提供了坚实的基础。

计算机图形学实验报告

目录

实验一直线的DDA算法 一、【实验目的】 1.掌握DDA算法的基本原理。 2.掌握DDA直线扫描转换算法。 3.深入了解直线扫描转换的编程思想。 二、【实验内容】 1.利用DDA的算法原理,编程实现对直线的扫描转换。 2.加强对DDA算法的理解和掌握。 三、【测试数据及其结果】 四、【实验源代码】 #include

#include #include #include GLsizei winWidth=500; GLsizei winHeight=500; void Initial(void) { glClearColor(1.0f,1.0f,1.0f,1.0f); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0); } void DDALine(int x0,int y0,int x1,int y1) { glColor3f(1.0,0.0,0.0); int dx,dy,epsl,k; float x,y,xIncre,yIncre; dx=x1-x0; dy=y1-y0; x=x0; y=y0; if(abs(dx)>abs(dy)) epsl=abs(dx); else epsl=abs(dy); xIncre=(float)dx/(float)epsl; yIncre=(float)dy/(float)epsl; for(k=0;k<=epsl;k++) { glPointSize(3); glBegin(GL_POINTS); glV ertex2i(int(x+0.5),(int)(y+0.5)); glEnd(); x+=xIncre; y+=yIncre; } } void Display(void) { glClear(GL_COLOR_BUFFER_BIT); DDALine(100,100,200,180); glFlush(); }

计算机图形学实验报告记录

计算机图形学实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

计算机图形学实验报告 姓名:___ __________ 学号:_____ ________ 班级:______ _______ 时间:_____2016年12月_________

实验一OpenGL编程与图形绘制 1.实验目的 了解OpenGL编程,并熟悉OpenGL的主要功能、绘制流程和基本语法。学会配置OpenGL环境,并在该环境中编程绘图。 2.实验内容 OpenGL的主要功能:模型绘制、模型观察、颜色模式、光照应用、图像效果增强、位图和图像处理、纹理映射、实时动画和交互技术。 OpenGL的绘制流程分为两个方面:一个完整的窗口系统的OpenGL图形处理系统的结构为:最底层为图形硬件,第二层为操作系统,第三层为窗口系统,第四层为OpenGL,最上面的层为应用软件;OpenGL命令将被放在一个命令缓冲区中,这样命令缓冲区中包含了大量的命令、顶点数据和纹理数据。当缓冲区被清空时,缓冲区中的命令和数据都将传递给流水线的下一个阶段。 OpenGL的基本语法中相关库有:OpenGL核心库:gl、OpenGL实用程序库:glu、OpenG 编程辅助库:aux、OpenGL实用程序工具包(OpenGL utility toolkit,GLUT):glut、Windows 专用库:wgl。 OpenGL的基本语法中命名规则为:OpenGL函数都遵循一个命名约定,即采用以下格式:<库前缀><根命令><可选的参数个数><可选的参数类型>。 了解了上述基础知识后,配置好OpenGL环境,然后在该环境中编程练习图形的绘制,本次实验主要是对点的绘制、直线的绘制和多边形面的绘制。 3.实验代码及结果 3.1点的绘制: #include void Initial(void) { glClearColor(1.0f,1.0f,1.0f,1.0f); //设置窗口背景颜色为白色 glMatrixMode(GL_PROJECTION); //指定设置投影参数 gluOrtho2D(0.0,200.0,0.0,150.0); //设置投影参数 } void Display(void) {

计算机技术工程领域(085211)

计算机技术工程领域(085211) 全日制专业学位硕士研究生培养方案 一、学科简介 本学科为计算机科学与技术学科的计算机技术专业硕士点,计算机科学与技术专业是我校信息学科的核心专业之一,计算机技术是以培养高素质的创新型工程技术人才为目的。本学科在多年的教学科研工作中,兼顾工程技术实践与理论研究,着力建设重实践、宽口径的特色专业,以校企联合为手段,为信息技术产业输送高层次的计算机专门人才。在应用技术方面跟踪国内外前沿方向,形成应用技术研究与实践、产学研结合的特色。 二、培养目标 计算机技术工程领域培养基础扎实、素质全面、工程实践能力强并具有一定创新能力的应用型、复合型高层次工程技术和工程管理人才,基本要求是: 1.拥护党的基本路线和方针政策、热爱祖国、遵纪守法。 2.具有良好的职业道德和敬业精神,以及科学严谨、求真务实的学习态度和工作作风。 3.掌握计算机技术领域坚实的基础知识和宽广的专业知识,具有承担工程技术或工程管理工作的能力,了解本领域的技术现状和发展趋势,能够运用先进的计算机技术方法和现代技术手段解决工程问题,具备运用先进的工程化方法、技术和工具从事软件分析、设计、开发、维护等工作的能力,以及工程项目的组织与管理能力、团队协作能力、技术创新能力和市场开拓能力。 4.掌握一门外语,具备良好的阅读、理解和撰写外文资料的能力。 5.身心健康。 三、培养方式 1.采用脱产培养方式,实行学分制。 2.教学过程重视运用研讨式授课、案例教学等灵活多样的教学方式。 3.课程学习与实习实践相结合,课程学习主要在校内完成,实习实践主要在实践基地完成。 4.实行校内外“双导师制”,由校内导师和行业专家共同承担实践教学和学

计算机图形学课程设计书

计算机图形学课程设计 书 文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

课程设计(论文)任务书 理学院信息与计算科学专业2015-1班 一、课程设计(论文)题目:图像融合的程序设计 二、课程设计(论文)工作: 自2018 年1 月10 日起至2018 年1 月12日止 三、课程设计(论文) 地点: 2-201 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)熟悉Delphi7的使用,理论与实际应用相结合,养成良好的程序设计技能;(2)了解并掌握图像融合的各种实现方法,具备初步的独立分析和设计能力;(3)初步掌握开发过程中的问题分析,程序设计,代码编写、测试等基本方法;(4)提高综合运用所学的理论知识和方法独立分析和解决问题的能力; (5)在实践中认识、学习计算机图形学相关知识。 2.课程设计的任务及要求 1)基本要求: (1)研究课程设计任务,并进行程序需求分析; (2)对程序进行总体设计,分解系统功能模块,进行任务分配,以实现分工合作;(3)实现各功能模块代码; (4)程序组装,测试、完善系统。 2)创新要求: 在基本要求达到后,可进行创新设计,如改进界面、增加功能或进行代码优化。

3)课程设计论文编写要求 (1)要按照书稿的规格打印誊写课程设计论文 (2)论文包括封面、设计任务书(含评语)、摘要、目录、设计内容、设计小结(3)论文装订按学校的统一要求完成 4)参考文献: (1)David ,《计算机图形学的算法基础》,机械工业出版社 (2)Steve Cunningham,《计算机图形学》,机械工业出版社 (3) 5)课程设计进度安排 内容天数地点 程序总体设计 1 实验室 软件设计及调试 1 实验室 答辩及撰写报告 1 实验室、图书馆 学生签名: 2018年1月12日 摘要 图像融合是图像处理中重要部分,能够协同利用同一场景的多种传感器图像信息,输出一幅更适合于人类视觉感知或计算机进一步处理与分析的融合图像。它可明显的改善单一传感器的不足,提高结果图像的清晰度及信息包含量,有利于更为准确、更为可靠、更为全面地获取目标或场景的信息。图像融合主要应用于军事国防上、遥感方面、医学图像处理、机器人、安全和监控、生物监测等领域。用于较多也较成熟的是红外和可见光的融合,在一副图像上显示多种信息,突出目标。一般情况下,图像融合由

《计算机图形学》1-4章习题解答

《计算机图形学》1-4章习题解答 习题1 1.计算机图形学的研究内容是什么? 答:几何模型构造,图形生成,图形操作与处理,图形信息的存储、检索与交换,人机交互及用户接口,动画,图形输出设备与输出技术,图形标准与图形软件包的研究等。 2.计算机图形学与图像处理有何联系?有何区别? 答:计算机图形学与图像处理都是用计算机来处理图形和图像,结合紧密且相互渗透,但其属于两个不同的技术领域。计算机图形学是通过算法和程序在显示设备上构造图形,是从数据到图像的处理过程;而图像处理是对景物或图像的分析技术,是从图像到图像的处理过程。 3.简述计算机图形学的发展过程。 答:略。(参考:教材P3) 4.简述你所理解的计算机图形学的应用领域。 答:略。(参考:教材P4~P5) 习题2 1.什么是图像的分辨率? 答:在水平和垂直方向上每单位长度所包含的像素点的数目。 2.在CMY 坐标系里找出与RGB 坐标系的颜色(0.2,1,0.5)相同的坐标。 答:1-0.2=0.8,1-1=0, 1-0.5=0.5 坐标为(0.8, 0, 0.5) 3.在RGB 坐标系里找出与CMY 坐标系的颜色(0.15,0.75,0)相同的坐标。 答:1-0.15=0.85, 1-0.75=0.25, 1-0=1 坐标为(0.85, 0.25, 1) 4.如果使用每种基色占2比特的直接编码方式表示RGB 颜色的值,每一像素有多少种可能的颜色? 答:642222 22=?? 5.如果使用每种基色占10比特的直接编码方式表示RGB 颜色的值,每一像素有多少种可能的颜色? 答:824 10737411024 2223 10 10 10 ==??

计算机图形学 课程设计作品

《计算机图形学Visual c++版》考试作业报告 题目:计算机图形学图形画板 专业:推荐IT学长淘宝日用品店530213 班级:推荐IT学长淘宝日用品店530213 学号:推荐IT学长淘宝日用品店530213 姓名:推荐IT学长淘宝日用品店530213 指导教师:推荐IT学长淘宝日用品店530213 完成日期: 2015年12月2日

一、课程设计目的 本课程设计的目标就是要达到理论与实际应用相结合,提高学生设计图形及编写大型程序的能力,并培养基本的、良好的计算机图形学的技能。 设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握计算机图形学基本知识和算法设计的基本技能术,掌握分析、解决实际问题的能力。 通过这次设计,要求在加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。 二、设计内容推荐IT学长淘宝日用品店530213 设计一个图形画板,在这个图形画板中要实现: 1,画线功能,而且画的线要具备反走样功能。 2, 利用上面的画线功能实现画矩形,椭圆,多边形,并且可以对这些图形进行填充。 3,可以对选中区域的图形放大,缩小,平移,旋转等功能。 三、设计过程 程序预处理:包括头文件的加载,常量的定义以及全局变量的定义 #include "stdafx.h" #include "GraDesign.h" #include "GraDesignDoc.h" #include "GraDesignView.h" #include "math.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //******自定义全局变量 int type = -1; CPoint point1; CPoint point2; CPoint temp[2];

计算机图形学实验报告

计算机图形学 实验报告 姓名:谢云飞 学号:20112497 班级:计算机科学与技术11-2班实验地点:逸夫楼507 实验时间:2014.03

实验1直线的生成 1实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析 实验数据的能力; 编程实现DDA算法、Bresenham中点算法;对于给定起点和终点的 直线,分别调用DDA算法和Bresenham中点算法进行批量绘制,并记 录两种算法的绘制时间;利用excel等数据分析软件,将试验结果编 制成表格,并绘制折线图比较两种算法的性能。 2实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One(自制平台)。 本实验提供名为 Experiment_Frame_One的平台,该平台提供基本 绘制、设置、输入功能,学生在此基础上实现DDA算法和Mid_Bresenham 算法,并进行分析。 ?平台界面:如错误!未找到引用源。所示 ?设置:通过view->setting菜单进入,如错误!未找到引 用源。所示 ?输入:通过view->input…菜单进入.如错误!未找到引用 源。所示 ?实现算法: ◆DDA算法:void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) Mid_Bresenham法:void CExperiment_Frame_OneView::Mid_Bresenham(int X0, int Y0, int X1, int Y1)

3实验结果 3.1程序流程图 1)DDA算法流程图:开始 定义两点坐标差dx,dy,以及epsl,计数k=0,描绘点坐标x,y,x增 量xIncre,y增量yIncre ↓ 输入两点坐标x1,y1,x0,y0 ↓ dx=x1-x0,dy=y1-y0; _________↓_________ ↓↓ 若|dx|>|dy| 反之 epsl=|dx| epsl=|dy| ↓________...________↓ ↓ xIncre=dx/epsl; yIncre=dy/epsl ↓ 填充(强制整形)(x+0.5,y+0.5); ↓←←←← 横坐标x+xIncre; 纵坐标y+yIncre; ↓↑ 若k<=epsl →→→k++ ↓ 结束 2)Mid_Bresenham算法流程图开始 ↓ 定义整形dx,dy,判断值d,以及UpIncre,DownIncre,填充点x,y ↓ 输入x0,y0,x1,y1 ______↓______ ↓↓ 若x0>x1 反之 x=x1;x1=x0;x0=x; x=x0;

计算机图形学课程设计报告简单图形的绘制-

《计算机图形学》课程设计 报告 学生姓名:学号: 学院: 班级: 题目: 简单图形的绘制 职称2015年7月1日

目录 目录............................................................................................... I 一、选题背景 (1) 二、算法设计 (2) 2.1 绘制直线、圆、椭圆、抛物线 (2) 2.1.1 绘制直线 (2) 2.1.2 绘制圆 (2) 2.1.3 绘制椭圆 (2) 2.1.4 绘制抛物线 (2) 2.2 三维几何变换 (2) 三、程序及功能说明 (5) 3.1 绘制直线、圆、椭圆、抛物线...... (5) 3.1.1 绘制直线 (5) 3.1.2 绘制圆 (5) 3.1.3 绘制椭圆 (5) 3.1.4 绘制抛物线 (6) 3.2 图形的平移 (6) 3.3 图形的旋转 (6) 3.4 图形的缩放 (7) 四、结果分析 (7) 4.1 绘制直线、圆、椭圆、抛物线 (7) 4.1.1 直线 (7) 4.1.2 圆 (8)

4.1.3 椭圆 (8) 4.1.4 抛物线 (8) 4.2 图形的平移 (9) 4.3 图形的旋转 (10) 4.4 图形的缩放 (11) 五、总结 (10) 六、课程设计心得体会 (14) 参考文献 (15) 源程序 (16)

一、选题背景

二、算法设计 2.1 绘制直线、圆、椭圆、抛物线 2.1.1 绘制直线 通过两个点的坐标来绘制直线。计算机图形学中二维图形在显示输出之前需要扫描转换,生成直线的算法一般有DDA 算法和中点算法。 2.1.2 绘制圆 通过运用圆的参数方程cos ;sin x a r y b r θθ=+=+来绘制圆的图形,其中[0,2]θπ∈, (a,b )为圆心,r 为半径,运用参数方程,只需要确定半径的长度和圆心的位置,即可绘制出圆。 2.1.3 绘制椭圆 通过运用椭圆的参数方程cos ;sin x a y b θθ==来绘制椭圆的图形,其中 [0,2]θπ∈,是已知的变量,a ,b 分别为长半轴,短半轴,当确定a 和b 后,通过参数方程即可得到这个椭圆的方程。 2.1.4 绘制抛物线 根据点绘制抛物线图像是通过拟合完成,根据三个点的坐标,通过数据拟合,得到经过这三个点的函数关系式,从而再根据这个函数关系式绘制出抛物线上其他的点,形成一条连续的抛物线;或直接根据已知函数绘制图像是通过已知函数画出图像。 2.2 三维几何变换 三维几何变换是二维几何变换的推广。二维几何变换在齐次坐标空间中 可用3?3的变换矩阵表示,类似的,三维几何变换在齐次坐标空间中可用4?4的变换矩阵表示。三维空间中的点(),,x y z 的齐次坐标定义为(),,h h h x y z ,其中,h 为不等与零的任意常数,h x hx =,h y hy =,h z hz =。亦即点(),,x y z 对应4维齐次坐标空间的一条直线:

计算机图形学第1_5章课后习题参考答案

第一章 1、试述计算机图形学研究的基本内容? 答:见课本P5-6页的1.1.4节。 2、计算机图形学、图形处理与模式识别本质区别是什么?请各举一例说明。 答:计算机图形学是研究根据给定的描述,用计算机生成相应的图形、图像,且所生成的图形、图像可以显示屏幕上、硬拷贝输出或作为数据集存在计算机中的学科。计算机图形学研究的是从数据描述到图形生成的过程。例如计算机动画制作。 图形处理是利用计算机对原来存在物体的映像进行分析处理,然后再现图像。例如工业中的射线探伤。 模式识别是指计算机对图形信息进行识别和分析描述,是从图形(图像)到描述的表达过程。例如邮件分捡设备扫描信件上手写的邮政编码,并将编码用图像复原成数字。 3、计算机图形学与CAD、CAM技术关系如何? 答:见课本P4-5页的1.1.3节。 4、举3个例子说明计算机图形学的应用。 答:①事务管理中的交互绘图 应用图形学最多的领域之一是绘制事务管理中的各种图形。通过从简明的形式呈现出数据的模型和趋势以增加对复杂现象的理解,并促使决策的制定。 ②地理信息系统 地理信息系统是建立在地理图形基础上的信息管理系统。利用计算机图形生成技术可以绘制地理的、地质的以及其它自然现象的高精度勘探、测量图形。 ③计算机动画 用图形学的方法产生动画片,其形象逼真、生动,轻而易举地解决了人工绘图时难以解决的问题,大大提高了工作效率。 5、计算机绘图有哪些特点? 答:见课本P8页的1.3.1节。 6、计算机生成图形的方法有哪些? 答:计算机生成图形的方法有两种:矢量法和描点法。 ①矢量法:在显示屏上先给定一系列坐标点,然后控制电子束在屏幕上按一定的顺序扫描,逐个“点亮”临近两点间的短矢量,从而得到一条近似的曲线。尽管显示器产生的只是一些短直线的线段,但当直线段很短时,连成的曲线看起来还是光滑的。 ②描点法:把显示屏幕分成有限个可发亮的离散点,每个离散点叫做一个像素,屏幕上由像素点组成的阵列称为光栅,曲线的绘制过程就是将该曲线在光栅上经过的那些像素点串接起来,使它们发亮,所显示的每一曲线都是由一定大小的像素点组成的。当像素点具有多种颜色或多种灰度等级时,就可以显示彩色图形或具有不同灰度的图形。 7、当前计算机图形学研究的课题有哪些? 答:见课本P10-11页的1.4节。

相关文档