计算机图形学5

计算机图形学5
计算机图形学5

计算机图形学期末考试试卷(D卷)

一、填空题(每空1分,共10分)

1.图形的表示方法有两种:和。

2.目前常用的两个事实图形软件标准是OpenGL和。

3.多边形有两种表示方法:和点阵表示法。//计算

机图形学中,多边形有两种重要的表示方法:顶点表示和点阵表示。顶点表示是用多边形的顶点序列来表示多边形。这种表示直观、几何意义强、占内存少,易于进行几何变换,但由于它没有明确指出哪些象素在多边形内故不能直接用于面着色

4.二维图形基本几何变换包括平移、、等变换。

5.投影可以分为投影和投影。

6.描述一个物体需要描述其几何信息和。//1.几何信息

几何信息是指一个物体在三维欧氏空间中的位置信息。它们反映物体的大小和位置,例如顶点的坐标值、曲面数学表达式中的具体系数等。通常用空间直角坐标系表示各种几何数据.但是只有几何信息难以准确地表示物体,常会出现物体表示上的二义性,可能产生多个不同的理解。为了保证描述物体的完整性和数学的严密性,必须同时给出几何信息和拓扑信息。2.拓扑信息拓扑信息是指物体的拓扑元素(顶点Vertex、边Edge和表面Face)的个数、类型以及它们之间的相互关系信息。拓扑是研究在形变状态下图形空间性质保持不变的一个数学分支,着重研究图形内的相对位置关系。例如,某一面与哪些面相邻、某一面由哪些点

组成等都属于拓扑信息。表示拓扑信息常用数据结构来实现,采用体、面、环、边和顶点表示,根据这些信息可以确定物体表面的邻接关系。一般,多面体的拓扑元素有9种拓扑关系。

7.在Z缓冲器消隐算法中Z缓冲器每个单元存储的信息是每一个像

素点的。// Z缓冲器算法也叫深度缓冲器算法,属于图像空间消隐算法。x

填空题

8.参数法、点阵法 2. DirectX。 3.顶点表示

4. 比例、旋转

5. 平行、透视

6. 拓扑信

息 7.深度值

填空题

1. 物理交互设备包括:()等等;

2. 反走样的方法:

3. 可见

面的算法: 4. 直线段与视口的关系: 5. 字符的生成算法:。 6. 二维图形的几何转换:

1(输入板)、(光笔)、(游戏杆)、(鼠标)、(控制旋钮)、(功能开关)、

(按钮)、(数据手套)、(触摸屏)、(常用的字母数字键盘)

2(1)提高采样的频率(2)把像素点最为一个有限区域。3(1)图像空间算法(2)景物空间算法(3)优先级排序法4(1)完全可见(2)完全不可见(3)部分可见5(矢量)和(栅格)6平移,比例变换,对称变换,旋转变换,错切

一、选择题:(本大题共4小题,共14分)

1、以计算机中所记录的形状参数与属性参数来表示图形的一种

方法叫做(),一般把它描述的图形叫做();而用具有灰度或颜色信息的点阵来表示图形的一种方法是(),它强调图形由哪些点组成,并具有什么灰度或色彩,一般把它描述的图形叫做()。

A、参数法、图形、点阵法、图像

B、点阵法、图像、参数法、

图形 C、参数法、图像、点阵法、图形 D、点阵法、图形、参数法、图像

2、下列设备中属于图形输出设备的是().

○ 1鼠标○2LCD ○3键盘○4LED ○5打印机○6扫描仪○7绘图仪○8触摸屏 A、○ 1○3○6○8 B、○2○4○5○7 C、○2○5○6○7 D、○4○6○7○8

所谓触摸屏就是一种简易鼠标,它能让你方便的直接点击屏幕就能查询详细。

3、按照所构造的图形对象来分,点、曲线、平面、曲面或实体属

于(),而山、水、云、烟等自然界丰富多彩的对象属于()。

A、规则对象、不规则对象

B、规则对象、属性对象

C、

不规则对象、几何对象 D、不规则对象、属性对象、

1、A

2、B

3、A

二、填空题:(本大题共18空,每题1分,共18分)

1、一个交互式计算机图形系统应具有、、

、、

等五个方面的功能。

2、形体的定义和图形的输入输出都是在一定的坐标系下进行的,通常这些坐标系分为:建模坐标系,,

,规格化设备坐标系和。

3、X扫描线算法中,每次用一条扫描线进行填充,对一条扫描线填充的过程可分为4个步骤:、、

、。

4、平面几何投影可分为两大类,分别是:和。

5、用一组型值点来指定曲线曲面的形状时,形状完全通过给定的型值点列,用该方法得到的曲线曲面称为曲线曲面的,而用控制点列来指定曲线曲面的形状时,得到的曲线曲 面不一定通过控制点列,该方法称为曲线曲面的。

6、对于基本几何变换,一般有平移、旋转、反射和错切等,这些基本几何变换都是相对于和

进行的几何变换。

