计算机图形学考试总结

计算机图形学考试总结
计算机图形学考试总结

第一章绪论

计算机图形学的基本概念

计算机图形学:是研究怎样用数字计算机生成、处理和显示图形的一门学科。

图形:计算机图形学的研究对象。

构成图形的要素:几何要素——几何属性(点、线、面、体)

非几何要素——视觉属性(明暗、灰度、色彩、纹理、透明性、线型、线宽)表示图形的方法:点阵表示;参数表示

研究内容

计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法,构成了计算机图形学的主要研究内容。

图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。计算机图形学的应用

图形用户界面;计算机辅助设计与制造(CAD/CAM);4 科学计算的可视化:CT;

真实感图形实时绘制与自然景物仿真;地理信息系统(GIS);Virtual Reality(虚拟现实、灵境);事务和商务数据的图形显示;地形地貌和自然资源的图形显示

过程控制及系统环境模拟;电子出版及办公自动化;计算机动画及广告

计算机艺术;科学计算的可视化;工业模拟;计算机辅助教学

当前研究热点:

1.真实感图形实时绘制

2.野外自然景物的模拟3 与计算机网络技术的紧密结合

4 计算机动画

5 用户接口

6 计算机艺术

7 并行图形处理

所熟悉的图形软件包

图形软件的标准

GKS (Graphics Kernel System) (第一个官方标准,1977)

PHIGS(Programmer’s Herarchical Iuteractive Graphics system) 一些非官方图形软件,广泛应用于工业界,成为事实上的标准

DirectX (MS)

Xlib(X-Window系统)

OpenGL(SGI)

Adobe公司Postscript

CAGD(Computer Aided Geometric Design)

图形系统的功能1.计算功能2.存储功能3.对话功能4.输入功能5.输出功能

图形输入设备

1 键盘和鼠标

2 跟踪球和空间球

3 光笔

4 数字化仪

5 触摸板

6 扫描仪

图形输出设备

显示器

1 阴极射线管显示器

2 液晶显示器(LCD)

3 发光二极管显示器

4 等离子显示器

5 等离子显示器6发光聚合物技术

图形绘制设备

针式打印机喷墨打印机激光打印机静电绘图仪笔式绘图仪

3章多边形

3.4 多边形的扫描转换与区域填充

?多边形扫描转换与区域填充可以统称区域填充,就是如何用颜色或图案来填充一个二维区域。填充主要做两件工作:一是确定需要填充的范围,二是确定填充的内容。

一般区域填充指的是已知区域内一个种子,然后由种子向周围蔓延填充规定区域。

?方法:

?扫描线法:x-扫描线法-〉有序边表法,边填充算法

?种子填充算法(区域填充)

多边形扫描转换与区域填充方法比较:

联系:都是光栅图形面着色,用于真实感图形显示。可相互转换。

多边形的扫描转换转化为区域填充问题:当给定多边形内一点为种子点,并用Bresenham 或DDA算法将多边形的边界表示成八连通区域后,则多边形的扫描转换转化为区域填充。

区域填充转化为多边形的扫描转换;若已知给定多边形的顶点,则区域填充转化为多边形的扫描转换。

不同点:

1.基本思想不同;前者是顶点表示转换成点阵表示,后者只改变区域内填充颜色,没有

改变表示方法。

2.对边界的要求不同

前者只要求扫描线与多边形边界交点个数为偶数。后者:区域封闭,防止递归填充跨界。

3.基本的条件不同

前者:从边界顶点信息出发。后者:区域内种子点。

3.7 反走样

?用于减少或消除这种效果的技术,称为反走样(antialiasing)。

方法:

?提高分辨率:提高分辨率、简单取样、加权取样(过取样(supersampling),或后滤波)?区域取样(area sampling),或前滤波

5章:裁剪

5.3 二维图形裁剪

5.4 投影变换

5.1 坐标系统及其变换-坐标系

造型坐标系

用户坐标系直角坐标系、仿射坐标系、圆柱坐标系、球坐标系、极坐标系

观察坐标系

规格化的设备坐标系

设备坐标系

5.4 投影变换

投影分类

?平面几何投影

对平面几何投影,按照投影线角度的不同,有两种基本投影方法:

1 平行投影(parallel projection)。它使用一组平行投影将三维对象投影到投影平面上去。

2 透视投影(perspective projection)。它使用一组由投影中心产生的放射投影线,将三维

对象投影到投影平面上去。

(一)三视图

三视图:正视图、侧视图和俯视图

5.4.2透视投影

灭点

?不平行于投影面的平行线的投影会汇聚到一个点,这个点称为灭点(Vanishing Point)。

?坐标轴方向的平行线在投影面上形成的灭点称作主灭点。

?一点透视有一个主灭点,即投影面与一个坐标轴正交,与另外两个坐标轴平行。

?两点透视有两个主灭点,即投影面与两个坐标轴相交,与另一个坐标轴平行。

?三点透视有三个主灭点,即投影面与三个坐标轴都相交。

?观察投影

7 章图形的几何变换

从应用角度讲,图形变换可分为两种:

?几何变换(geometrical transformation ):几何变换是指坐标系不动,形体相对于坐

标系在移动,如图形的缩放、平移、变形等。

?视像变换(viewing transformation):也称观察变换或者取景变换,是指形体不动,而所处的坐标系在变换。

图形变换是计算机图形学基础内容之一,其作用为:

?把用户坐标系与设备坐标系联系起来;

?可由简单图形生成复杂图形;

?可用二维图形表示三维形体;

?动态显示

综合题4道

一:

2章:基本图形生成技术

3.1直线段的扫描转换算法

?DDA算法

?中点画线法

?Bresenham画线算法

数值微分(DDA)法:

void DDALine(int x0,int y0,int x1,int y1,int color)

CDC*pDC=GetDC();

int x;

float dx,dy,y,k;

dy=y1-y0; dx=x1-x0;

k=dy/dx;

y=y0;

for(x=x0;x<=x1;x++)

{ pDC->SetPixel(x,int(y+0.5),color);

y=y+k;

}

}

二、中点画线法

void Midpoint Line (int x0,int y0,int x1, int y1,int color)

{ CDC*pDC=GetDC();

int a, b, d1, d2, d, x, y;

a=y0-y1; b=x1-x0; d=2*a+b;

d1=2*a ; d2=2* (a+b);

x=x0; y=y0;

pDC->SetPixe(x, y, color);

while (x

{ if (d<0) {x++; y++; d+=d2; }

else {x++; d+=d1;}

pDC->SetPixe(x, y, color);

}

}

三、Bresenham画线算法

算法步骤

? 1.输入直线的两端点P0(x0,y0)和P1(x1,y1)。

? 2.计算初始值dx、dy、e=-dx、x=x0、y=y0。

? 3.绘制点(x,y)。

? 4.e更新为e+2dy,判断e的符号。

若e>0,则(x,y)更新为(x+1,y+1),同

时将e更新为e-2dx;否则(x,y)更新

为(x+1,y)。

? 5.当直线没有画完时,重复步骤3和4。否则结束。

?Bresenhamline(int x0,int y0,int x1,int y1,int color)

?{ CDC*pDC=GetDC();

?int x,y,dx,dy,e;

?Dx=x1-x0;

?Dy=y1-y0;

?e=-dx;x=x0;y=y0;

?While (x<=x1)

?{ pDC->SetPixe(x, y, color);

?X++;

?e=e+2*dy;

?If (e>0)

?{ y++;

?e=e-2*dx;

?}

?}

?}

4章:圆的扫描转换算法

圆的扫描转换

?角度DDA法

?中点画圆法

?Bresenham画圆算法

?生成圆弧的正负法

?圆的内接正多边形逼近法

3.2.2中点画圆法:

MidpointCircle(int r, int color)

{ CDC*pDC=GetDC();

int x,y;

float d;

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

pDC->SetPixe(x, y, color);

while(x

if(d<0){ d+ = 2*x+3; x++ }

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

pDC->SetPixe(x, y, color);

} }

3.2.3 Bresenham画圆算法OnBresenhamcircle(int r ,int c) {

CDC* pDC=GetDC();

int x,y,p,k;

x=0,y=r,p=3-2*r;

while(x

{

pDC->SetPixel(x, y, c);

if (p<0)

p=p+4*x+6;

else

{

p=p+4*(x-y)+10;

y-=1;

}

x+=1;

}

if(x==y)

pDC->SetPixel(x, y, c); ReleaseDC(pDC);

}

二:

扫描线填充算法:(综合题)

(1)初始化:堆栈置空。将种子点(x,y)入栈。

(2)出栈:若栈空则结束。否则取栈顶元素(x,y),以y作为当前扫描线。

(3)填充并确定种子点所在区段:从种子点(x,y)出发,沿当前扫描线向左、右两个方向填充,直到边界。分别标记区段的左、右端点坐标为xl和xr。

(4)并确定新的种子点:在区间[xl,xr]中检查与当前扫描线y上、下相邻的两条扫描线上的象素。若存在非边界、未填充的象素,则把每一区间的最右象素作为种子点压入堆栈,返回第(2)步。

上述算法对于每一个待填充区段,只需压栈一次;因此,扫描线填充算法提高了区域填充的效率。

三:

四:

Cohen-Sutherland 算法

如图所示,叙述对线段p1p2进行Cohen-Sutherland(编码法)法裁剪的过程

? 1)如图:求直线段所在区号:code1=0001,code2=0100.

? (2) 短线段p1,p2做简单测试,code1∪code2 ≠0,code1∩code2 =0,属于第三种情

况,即不能简单接受,也不能简单裁剪掉

? (3)由code1=0001可知p1在窗口左边,计算p1p2与窗口左边界的交点p3,并求

p3所在区号,code3=0000,说明p3在窗口内,而p1p3必在窗口外,应舍弃。对线段p3p2重复上述处理

? (4)对线段p3p2,code2∪code3≠0,且code2∩code3 =0,仍属于情况三

? (5)由code2=0100知,p2在窗口下方,计算p3p2与窗口下边界的交点p4,并求

p4所在区号,code4=0000,即线段p4p2必在窗口外,对p3p4重复上述操。 ? (6)对于p3p4,因为code3∪code4=0,故p3p4直接接受,保留。 ? (7)结束。

中点分割裁剪算法

如图所示,叙述对线段p1p2进行中点分割法裁剪的过程,要求步骤清晰,其中,p3为p1p2的中点,p4为p1p3的中点,p5为p1p4的中点,p6为p4p3的中点,p7为p3p6的中点

? (1)首先对p1p2进行编码,p1=0001,p2=0110。

? (2)由于code1|code2 ≠0,code1&code2 =0,故对线段既不能舍弃,也不能保留,

对其进行中点法分割处理。

? (3)p3为p1p2的中点,p3p2可弃之,处理p1p3 ? (4)p1p3的中点为p4,处理p1p4和p4p3, ? (5)p1p4中点为p5,p1p5可弃之,p5p4可取之

? (6)p4p3中点为p6,p4p6可取之,处理p3p6,p3p6中点为p7,p6p7可取之,p7p3

可弃之。

? (7)处理完毕,合并p5p4,p4p6,p6p7。

()()()()2122112211010001101000111010

0011''1***t t y x y x y x T T y x T T T T y x T T y x y x P =????

? ??????? ??=?

??

??

??=

相关文档
最新文档