二、填空题:(本大题共18空,每题1分,共18分) 1、计算、

存储、对话、输入、输出 2、用户坐标系,观察坐标系,设备坐标系 3、求交、排序、交点配对、区间填色 4、透视投影,平行投影 5、拟和,逼近 6、坐标原点、坐标轴

二、选择题(每小题1分,共10分)

1.在图形变换中引入齐次坐标的目的是。

A)便于实现缩放变换 B) 统一表示几种基本变换,便于计算

C)便于实现错切变换 D)无特殊目的,一直沿用而已2. 透视投影中主灭点最多可以有几个?

透视投影符合人们心理习惯,即离视点近的物体大,离视点远的物体

不平行于投影平面的平行线,经过透视投影之后收敛于一点,称为灭点。

主灭点则是平行于坐标轴的平行线产生的灭点。

A) 0 B)1 C)2 D)3

3. 在简单光照模型中,由物体表面上的点反射到视点的光强是下述哪

几项之和?

①环境光的反射光强②理想漫反射光强③镜面反射光强④物体间的反射光强。

A)①和② B)①和③ C)①②和③ D)①②③和④

4.下面关于反走样的论述哪个是错误?

A)提高分辨率 B)把像素当作平面区域进行采样

C)采用锥形滤波器加权区域采样 D)增强图像亮度

基本上反走样方法可分为两类。第一类是提高分辨率即增加采样点(提高采样频率)。然而,CRT光栅扫描设备显示非常精细光栅的能力是有限的,因此人们通常是在较高分辨率上对光栅进行计算,然后采用某种平均算法(滤除高频分量)得到较低分辨率的象素的属性,并显示在分辨率较低的显示器上。这种方法称为超采样或后置滤波。另

5.多边形扫描转换可以将。

A)多边形由顶点表示转换为点阵表示 B)多边形由区域表示转换为边界表示

C)多边形转换为显示器的扫描线 D)多边形的填充属性(如颜色)改变

既然大多数图形应用采用顶点序列表示多边形,而顶点表示又不能直接用于显示,那么就必须有从多边形顶点表示到点阵表示的转换,这种转换就称为扫描转换多边形或多边形的填充,

扫描转换多边形或多边形的填充:从多边形顶点表示到点阵表示的转换。

也就是从多边形的给定边界出发,求出位于其内部的各个像素,并给帧缓冲器内的各个对应元素设置相应的灰度和颜色

6.以下关于图形变换的论述那些是错误的?

A )错切变换虽然会引起图形角度的改变,但不会发生图形畸变;

B )平移变换不改变图形大小和形状,只改变图形位置;

C )拓扑关系不变的几何变换不改变图形的连接关系和平行关系;

D )旋转变换后各图形部分之间的线性关系和角度关系不变,变换后直线的长度不变;

畸变,指畸形地变化。既可指外在的,如形态上的变化;亦可指内在的,如心理上的变化。

在生物学上也会应用到该词就是指外在形态不正常地变化。

7. 哪一个不是国际标准化组织(ISO )批准的图形标准?

A )GKS

B )PHIGS

C )CGM

D )DXF

8.计算机图形显示器一般使用什么颜色模型?

A )HSV

B )RGB

C )CMY

D )HLS

9. 使用二维图形变换矩阵T=??????????111010002,将产生变换的结果为 。

A)图形放大2倍

B)图形放大2倍,同时沿X、Y坐标轴方向各移动1个绘图单位 C)沿X坐标轴方向各移动2个绘图单位

D)沿X坐标轴方向放大2倍,同时沿X、Y坐标轴方向各平移1

个绘图单位

10.在k+1个控制点上产生的B样条曲线经过控制点。

A)首尾两个B)0个C)所有D)K个

选择题

1.B

2.D

3.C

4.D

5.A

6.A

7.D

8.B

9.D 10.B

1)灰度等级为256级,分辨率为1024*1024的显示模式,至少需要的

帧缓存容量为_______bit。

A、7M

B、8M

C、10M

D、16M

2) ______是在高于显示分辨率的较高分辨率下用点取样方法计算,

然后对几个像素的属性进行平均得到较低分辨率下的像素属性。实际

上是把显示器看成是比实际更细的网格来增加取样率。

A、提高显示分辨率

B、图像分割

C、过取样(supersampling)

D、区域取样(areasampling)

3)用一个n位的整数表示一个位串,用它控制线型时,可以n个像素

为周期进行重复显示。若Patten=11100101,而i表示画线程序中的

第i个像素,则画线程序中的SETPIXEL(X,Y,COLOR)可改写为_____ A、if(pattern[i%4])setixel(x,y,color); B、

if(pattern[i%6])setixel(x,y,color); C、

if(pattern[i%8])setixel(x,y,color); D、if(pattern[i%12])setixel(x,y,color);

4、点P的齐次坐标为(8,6,2),其对应的空间坐标为______。

A、(8,6,2)

B、(8,6)

C、(4,3,1)

D、(4,3)

5)在多边形的逐边裁剪法中,对于某条多边形的边(方向为从端点S 到端点P)与某条裁剪线(窗口的某一边)的比较结果共有以下四种情况,分别需输出一些顶点.请问哪种情况下输出的顶点是错误的________。

A:S和P均在可见的一侧,则输出S和P.(p) B:S和P均在不可见的一侧,则不输出顶点. C:S在可见一侧,P在不可见一侧,则输出线段SP与裁剪线的交点. D:S在不可见的一侧,P在可见的一侧,则输出线段SP与裁剪线的交点和P.

6)扫描线多边形填充算法中,对于扫描线同各边的交点的处理具有特殊性。穿过某两条边的共享顶点的扫描线与这两条边的交点数只能计为_____交点:

A、0 个

B、1个

C、2个

D、3个

7、如果观察方向(视线方向)为Z轴负向,观察向量可设为V=(0,0,-1),则对场景中的图形表平面可判定其可见性。令某平面的法向量为N=(A,B,C)。当_____时,该平面可判定为后向面(Back-Face)即是观察时不可见的面。

A、C<=0 B、C>=0 C、A>=0 D、B<=0 8、多边形面的平面方程为:Ax+By+Cz+D=0。投影后,若扫描线上起始点的深度值为,则该面的扫描线上所有后继点的深度值计算公式为

____

A)z(x+1,y)=z(x,y)+A/C B)z(x+1,y)=z(x,y)-A/C C)z(x+1,y)=z(x,y)+C/A D)z(x+1,y)=z(x,y)-C/A

9)当观察光照下的光滑物体表面时,在某个方向上看到高光或强光,这个现象称为____

A、漫反射B、镜面反射 C、环境光 D、折射10)、绘制样条曲线时,如果控制点中的任一个发生了变动,则整条曲线都将受到影响的是___曲线:A、自然三次样条B、Hermite插值样条C、Cardinal样条D、Korchanek-Bartels样条

计算机图形学实验内容汇总

计算机图形学实验 肖加清

实验一图形学实验基础 一、实验目的 (1)掌握VC++绘图的一般步骤; (2)掌握OpenGL软件包的安装方法; (3)掌握OpenGL绘图的一般步骤; (4)掌握OpenGL的主要功能与基本语法。 二、实验内容 1、VC++绘图实验 (1)实验内容:以下是绘制金刚石图案。已给出VC++参考程序,但里面有部分错误,请改正,实现以下图案。 N=3 N=4

N=5 N=10 N=30

N=50 (2)参考程序 //自定义的一个类 //此代码可以放在视图类的实现文件(.cpp) 里class CP2 { public: CP2(); virtual ~CP2(); CP2(double,double); double x; double y; }; CP2::CP2() { this->x=0.0; this->y=0.0; } CP2::~CP2() { } CP2::CP2(double x0,double y0) { this->x=x0; this->y=y0; }

//视图类的一个成员函数,这个成员函数可以放在OnDraw函数里调用。 //在视图类的头文件(.h)里定义此函数 void Diamond(); //在视图类的实现文件(.cpp)里实现此函数 void CTestView::Diamond() { CP2 *P; int N; double R; R=300; N=10; P=new CP2[N]; CClientDC dc(this); CRect Rect; GetClientRect(&Rect); double theta; theta=2*PI/N; for(int i=0;i #include #include #include //定义输出窗口的大小 #define WINDOW_HEIGHT 300

计算机图形学试题附答案完整版

名词解释 将图形描述转换成用像素矩阵表示的过程称为扫描转换。 1.图形 2.像素图 3.参数图 4.扫描线 5.构造实体几何表示法 6.投影 7.参数向量方程 8.自由曲线 9.曲线拟合 10.曲线插值 11.区域填充 12.扫描转换 三、填空 1.图形软件的建立方法包括提供图形程序包、和采用专用高级语言。 2.直线的属性包括线型、和颜色。 3.颜色通常用红、绿和蓝三原色的含量来表示。对于不具有彩色功能的显示系统,颜色显示为。 4.平面图形在内存中有两种表示方法,即和矢量表示法。 5.字符作为图形有和矢量字符之分。 6.区域的表示有和边界表示两种形式。 7.区域的内点表示法枚举区域内的所有像素,通过来实现内点表示。 8.区域的边界表示法枚举区域边界上的所有像素,通过给赋予同一属性值来实现边界表示。 9.区域填充有和扫描转换填充。 10.区域填充属性包括填充式样、和填充图案。 11.对于图形,通常是以点变换为基础,把图形的一系列顶点作几何变换后,

连接新的顶点序列即可产生新的变换后的图形。 12.裁剪的基本目的是判断图形元素是否部分或全部落在之内。 13.字符裁剪方法包括、单个字符裁剪和字符串裁剪。 14.图形变换是指将图形的几何信息经过产生新的图形。 15.从平面上点的齐次坐标,经齐次坐标变换,最后转换为平面上点的坐标,这一变换过程称为。 16.实体的表面具有、有界性、非自交性和闭合性。 17.集合的内点是集合中的点,在该点的内的所有点都是集合中的元素。 18.空间一点的任意邻域内既有集合中的点,又有集合外的点,则称该点为集合的。 19.内点组成的集合称为集合的。 20.边界点组成的集合称为集合的。 21.任意一个实体可以表示为的并集。 22.集合与它的边界的并集称集合的。 23.取集合的内部,再取内部的闭包,所得的集合称为原集合的。 24.如果曲面上任意一点都存在一个充分小的邻域,该邻域与平面上的(开)圆盘同构,即邻域与圆盘之间存在连续的1-1映射,则称该曲面为。 25.对于一个占据有限空间的正则(点)集,如果其表面是,则该正则集为一个实体(有效物体)。 26.通过实体的边界来表示一个实体的方法称为。 27.表面由平面多边形构成的空间三维体称为。 28.扫描表示法的两个关键要素是和扫描轨迹。 29.标量:一个标量表示。 30.向量:一个向量是由若干个标量组成的,其中每个标量称为向量的一个分量。 四、简答题 1. 什么是图像的分辨率?

计算机图形学实验

实验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 ;

计算机图形学实验一

实验一二维基本图元的生成与填充 实验目的 1.了解并掌握二维基本图元的生成算法与填充算法。 2.实现直线生成的DDA算法、中点算法和Bresenham算法。 3.实现圆和椭圆生成的DDA和中点算法, 对几种算法的优缺点有感性认识。 二.实验内容和要求 1.选择自己熟悉的任何编程语言, 建议使用VC++6.0。 2.创建良好的用户界面,包括菜单,参数输入区域和图形显示区域。 3.实现生成直线的DDA算法、中点算法和Bresenham算法。 4.实现圆弧生成的中点算法。 5.实现多边形生成的常用算法, 如扫描线算法,边缘填充算法。 6.实现一般连通区域的基于扫描线的种子填充算法。 7.将生成算法以菜单或按钮形式集成到用户界面上。 8.直线与圆的坐标参数可以用鼠标或键盘输入。 6. 可以实现任何情形的直线和圆的生成。 实验报告 1.用户界面的设计思想和框图。 2.各种实现算法的算法思想。 3.算法验证例子。 4.上交源程序。 直线生成程序设计的步骤如下: 为编程实现上述算法,本程序利用最基本的绘制元素(如点、直线等),绘制图形。如图1-1所示,为程序运行主界面,通过选择菜单及下拉菜单的各功能项分别完成各种对应算法的图形绘制。 图1-1 基本图形生成的程序运行界面 2.创建工程名称为“基本图形的生成”单文档应用程序框架

(1)启动VC,选择“文件”|“新建”菜单命令,并在弹出的新建对话框中单击“工程”标签。 (2)选择MFC AppWizard(exe),在“工程名称”编辑框中输入“基本图形的生成”作为工程名称,单击“确定”按钮,出现Step 1对话框。 (3)选择“单个文档”选项,单击“下一个”按钮,出现Step 2对话框。 (4)接受默认选项,单击“下一个”按钮,在出现的Step 3~Step 5对话框中,接受默认选项,单击“下一个”按钮。 (5)在Step 6对话框中单击“完成”按钮,即完成“基本图形的生成”应用程序的所有选项,随后出现工程信息对话框(记录以上步骤各选项选择情况),如图1-2所示,单击“确定”按钮,完成应用程序框架的创建。 图1-2 信息程序基本 3.编辑菜单资源 设计如图1-1所示的菜单项。在工作区的ResourceView标签中,单击Menu项左边“+”,然后双击其子项IDR_MAINFRAME,并根据表1-1中的定义编辑菜单资源。此时VC已自动建好程序框架,如图1-2所示。 表1-1菜单资源表 菜单标题菜单项标题标示符ID 直线DDA算法生成直线ID_DDALINE Bresenham算法生成直线ID_BRESENHAMLINE 中点算法生成直线ID_MIDPOINTLINE 4.添加消息处理函数 利用ClassWizard(建立类向导)为应用程序添加与菜单项相关的消息处理函数,ClassName栏中选择CMyView,根据表1-2建立如下的消息映射函数,ClassWizard会自动完成有关的函数声明。 表1-2菜单项的消息处理函数 菜单项ID消息消息处理函数ID_DDALINE CONMMAN OnDdaline

计算机图形学5套模拟题

组卷规则:每套模拟题5个问答或者计算或者证明题,每题20分。 《计算机图形学基础》模拟试题(1) 1、简述Cohen-Sutherland 裁剪方法的思想,并指出与之相比,中点裁剪方法的改进之处,及这种改进的理由。 答:Cohen-Sutherland 裁剪算法的思想是:对于每条线段分为三种情况处理。(1)若完全在窗口内,则显示该线段简称“取”之。(2)若明显在窗口外,则丢弃该 线段,简称“弃”之。(3)若线段既不满足“取”的条件,也不满足“弃”的条件,则求线段与窗口交点,在交点处把线段分为两段。其中一段完全在窗口外,可弃之。然后对另一段重复上述处理。中点分割算法的大意是,与Cohen-Sutherland 算法一样首先对线段端点进行编码,并把线段与窗口的关系分为三种情况: 全在、完全不在和线段和窗口有交。对前两种情况, 进行同样的处理。对于第三种情况,用中点分割的方法求出线段与窗口的交点。即从点出发找出距最近的可见点A和从点出发找出距最近的可见点B,两个可见点之间的连线即为线段的可见部分。从出发找最近可见点采用中点分割方法:先求出的中点,若不是显然不可见的,并且在窗口中有可见部分,则距最近的可见点一定落在上,所以用代替;否则取代替。再对新的求中点。重复上述过程,直到长度小于给定的控制常数为止,此时收敛于交点。 改进之处在于,对第三种情况,不直接解方程组求交,而是采用二分法收搜索交点。这种改进的理由是:计算机屏幕的象素通常为1024×1024,最多十次二分搜索即可倒象素级,必然找到交点。而且中点法的主要计算过程只用到加法和除2运算,效率高,也适合硬件实现。 2、在Phong 模型 中,三项分别表示何含义?公式中的各个符号的含义指什么? 答:三项分别代表环境光、漫反射光和镜面反射光。为环境光的反射光强,为理想漫反射光强,为物体对环境光的反射系数,为漫反射系数,为镜面反射系数,为高光指数,L 为光线方向,N 为法线方向,V 为视线方向,R 为光线的反射方向。

计算机图形学实验报告

《计算机图形学》实验报告姓名:郭子玉 学号: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; }

计算机图形学实验报告 (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))

计算机图形学基础第五章课后习题答案

5.3 试用中点Bresenham 算法画直线段的原理推导斜率在[-1,0]之间的直线段绘制过程(要求写清原理、误差函数、递推公式以及最终画图过程)。 解: 原理:每次在最大位移方向上走一步,而另一个方向是走步还是不走步取决于误差项的判别。 ∵斜率k 在[-1,0]之间 ∴x 为最大位移方向,每次在x 加1,而y 或减1或减0。 设直线段的方程F(x,y)=y-kx-b ,假设当前点是P(x i ,y i ),则下一点在P u (x i +1,y i )与P d (x i +1,y i -1)中选一。设M 为P u 和P d 的中点,则M 点的坐标为(x i +1,y i -0.5)。 构造误差判别式: d i =F(x M ,y M )=F(x i +1,y i -0.5)= y i -0.5-k(x i +1)-b 若d i ≥0,取P d (x i +1,y i -1); 若d i <0,取P u (x i +1,y i ); 即有x i+1=x i +1,y i+1=y i -1(d i ≥0)或y i (d i <0)。 误差函数的递推: d i ≥0时,取P d (x i +1,y i -1),再判断下一像素取哪个时,应计算 d i+1=F(x i +2,y i -1.5)= y i -1.5-k(x i +2)-b=d i -1-k ,增量为-1-k 。 d i <0时,取P u (x i +1,y i ),再判断下一像素取哪个时,应计算 d i+1=F(x i +2,y i -0.5)= y i -0.5-k(x i +2)-b=d i -k ,增量为-k 。 (x 0,y

计算机图形学实验报告

目录

实验一直线的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(); }

计算机图形学第二版课后习题答案

第一章绪论 概念:计算机图形学、图形、图像、点阵法、参数法、 图形的几何要素、非几何要素、数字图像处理; 计算机图形学和计算机视觉的概念及三者之间的关系; 计算机图形系统的功能、计算机图形系统的总体结构。 第二章图形设备 图形输入设备:有哪些。 图形显示设备:CRT的结构、原理和工作方式。 彩色CRT:结构、原理。 随机扫描和光栅扫描的图形显示器的结构和工作原理。 图形显示子系统:分辨率、像素与帧缓存、颜色查找表等基本概念,分辨率的计算 第三章交互式技术 什么是输入模式的问题,有哪几种输入模式。 第四章图形的表示与数据结构 自学,建议至少阅读一遍 第五章基本图形生成算法 概念:点阵字符和矢量字符; 直线和圆的扫描转换算法; 多边形的扫描转换:有效边表算法; 区域填充:4/8连通的边界/泛填充算法;

内外测试:奇偶规则,非零环绕数规则; 反走样:反走样和走样的概念,过取样和区域取样。 5.1.2 中点 Bresenham 算法(P109) 5.1.2 改进 Bresenham 算法(P112) 习题答案

习题5(P144) 5.3 试用中点Bresenham算法画直线段的原理推导斜率为负且大于1的直线段绘制过程(要求写清原理、误差函数、递推公式及最终画图过程)。(P111) 解: k<=-1 |△y|/|△x|>=1 y为最大位移方向 故有 构造判别式: 推导d各种情况的方法(设理想直线与y=yi+1的交点为Q): 所以有: y Q-kx Q-b=0 且y M=y Q d=f(x M-kx M-b-(y Q-kx Q-b)=k(x Q-x M) 所以,当k<0, d>0时,M点在Q点右侧(Q在M左),取左点 P l(x i-1,y i+1)。 d<0时,M点在Q点左侧(Q在M右),取右点 Pr(x i,y i+1)。 d=0时,M点与Q点重合(Q在M点),约定取右点 Pr(x i,y i+1) 。 所以有 递推公式的推导: d2=f(x i-1.5,y i+2) 当d>0时, d2=y i+2-k(x i-1.5)-b 增量为1+k =d1+1+k

计算机图形学实验报告

计算机图形学 实验报告 姓名:谢云飞 学号: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;

《计算机图形学实验报告》

一、实验目的 1、掌握中点Bresenham直线扫描转换算法的思想。 2掌握边标志算法或有效边表算法进行多边形填充的基本设计思想。 3掌握透视投影变换的数学原理和三维坐标系中几何图形到二维图形的观察流程。 4掌握三维形体在计算机中的构造及表示方法 二、实验环境 Windows系统, VC6.0。 三、实验步骤 1、给定两个点的坐标P0(x0,y0),P1(x1,y1),使用中点Bresenham直线扫描转换算法画出连接两点的直线。 实验基本步骤 首先、使用MFC AppWizard(exe)向导生成一个单文档视图程序框架。 其次、使用中点Bresenham直线扫描转换算法实现自己的画线函数,函数原型可表示如下: void DrawLine(CDC *pDC, int p0x, int p0y, int p1x, int p1y); 在函数中,可通过调用CDC成员函数SetPixel来画出扫描转换过程中的每个点。 COLORREF SetPixel(int x, int y, COLORREF crColor ); 再次、找到文档视图程序框架视图类的OnDraw成员函数,调用DrawLine 函数画出不同斜率情况的直线,如下图:

最后、调试程序直至正确画出直线。 2、给定多边形的顶点的坐标P0(x0,y0),P1(x1,y1),P2(x2,y2),P3(x3,y3),P4(x4,y4)…使用边标志算法或有效边表算法进行多边形填充。 实验基本步骤 首先、使用MFC AppWizard(exe)向导生成一个单文档视图程序框架。 其次、实现边标志算法或有效边表算法函数,如下: void FillPolygon(CDC *pDC, int px[], int py[], int ptnumb); px:该数组用来表示每个顶点的x坐标 py :该数组用来表示每个顶点的y坐标 ptnumb:表示顶点个数 注意实现函数FillPolygon可以直接通过窗口的DC(设备描述符)来进行多边形填充,不需要使用帧缓冲存储。(边标志算法)首先用画线函数勾画出多边形,再针对每条扫描线,从左至右依次判断当前像素的颜色是否勾画的边界色,是就开始填充后面的像素直至再碰到边界像素。注意对顶点要做特殊处理。 通过调用GDI画点函数SetPixel来画出填充过程中的每个点。需要画线可以使用CDC的画线函数MoveTo和LineTo进行绘制,也可以使用实验一实现的画直线函数。 CPoint MoveTo(int x, int y ); BOOL LineTo(int x, int y ); 实现边标志算法算法需要获取某个点的当前颜色值,可以使用CDC的成员函数 COLORREF GetPixel(int x, int y ); 再次、找到文档视图程序框架视图类的OnDraw成员函数,调用FillPolygon 函数画出填充的多边形,如下: void CTestView::OnDraw(CDC* pDC) { CTestcoodtransDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);

计算机图形学实验报告-实验5Phong光照模型

计算机图形学实验报告 班级计算机工硕班 学号 2011220456 姓名王泽晶

实验五: Phong光照模型 实验目的 通过本次试验,学生可以掌握简单光照明模型的计算,以及真实感绘制中三维场景搭建的初步知识。 实验内容: 对给定的光源、相机状态,对球进行Phong光照明模型绘制。 搭建三维场景: a)在三维空间中摆放1个球,半径为R,默认为50 ,摆放位置为(0,0,0) b)球的材质默认值为Ka = (0.1,0.1,0.1), Kd = (0,0,0.8), Ks = 0.2, n = 10 c)视点方向初始为(0,0,1),光源方向初始为(1,1,1) d)视口设置为x0 = -100, y0 = -75, w = 200, h = 150 使用phong模型绘制场景 试验步骤: 添加成员函数,编写成员数代码为 override public function computeIntersection( viewStart:Vec3, viewDir:Vec3):Boolean { // See https://www.360docs.net/doc/6613113063.html,/geometry/sphereline/ var viewEnd:Vec3 = viewStart.add(viewDir); var A:Number = Math.pow(viewEnd.getVec(0) - viewStart.getVec(0), 2) +Math.pow(viewEnd.getVec(1) - viewStart.getVec(1), 2) + Math.pow(viewEnd.getVec(2) - viewStart.getVec(2), 2); var B:Number =((viewEnd.getVec(0) - viewStart.getVec(0)) * (viewStart.getVec(0) - _position.getVec(0)) + (viewEnd.getVec(1) - viewStart.getVec(1)) * (viewStart.getVec(1) - _position.getVec(1)) + (viewEnd.getVec(2) - viewStart.getVec(2)) * (viewStart.getVec(2) - _position.getVec(2))) * 2.0;

5.计算机图形学

中国海洋大学本科生课程大纲 课程属性:公共基础/通识教育/学科基础/专业知识/工作技能,课程性质:必修、选修 一、课程介绍 1.课程描述(中英文): 计算机图形学是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。本课程主要介绍如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。如计算机图形学的研究内容和应用领域,图形显示原理,直线和圆弧的常用生成算法,封闭区域的填充算法,图形变换的数学基础和常见的图形几何变换算法等。通过本课程教学,学生能够掌握计算机图形学的基本概念和原理,并能在实践中加以运用。 Computer graphics uses mathematical algorithms to convert two-dimensional or three-dimensional graphics into the grid form of a computer monitor. This course mainly introduces the principles and algorithms of graphics generation in a computer, and the calculation, processing and display of graphics using computers. Such as the content and application fields of computer graphics, the generation algorithm of straight lines and arcs, the filling algorithm of enclosed areas, the mathematical foundation of graphic transformation and geometric transformation algorithms. Through the teaching of this course, students can master the basic concepts and principles of computer graphics and apply them in practice. - 1 -

计算机图形学实验二报告

计算机科学与通信工程学院 实验报告 课程计算机图形学 实验题目曲线拟合 学生姓名 学号 专业班级 指导教师 日期

成绩评定表

曲线拟合 1. 实验内容 1. 绘制三次Bezier曲线 (1)给定四个已知点P1—P4,以此作为控制顶点绘制一段三次Bezier曲线。 (2)给定四个已知点P1—P4,以此作为曲线上的点绘制一段三次Bezier曲线。 2. 绘制三次B样条曲线 给定六个已知点P1—P6,以此作为控制顶点绘制一条三次B样条曲线。 2. 实验环境 软硬件运行环境:Windows XP 开发工具:visual studio 2008 3. 问题分析 1. 绘制三次Bezier曲线 Bezier曲线是用N+1个顶点(控制点)所构成的N根折线来定义一根N阶曲线。本次实验中的三次Bezier曲线有4个顶点,设它们分别为P0,P1,P2,P3,那么对于曲线上各个点Pi(x,y)满足下列关系: P(t)=[(-P0+3P1-3P2+3P3)t3+(3P0-6P1+3P2)t2+(-3P0+3P2)t+(P0+4P1+P2)]/6 X(t)=[(-X0+3X1-3X2+3X3)t3+(3X0-6X1+3X2)t2+(-3X0+3X2)t+(X0+4X1+X2)]/6 Y(t)=[(-Y0+3Y1-3Y2+3Y3)t3+(3Y0-6Y1+3Y2)t2+(-3Y0+3Y2)t+(Y0+4Y1+Y2)]/6 其中P0、P1、P2、P3为四个已知的点,坐标分别为(X0、Y0)、(X1、Y1)、(X1、Y2) 、(X3、Y3)。所以只要确定控制点的坐标,该曲线可通过编程即可绘制出来。 2. 绘制三次B样条曲线 三次B样条函数绘制曲线的光滑连接条件为:对于6个顶点,取P1、P2、P3、P4 4个顶点绘制在第一段三次样条曲线,再取P2、P3、P4、P5 这4个顶点绘制在第二段三次样条曲线,总计可绘制3段光滑连接的三次样条曲线。 4. 算法设计 程序框架 //DiamondView.h class CDiamondView : public CView { ……

计算机图形学实验报告

计算机图形学 实验报告 学号:20072115 姓名: 班级:计算机 2班 指导老师:何太军 2010.6.19

实验一、Windows 图形程序设计基础 1、实验目的 1)学习理解Win32 应用程序设计的基本知识(SDK 编程); 2)掌握Win32 应用程序的基本结构(消息循环与消息处理等); 3)学习使用VC++编写Win32 Application 的方法。 4)学习MFC 类库的概念与结构; 5)学习使用VC++编写Win32 应用的方法(单文档、多文档、对话框); 6)学习使用MFC 的图形编程。 2、实验内容 1)使用WindowsAPI 编写一个简单的Win32 程序,调用绘图API 函数绘制若干图形。(可选任务) 2 )使用MFC AppWizard 建立一个SDI 程序,窗口内显示"Hello,This is my first SDI Application"。(必选任务) 3)利用MFC AppWizard(exe)建立一个SDI 程序,在文档视口内绘制基本图形(直线、圆、椭圆、矩形、多边形、曲线、圆弧、椭圆弧、填充、文字等),练习图形属性的编程(修改线型、线宽、颜色、填充样式、文字样式等)。定义图形数据结构Point\Line\Circle 等保存一些简单图形数据(在文档类中),并在视图类OnDraw 中绘制。 3、实验过程

1)使用MFC AppWizard(exe)建立一个SDI 程序,选择单文档; 2)在View类的OnDraw()函数中添加图形绘制代码,说出字符串“Hello,This is my first SDI Application”,另外实现各种颜色、各种边框的线、圆、方形、多边形以及圆弧的绘制; 3)在类视图中添加图形数据point_pp,pp_circle的类,保存简单图形数据,通过在OnDraw()函数中调用,实现线、圆的绘制。 4、实验结果 正确地在指定位置显示了"Hello,This is my first SDI Application"字符串,成功绘制了圆,椭圆,方形,多边形以及曲线圆弧、椭圆弧,同时按指定属性改绘了圆、方形和直线。成功地完成了实验。 结果截图: 5、实验体会 通过实验一,了解了如用使用基本的SDI编程函数绘制简单的图

计算机图形学实验报告三

《计算机图形学》实验报告

//glEnable(GL_SCISSOR_TEST); //glScissor(0.0f,0.0f,500,300); glutWireTeapot(0.4); glFlush(); } //窗口调整子程序 void myReshape(int w, int h) { glViewport(500, -300, (GLsizei)w, (GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= h) glOrtho(-1, 1, -(float)h / w, (float)h / w, -1, 1); else glOrtho(-(float)w / h, (float)w / h, -1, 1, -1, 0.5); } 2,使用opengl函数写一个图形程序,要求分别使用三个光源从一个茶壶的前右上方(偏红色),正左侧(偏绿色)和前左下方(偏蓝色)对于其进行照射,完成程序并观察效果。 }

//绘图子程序 void display(void) { glColor3f(1.0, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); //glMatrixMode(GL_MODELVIEW); //glLoadIdentity(); //设置光源的属性1 GLfloat LightAmbient1[] = { 1.0f, 0.0f, 0.0f, 1.0f }; //环境光参数 ( 新增 ) GLfloat LightDiffuse1[] = { 1.0f, 0.0f, 0.0f, 1.0f }; // 漫射光参数 ( 新增 ) GLfloat Lightspecular1[] = { 1.0f, 0.0f, 0.0f, 1.0f }; // 镜面反射 GLfloat LightPosition1[] = { 500.0f, 500.0f, 500.0f, 1.0f }; // 光源位置 ( 新增 ) glLightfv(GL_LIGHT0, GL_POSITION, LightPosition1); glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient1); // 设置环境光 glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse1); // 设置漫射光 glLightfv(GL_LIGHT0, GL_SPECULAR, Lightspecular1);//设置镜面反射光 //设置光源的属性2 GLfloat LightAmbient2[] = { 0.0f, 1.0f, 0.0f, 1.0f }; //环境光参数 ( 新增 )

《计算机图形学》 课程实验指导(1)

《计算机图形学》课程实验指导 一.实验总体方案 1.教学目标与基本要求 (1)掌握教材所介绍的图形算法的原理; (2)掌握通过具体的平台实现图形算法的方法,培养相应能力; (3)通过实验培养具有开发一个基本图形软件包的能力。 2. 实验平台与考核 实验主要结合OpenGL设计程序实现各种课堂教学中讲过的图形算法为主。程序设计语言主要以C/C++语言为主,开发平台为Visual C++。 每次实验前完成实验报告的实验目的、实验内容、实验原理、实验代码四部分并接受抽查,实验完成后完成实验结果、实验体会两部分,本次实验课结束前提交。 3. 实验步骤 (1) 预习教材与实验指导相关的算法理论及原理; (2) 仿照教材与实验指导提供的算法,利用VC+OpenGL进行实现; (3) 调试、编译、运行程序,运行通过后,可考虑对程序进行修改或改进。 二. 实验具体方案 实验预备知识 OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。 1)与C语言紧密结合: OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL 作图甚至比TC更加简单; 2)强大的可移植性: 微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统。而OpenGL 不仅用于 Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。并且,OpenGL 的基本命令都做到了硬件无关,甚至是平台无关; 3) 高性能的图形渲染: OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。 总之,OpenGL是一个非常优秀的图形软件接口。OpenGL官方网站(英文)https://www.360docs.net/doc/6613113063.html, 下面将对Windows下的OpenGL编程进行简单介绍。如下是学习OpenGL前的准备工作:1.选择一个编译环境 现在Windows系统的主流编译环境有Visual C++,C++ Builder,Dev-C++等,它们都是支持OpenGL的。但这里我们选择Visual C++ 作为学习OpenGL的实验环境。 2.安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。Windows环境下的GLUT下载地址:(大小约为150k) https://www.360docs.net/doc/6613113063.html,/resources/libraries/glut/glutdlls37beta.zip Windows环境下安装GLUT的步骤: 1)将下载的压缩包解开,将得到5个文件 2)在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VisualStudio2005,则

相关文档
最新文档