当前位置:文档之家› 计算机图形与可视化课程设计

计算机图形与可视化课程设计

计算机图形与可视化课程设计
计算机图形与可视化课程设计

课程设计课程名称:计算机图形学与可视化学生姓名:

学号:

专业班级:

指导老师:

院系名称:

课程设计任务书

利用迭代函数系统生成分形图案成绩课

程设计主要内容迭代函数系统(Iteration Function System,简称IFS)是以仿射变换为框架,根据几何对象的整体与局部具有自相似的结构,将总体形状以一定的概率按不同的仿射变换迭代下去,直至得到满意的分型图形。迭代函数系统绘制分形图形有两种方法:确定性迭代算法和随机性迭代算法。本文将以此原理出发,分析分形图形的生成方法,探索一些利用IFS产生丰富的分形图形的简便方法及具体应用。

具体内容请看下面的正文。

指导教师评语建议:从学生的工作态度、工作量、设计(论文)的创造性、学术性、实用性及书面表达能力等方面给出评价。

签名: 20 年月日

目录

一.系统功能介绍 (4)

二.设计思路 (6)

三.模块图 (6)

四.小组成员及任务分配 (7)

五.主要算法介绍 (7)

六.源代码 (8)

七.程序使用说明 (8)

八.调试结果 (8)

九.总结 (14)

十.参考文献 (15)

正文:

一.系统功能介绍

迭代函数系统(Iteration Function System,简称IFS)最早是由Hutchision 在1981年提出的。美国佐治亚理工学院的M F Bamsley等人在SIGGRAMPH’88国际会议上对IFS所作的专题报告,使IFS成为分形图像压缩的基础,从而使IFS成为分形图形学最有生命力的领域之一。

迭代函数系统(IFS)是以仿射变换为框架,根据几何对象的整体与局部具有自相似的结构,将总体形状以一定的概率按不同的仿射变换迭代下去,直至得到满意的分形图形。

目前使用的迭代函数系统绘制分形图的算法主要有两种:确定性迭代算法和随机性迭代算法。它们都是通过IFS码进行迭代而产生图形的方法。

确定性迭代算法是通过仿射变换得到的。其基本原理就是找一个初始集,对集上的每一个点,根据给定的仿射变换公式进行数据变换,便可得到新的点集。这样通过多次迭代,便可绘制所需的图形。并且每个图形的局部和整体相似。只要其仿射变换系数相同,即IFS码相同,当迭代次数足够大时,最终生成的图形是相同的。

随机性迭代算法用到了概率,从而可以对图形的细节和颜色进行控制。随机性迭代算法的基本原理就是利用一个给定的IFS码{:j=1,2,…,N}(每一个仿射变换对应于一个概率),从任选的一个初始点(,)出发,依据其概率分布{,,,…,},从{:j=1,2,…,N}中选择相应的进行仿射变换,可得到新的点(,)。然后再由概率选择相应的进行变换,进而得到新的点(,)。这样反复迭代,便可得到一系列的点{(,),(,),(,),…}。这些点集显示在屏幕上,便得到一个完整的分形图。

分形,又称碎形,通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。分形思想的根源可以追溯到公元17世纪,而对分形使用严格的数学处理则始于一个世纪后卡尔·魏尔施特拉斯、格奥尔格·康托尔和费利克斯·豪斯多夫对连续而不可微函数的研究。但是分形一词直到1975年才由本华·曼德博创造出,来自拉丁文,有“零碎”、“破裂”之意。一个数学意义上分形的生成是基于一个不断迭代的方程式,即一种基于递归的反馈系统。分形有几种类型,可以分别依据表现出的精确自相似性、半自相似性和统计自相似性来定义。虽然分形是一个数学构造,它们同样可以在自然界中被找到,这使得它们被划入艺术作

品的范畴。分形在医学、土力学、地震学和技术分析中都有应用。

分形一般有以下特质:

1、在任意小的尺度上都能有精细的结构;

2、太不规则,以至无论是其整体或局部都难以用传统欧氏几何的语言来描述;

3、具有(至少是近似的或统计的)自相似形式;

4、一般地,其“分形维数”会大于拓扑维数;

5、在多数情况下有着简单的递归定义。

因为分形在所有的大小尺度下都显得相似,所以通常被认为是无限复杂的。自然界里一定程度上类似分形的事物有云、山脉、闪电、海岸线、雪片、植物根、多种蔬菜(如花椰菜和西兰花)和动物的毛皮的图案等等。但是,并不是所有自相似的东西都是分形,如实直线虽然在形式上是自相似的,但却不符合分形的其他特质,比如说它能被传统的欧氏几何语言所描述。

四个制造分形的一般技术如下:

1、逃逸时间分形:由空间(如复平面)中每一点的递推关系式所定义,例如曼德博集合、茹利亚集合、火烧船分形、新分形和李奥普诺夫分形等。由一次或两次逃逸时间公式的迭代生成的二维向量场也会产生分形,若点在此一向量场中重复地被通过。

2、迭代函数系统:这些分形都有着固定的几何替代规则。康托尔集、谢尔宾斯基三角形、谢尔宾斯基地毯、空间填充曲线、科赫雪花、龙形曲线、丁字方形、门格海绵等都是此类分形的一些例子。

3、随机分形:由随机而无确定过程产生,如布朗运动的轨迹、莱维飞行、分形风景和布朗树等。后者会产生一种称之为树状分形的分形,如扩散限制聚集或反应限制聚集丛。

4、奇异吸引子:以一个映射的迭代或一套会显出混沌的初值微分方程所产生。

分形也可以依据其自相似来分类,有如下三种:

1、精确自相似:这是最强的一种自相似,分形在任一尺度下都显得一样。由迭代函数系统定义出的分形通常会展现出精确自相似来。

2、半自相似:这是一种较松的自相似,分形在不同尺度下会显得大略(但非精确)相同。半自相似分形包含有整个分形扭曲及退化形式的缩小尺寸。由递推关系式定义出的分形通常会是半自相似,但不会是精确自相似。

3、统计自相似:这是最弱的一种自相似,这种分形在不同尺度下都能保有固定

的数值或统计测度。大多数对“分形”合理的定义自然会导致某一类型的统计自相似(分形维数本身即是个在不同尺度下都保持固定的数值测度)。随机分形是统计自相似,但非精确及半自相似的分形的一个例子。

应用:

医学中组织切片的归类

分形风景或海岸线复杂性

制作许多的艺术形式

地震学

土壤力学中的分形

电脑及电视游戏设计,尤其是有机背景的CG和部分的过程生成

二.设计思路

?分形算法:把四面体细分成更小的四面体,先找出其6个棱的中点并连接起来,这样就在4个顶点处各有一个小的四面体,原来四面体中剩下的部分应当去掉。仿效二维的生成方法,我们对保留的四个小四面体进行迭代细分。

这样细分结束后通过绘制4个三角形来绘制每一个剩下的四面体。

?交互的实现:键盘交互,即通过对按键的响应写上响应函数实现对视图和颜色的改变。

?鼠标交互:通过对鼠标左右键的交互。

三.模块图

四面体分形

算法键盘响应鼠标响应

初始标色颜

右键视图变

换、颜色变换、

退出

图形中拾取

一点

按键1、2、3、4切

换四面颜色

分形算法

四.小组成员及任务分配

:分形算法实现;查找资料

:颜色方案、视图方案算法实现;编写课程设计报告

:键盘、鼠标响应算法实现;编写课程设计报告

五.主要算法介绍

分形算法:void tetra(GLfloat *a, GLfloat *b, GLfloat *c, GLfloat *d)函数实现的是绘制四面体并且给四个面绘上不同的颜色。

void triangle3(GLfloat *a, GLfloat *b, GLfloat *c)函数用来绘制每个平面细分后的三角形。其中顶点设置为3维坐标glVertex3fv(a);

void divide_tetra(GLfloat *a,GLfloat *b,GLfloat *c,GLfloat *d,int m)细分四面体的函数实现。前四个参数为传入点的坐标,最后参数m则是细分次数。先计算六个中点的坐标mid[1][j]=(a[j]+c[j])/2; 3次循环则是对x,y,z三个坐标的一次计算,然后再递归调用绘制4个小四面体。

然后是显示回调函数void mydisplay3FX();

分形算法中必要重要的一点是隐藏面的消除。对对象进行排序以正确绘制他们的算法称为可见表面算法,也课称为隐藏面消除算法。这里采用的死Z-缓存算法。在主程序中申请辅助存储器:一个Z(深度)缓存,为此把初始化代码改为glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);

递归结束的时候调用函数:glEnable(GL_DEPTH_TEST);

算法在深度缓存中存储信息,所以必须在需要重绘的窗口清空这个缓存。为此把函数中的清屏操作改为:

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

键盘交互通过键盘回调函数glutKeyboardFunc(myKeyboard)来调用键盘响应函数,响应事件则在void myKeyboard()中具体实现。

分别判断按下的按键的具体值,然后通过改变colors数组的值以及视图函数来改变现实,所用的颜色索引保存在colorChange数组之中。

鼠标交互:其中用到了鼠标事件(mouse event)和移动事件(move event)然后分别通过回调函数glutMouseFunc(myMouse),glutMotionFunc(myMotion);来调用。

代码中对与鼠标单击相应即视角的移动,先通过点击的位置获取点下的坐标,用来判断是否在四面体内部的函数用glReadPixels(x,500-y,1,1,GL_RGB,

GL_FLOAT,pix)来实现。该函数读取点击位置的像素,将获取的结果存入数组pix在后面的判断算法中如果像素不为0则拾取该图形。该算法的好处是不需要计算复杂的坐标和线段函数而能方便的拾取对象。缺点则是在内部的白色区域点击不能够拾取图像。具体代码的实实现函数void myMouse(int btn,int state, int x,int y)

移动相应函数void myMotion(int x,int y)首先对于移动过程中获取的坐标与全局变量定义的坐标统一数量级。所以在代码开头除以150,然后对每个点的坐标以此做改变,并将这次获取的坐标存入 x0,y0中作为移动到下一个坐标的起始坐标在移动过程中就不停地循环调用该函数。

程序还对右击的事件弹出菜单做了响应,该响应是通过main函数的glutAttachMenu(GLUT_RIGHT_BUTTON); 代码实现,即将所设计的菜单加到右击事件中。具体菜单的设计见main函数事件的响应在 void main_menu(int),void color_menu(int);两个函数中而color_menu则是作为main_menu中的一个子菜单.其中对不同的事件做了响应。

六.源代码

详见附录。

七.程序使用说明

?键盘交互:分别按下键盘上的数字键1,2,3,4可以分别改变四面体的4个面的颜色;

?鼠标交互:打开后在绘图的区域按下鼠标左键不放便可以拖动图形的视角,这里为了展现图形的3D效果因此固定了其中一点不放,这样就可以看到3D 的效果;

鼠标右击则有弹出菜单显示,其中改变颜色则是同时改变4个面的颜色,本程序中运用了8组配色方案;

改变视图函数也是上述的3种函数,这里的效果立刻显现。

八.调试结果

1.程序直接运行出的图形展示

2.将运行窗口进行放大,四面体展示透视视图

3.单击鼠标右键,进行鼠标响应事件,包含四面体颜色变换、视图变换、退出

4.展示颜色方案1-8

4.展示变换视图函数1-3

5.点击退出,退出运行界面

6.键盘响应事件,依次点击1、2、3、4,即进行一套颜色切换

7.鼠标拖动响应事件,点击拾取一点,可对图形围绕一点进行拖动

九.总结

该程序中,结合了openGL很多函数的应用,首先是基础实现函数及模板过程的编写。然后就是分形算法的分析,虽然大部分是参考书中的代码,但是在具体实现时还是加入很多自己的想法。还有就是与用户的交互,从鼠标和键盘两个角度,加入了一些基本的事件响应,虽然功能不是很强大,但是初始学习的目的已经达到了。当然在其过程中查阅了网上很多的资料,以及同学之间的讨论。当然

在这过程中还是遇到很多的麻烦,一是对代码过程的理解不是很深刻,因此有些代码的位置不对导致得不出自己想要的结果。其次是本身算法的缺陷导致结果的问题。本程序中对视图函数的变化的代码做的不是很好还是有问题的希望老师能帮组解决以下这些问题!

分形打开了一个完全崭新和令人兴奋地几何学大门。这一新的数学领域,触及到人们生活的方方面面,诸如自然现象的描述,电影摄影术、天文学、经济学、气象学、生态学等。它的应用是如此广泛,它的特性是如此迷人。

十.参考文献

[1]齐东旭,分形及计算机生成[M],北京:科学出版社,1994

[2]胡瑞安,胡纪阳,徐树公,分形的计算机图像及其应用[M],北京:中国铁道

出版社,1995

附录一

3D分形源代码:

typedef int BOOL;

#define TRUE 1

#define FALSE 0

#include

#include

#include

#include

using namespace std;

GLfloat

ColorsChange[8][3]={{0,0,0},{1,0,0},{0,1,0},{0,0,1},{0,1,1},{1,0,1},{ 1,1,0},{1,1,1}};

GLfloat colors[4][3]={{1,0,0},{0,1,0},{0,0,1},{0,1,1}};

GLfloat

v[4][3]={{0,0,1},{0,0.942809,-0.333333},{-0.816497,-0.471405,-0.33333 3},{0.816497,-0.471405,-0.333333}};

//GLfloat

v[4][3]={{0,0,1},{0,0.942809,-0.333333},{-1.916497,-0.471405,-0.33333 3},{1.916497,-0.471405,-0.333333}};

int xc,yc;//鼠标按下时点的左边

GLfloat xmin=-1.916497;

GLfloat xmax=1.916497;

GLfloat ymin=-0.471405;

GLfloat ymax=0.942809;

GLfloat p[3] = {25.0,10.0,25.0};

int flat[4]={0};//标记改变哪个面的颜色

int Shitu=0;//选取视图函数标记

int x0=0;

int y0=0;

int down=0;

double x1=0.0;

double y1=0.0;

GLfloat *pix=new GLfloat[3];

void myReshape(int w,int h);

void mydisplay3FX();

void main_menu(int);

void color_menu(int);

int pick_3D(int x,int y);

//void myMotion(int x,int y);

void myKeyboard(unsigned char key,int x,int y);

//定义标记变量

BOOL picking = FALSE;//如果处于拾取状态,这位TRUE

//BOOL moving=TRUE;//如果处于多边形移动状态,则为TRUE

int in_3D=-1;//是否在图形内部

int present_color=0;//默认颜色

GLsizei wh=500,ww=500;//窗口初始大小

int draw_mode =0;//绘制模式

void triangle3(GLfloat *a,GLfloat *b,GLfloat *c)//绘制三角形

{

glVertex3fv(a);

glVertex3fv(b);

glVertex3fv(c);

}

void tetra(GLfloat *a,GLfloat *b,GLfloat *c,GLfloat *d)

{

glColor3fv(colors[0]);

triangle3(a,b,c);

glColor3fv(colors[1]);

triangle3(a,c,d);

glColor3fv(colors[2]);

triangle3(a,d,b);

glColor3fv(colors[3]);

triangle3(b,d,c);

}

void divide_tetra(GLfloat *a,GLfloat *b,GLfloat *c,GLfloat *d,int m) {

GLfloat mid[6][3];

int j;

if(m>0)

{

for(j=0;j<3;j++){

mid[1][j]=(a[j]+c[j])/2;

mid[2][j]=(a[j]+d[j])/2;

mid[3][j]=(b[j]+c[j])/2;

mid[4][j]=(c[j]+d[j])/2;

mid[5][j]=(b[j]+d[j])/2;

mid[0][j]=(a[j]+b[j])/2;

}

divide_tetra(a,mid[0],mid[1],mid[2],m-1);

divide_tetra(mid[0],b,mid[3],mid[5],m-1);

divide_tetra(mid[1],mid[3],c,mid[4],m-1);

divide_tetra(mid[2],mid[4],mid[5],d,m-1);

}

else

tetra(a,b,c,d);

//细分四面

}

//键盘响应事件

void myKeyboard(unsigned char key,int x,int y) {

if(key=='1')

{

//int a=1;

if(flat[0]<7)

{

flat[0]++;

}

else

flat[0]=0;

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

{

colors[0][i]=ColorsChange[flat[0]][i];

}

}

else if(key=='2')

{

//int a=1;

if(flat[1]<7)

{

flat[1]++;

}

else

flat[1]=0;

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

{

colors[1][i]=ColorsChange[flat[1]][i];

}

}

else if(key=='3')

{

//int a=1;

if(flat[2]<7)

{

flat[2]++;

}

else

flat[2]=0;

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

{

colors[2][i]=ColorsChange[flat[2]][i];

}

else if(key=='4')

{

//int a=1;

if(flat[3]<7)

{

flat[3]++;

}

else

flat[3]=0;

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

{

colors[3][i]=ColorsChange[flat[3]][i];

}

}

else if(key=='c'|key=='C')

{

Shitu++;

}

else if(key=='q'|key=='Q')

exit(0);

glutPostRedisplay();

}

//鼠标响应事件

void myMouse(int btn,int state,int x,int y) {

if(btn==GLUT_LEFT_BUTTON&&state==GLUT_DOWN) {

//通过按下点的像素拾取图像

glReadPixels(x,500-y,1,1,GL_RGB,GL_FLOAT,pix); //只要不是白像素就拾取图形

if(pix[0]!=1.0||pix[1]!=1.0||pix[2]!=1.0)

{

if(down==0) //获取按下点坐标

{

down=1;//标记为鼠标按下

//标记下初始位置的值

y0=y;

x0=x;

}

else

down=0;

}

if(btn==GLUT_LEFT_BUTTON&&state==GLUT_UP)

{

down=0;

}

/*

int j;

y=wh-y;

if(btn==GLUT_LEFT_BUTTON&&state==GLUT_DOWN&&!picking&&!moving) {

//增加顶点

moving=FALSE;

if(in_3D>=0)

{

if()

}

}

if(btn==GLUT_LEFT_BUTTON&& state==GLUT_DOWN && picking )

{

picking=FALSE;

//moving=FALSE;

j = pick_3D(x,y);

if(j >= 0)

{

//polygons[j].used = FALSE;

in_3D = 1;

glutPostRedisplay();

}

}*/

}

//移动图形

int pick_3D(int x,int y)

{

//根据每个多边形的包围盒寻找第一个包含拾取位置的多边形

if ((x>=xmin) && (x<=xmax) &&

(y>=ymin) && (y<=ymax))

{

in_3D=1;

return(in_3D);

}

else

{

printf("not in the 3DFenxing\n");

计算机图形学基础教程习题课1第二版孙家广胡事民编著

1.列举计算机图形学的主要研究内容。 计算机中图形的表示方法、图形的计算、图形的处理和图形的显示。 图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。 2.常用的图形输出设备是什么? 显示器(CRT、LCD、等离子)、打印机、绘图仪等。 2.常用的图形输入设备是什么? 键盘、鼠标、跟踪球、空间球、数据手套、光笔、触摸屏、扫描仪等。 3.列出3种图形软件工具。 AutoCAD、SolidWorks、UG、ProEngineer、CorelDraw、Photoshop、PaintShop、Visio、3DMAX、MAY A、Alias、Softimage等。 错误:CAD 4.写出|k|>1的直线Bresenham画线算法。 d d d d 设直线方程为:y=kx+b,即x=(y-b)/k,有x i+1=x i+(y i+1-y i)/k = x i+1/k,其中k=dy/dx。因为直线的起始点在象素中心,所以误差项d的初值d0=0。y下标每增加1,d的值相应递增1/k,即d=d+1/k。一旦d≥1,就把它减去1,这样保证d在0、1之间。 ●当d≥0.5时,最接近于当前象素的右上方象素(x i+1,y i+1),x方向加1,d减 去1; ●而当d<0.5时,更接近于上方象素(x i,y i+1)。 为方便计算,令e=d-0.5,e的初值为-0.5,增量为1/k。

●当e≥0时,取当前象素(x i,y i)的右上方象素(x i+1,y i+1),e减小1; ●而当e<0时,更接近于上方象素(x i,y i+1)。 void Bresenhamline (int x0,int y0,int x1, int y1,int color) { int x, y, dx, dy; float k, e; dx = x1-x0, dy = y1-y0, k=dy/dx; e=-0.5, x=x0, y=y0; for (i=0; i≤dy; i++) { drawpixel (x, y, color); y=y+1,e=e+1/k; if (e≥0) { x++, e=e-1;} } } 4.写出|k|>1的直线中点画线算法。 构造判别式:d=F(M)=F(x p+0.5,y p+1)=a(x p+0.5)+b(y p+1)+c ●当d<0,M在Q点左侧,取右上方P2为下一个象素; ●当d>0,M在Q点右侧,取上方P1为下一个象素; ●当d=0,选P1或P2均可,约定取P1为下一个象素; 增量计算: ●若d≥0,取正上方象素P1 (x p, y p+1),要判下一个象素位置,应计算

计算机仿真课程设计报告

、 北京理工大学珠海学院 课程设计任务书 2010 ~2011 学年第 2学期 学生姓名:林泽佳专业班级:08自动化1班指导教师:钟秋海工作部门:信息学院一、课程设计题目 : 《控制系统建模、分析、设计和仿真》 本课程设计共列出10个同等难度的设计题目,编号为:[0号题]、[1号题]、[2号题]、[3号题]、[4号题]、[5号题]、[6号题]、[7号题]、[8号题]、[9号题]。 学生必须选择与学号尾数相同的题目完成课程设计。例如,学号为8xxxxxxxxx2的学生必须选做[2号题]。 二、课程设计内容 (一)《控制系统建模、分析、设计和仿真》课题设计内容|

! " [2 有波纹控制器Dy(z)和一单位速度信号输入时的最少拍无波纹控制器Dw(z)。具体要求见(二)。 (二)《控制系统建模、分析、设计和仿真》课题设计要求及评分标准【共100分】 , 1、求被控对象传递函数G(s)的MATLAB描述。(2分) 2、求被控对象脉冲传递函数G(z)。(4分) 3、转换G(z)为零极点增益模型并按z-1形式排列。(2分) 4、确定误差脉冲传递函数Ge(z)形式,满足单位加速度信号输入时闭环稳态误差为零和实际 闭环系统稳定的要求。(6分) 5、确定闭环脉冲传递函数Gc(z)形式,满足控制器Dy(z)可实现、最少拍和实际闭环系统稳 定的要求。(8分)

6、根据4、5、列写方程组,求解Gc(z)和Ge(z)中的待定系数并最终求解Gc(z)和Ge(z) 。 (12分) 7、求针对单位加速度信号输入的最少拍有波纹控制器Dy(z)并说明Dy(z)的可实现性。 (3分) ! 8、用程序仿真方法分析加速度信号输入时闭环系统动态性能和稳态性能。(7分) 9、用图形仿真方法(Simulink)分析单位加速度信号输入时闭环系统动态性能和稳态性能。 (8分) 10、确定误差脉冲传递函数Ge(z)形式,满足单位速度信号输入时闭环稳态误差为零和实际 闭环系统稳定的要求。(6分) 11、确定闭环脉冲传递函数Gc(z)形式,满足控制器Dw(z)可实现、无波纹、最少拍和实际 闭环系统稳定的要求。(8分) 12、根据10、11、列写方程组,求解Gc(z)和Ge(z)中的待定系数并最终求解Gc(z)和Ge(z) 。 (12分) 13、求针对单位速度信号输入的最少拍无波纹控制器Dw(z)并说明Dw(z)的可实现性。(3分) 14、用程序仿真方法分析单位速度信号输入时闭环系统动态性能和稳态性能。(7分) 15、用图形仿真方法(Simulink)分析单位速度信号输入时闭环系统动态性能和稳态性能。 & (8分) 16、根据8、9、14、15、的分析,说明有波纹和无波纹的差别和物理意义。(4分) 三、进度安排 6月13至6月14:下达课程设计任务书;复习控制理论和计算机仿真知识,收集资料、熟悉仿真工具;确定设计方案和步骤。 6月14至6月16:编程练习,程序设计;仿真调试,图形仿真参数整定;总结整理设计、 仿真结果,撰写课程设计说明书。 6月16至6月17:完成程序仿真调试和图形仿真调试;完成课程设计说明书;课程设计答 辩总结。 [ 四、基本要求

计算机图形学 发展

计算机图形学的发展 1963年,伊凡?苏泽兰(Ivan Sutherland)在麻省理工学院发表了名为《画板》的博士论文,它标志着计算机图形学的正式诞生。至今已有三十多年的历史。此前的计算机主要是符号处理系统,自从有了计算机图形学,计算机可以部分地表现人的右脑功能了,所以计算机图形学的建立具有重要的意义。近年来,计算机图形学在如下几方面有了长足的进展: 1、智能CAD CAD 的发展也显现出智能化的趋势,就目前流行的大多数CAD 软件来看,主要功能是支持产品的后续阶段一一工程图的绘制和输出,产品设计功能相对薄弱,利用AutoCAD 最常用的功能还是交互式绘图,如果要想进行产品设计,最基本的是要其中的AutoLisp语言编写程序,有时还要用其他高级语言协助编写,很不方便。而新一代的智能CAD 系统可以实现从概念设计到结构设计的全过程。例如,德国西门子公司开发的Sigraph Design软件可以实现如下功能:(1)从一开始就可以用计算机设计草图,不必耗时费力的输入精确的坐标点,能随心所欲的修改,一旦结构确定,给出正确的尺寸即得到满意的图纸;(2)这个软件中具有关系数据结构,当你改变图纸的局部,相关部分自动变化,在一个视图上的修改,其他视图自动修改,甚至改变一个零件图,相关的其它零件图以及装配图的相关部分自动修改:(3)在各个专业领域中,有一些常用件和标准件,因此,

希望有一个参数化图库。而Sigraph不用编程只需画一遍图就能建成自己的图库;(4)Sigraph还可以实现产品设计的动态模拟用于观察设计的装置在实际运行中是否合理等等。智能CAD的另一个领域是工程图纸的自动输入与智能识别,随着CAD技术的迅速推广应用,各个工厂、设计院都需将成千上万张长期积累下来的设计图纸快速而准确输入计算机,作为新产品开发的技术资料。多年来,CAD 中普遍采用的图形输入方法是图形数字化仪交互输入和鼠标加键盘的交互输入方法.很难适应工程界大量图纸输入的迫切需要。因此,基于光电扫描仪的图纸自动输入方法已成为国内外CAD工作者的努力探索的新课题。但由于工程图的智能识别涉及到计算机的硬件、计算机图形学、模式识别及人工智能等高新技术内容,使得研究工作的难点较大。工程图的自动输入与智能识别是两个密不可分的过程,用扫描仪将手绘图纸输入到计算机后,形成的是点阵图象。 CAD 中只能对矢量图形进行编辑,这就要求将点阵图象转化成矢量图形。而这些工作都让计算机自动完成。这就带来了许多的问题。如(1)图象的智能识别;(2)字符的提取与识别;(3)图形拓扑结构的建立与图形的理解;(4)实用化的后处理方法等等。国家自然科学基金会和863计划基金都在支持这方面的研究,国内外已有一些这方面的软件付诸实用,如美国的RVmaster,德国的VPmax,以及清华大学,东北大学的产品等。但效果都不很理想,还未能达到人们企盼的效果。 2 计算机美术与设计 2.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

燕山大学 课程设计说明书题目:基于矩形物体的旋转角度测量 学院(系)电气工程学院 年级专业: 学号: 1301030200 1301030200 学生姓名: 指导教师: 教师职称:讲师 燕山大学课程设计(论文)任务书

院(系):电气工程学院基层教学单位:仪器科学与工程系 说明:此表一式四份,学生、指导教师、基层教学单位、系部各一份。 2016年 12 月 22 日燕山大学课程设计评审意见表

摘要 本文主要研究对矩形物体旋转角度的测量,并且比较每种方法的处理速度。通过对图像的滤波、二值化、边框的识别等等操作,完成对矩形物体的角度测量。本文采用五种方法分别对同一个矩形物体进行旋转角度测量,并比较其处理时间。五种方式分别为,边缘直线角度测量、对角线角度测量、矩形内部标准角度测量、角点边缘角度测量、垂线角度测量。 关键词:图像处理二值化旋转角测量定位识别

目录 第一章矩形物体的识别 (1) 1、图像滤波 (1) 2、图像的边缘检测 (2) 3、图像的二值化处理 (3) 4、图像的区域选择及处理 (4) 第二章旋转角度的测量 (6) 1、边缘直线角度测量 (6) 2、对角线角度测量 (8) 3、矩形内部标准角度测量 (9) 4、角点边缘角度测量 (10) 5、垂线角度测量 (11) 第三章算法时间的比较 (15) 参考文献 (16) 附录一 (17) 1、边缘直线角度测量程序 (17) 2、对角线角度测量程序 (17) 3、矩形内部标准角度测量程序 (18) 4、角点边缘角度测量程序 (19) 5、二值化-垂线角度测量程序 (23) 6、Soble-垂线角度测量程序 (24) 附录二 (26)

图形与可视化 实验大纲

《图形与可视化》课程实验教学大纲 编号: 课程总学时:64 实验学时:24 课程总学分:3.5 实验学分:(非单独设课的实验不用填此项) 先修课程:线性代数、C++与OO程序设计 适用专业:计算机科学与技术 一、本课程实验的主要目的与任务 《图形与可视化》是计算机科学与技术专业本科教学中的一门重要的专业课。通过本课程的教学,帮助学生掌握图形与可视化的基础知识,了解该学科的前沿科技,并能运用图形软件包OpenGL,进行简单的图像处理软件代码设计。 《图形与可视化》是一门理论性和应用性很强的课程。开设实验课程有助于加深学生对图形算法的理解,培养其分析问题,解决问题的能力。 通过本课程实验要求学生基本达到如下要求: 1. 掌握OpenGL的基本语法与程序结构。 2. 掌握如何通过点、线、面、体的构造方法。 3. 掌握如何对三维物体增加光照和纹理来增强其真实感。 4. 掌握如何构建一个真实的三维场景的基本过程和实现方法。 二、本课程实验应开设项目 三、各实验项目主要实验内容和基本要求 实验1 直线绘制算法( 4学时) 1.实验目的 (1) 了解OpenGL的基本的编程思想和程序结构。 (2) 了解OpenGL中绘制点、线、面的相关函数。 (3) 掌握如果通过定义空间点和构成方式来形成不同的空间物体。

2.实验内容 (1) 熟悉实验环境。 (2) 利用相关直线绘制算法绘制一条直线,建议使用DDA算法或Bresenham算法。 (3) 绘制一个颜色插值的三角形面。 (4) 综合利用所学知识,绘制分形物体。给出原理,步骤,设计绘制方案。可自己选择分形物体的类型,如分形树、Koch雪花、Sierpinski三角形(二维或三维)、Julia集、Mandelbrot集等。 3.实验要求 (1) 预习实验相关知识,了解实验目的与内容。 (2) 根据实验目的和内容,制定相关的实验方案并进行实施。 (3) 实验结束后,对相关内容进行总结和反思。 4.实验器材 (1) PC机及配套软件、一人一套。 实验2 曲线与曲面(4学时) 1.实验目的 (1) 掌握Bezier曲线和Hermite曲线的绘制方法。理解如何通过折线来近似一条曲线。 (2) 了解Bezier曲面和Hermite曲面的绘制方法。 2.实验内容 (1) 绘制一条四阶Bezier曲线或者Hermite曲线。 (2) 要求控制点、控制多边形、Bezier曲线或Hermite曲线用不同颜色表示。 (3) 掌握如何控制点、线的属性。 (4) 要求有能力的同学能够实现Bezier曲面或者Hermite曲面。 (5) 了解Utah茶壶的Bezier曲面构造方法。 3.实验要求 (1) 预习实验相关知识,了解实验目的与内容。 (2) 根据实验目的和内容,制定相关的实验方案并进行实施。 (3) 实验结束后,对相关内容进行总结和反思。 4.实验器材 (1) PC机及配套软件、一人一套。 实验3 体的表示与变换( 4学时) 1.实验目的 (1) 掌握三维形体的数据表示与存储。 (2) 掌握二维和三维几何变换的矩阵形式。 (3) 掌握视图变换的矩阵表达。 (4) 理解世界坐标系与观察坐标系的相对关系。 (5) 理解几何变换的实质是矩阵操作。 (6) 掌握平行投影、透视投影。 (7) 隐藏面消除、深度测试的基本原理。 (8) 使用多边形网格建模并进行变换。 2.实验内容

Simulink系统仿真课程设计

《信息系统仿真课程设计》 课程设计报告 题目信息系统课程设计仿真 院(系): 信息科学与技术工程学院 专业班级:通信工程1003 学生姓名: 学号: 指导教师:吴莉朱忠敏 2012年1 月14 日至2012年1 月25 日 华朴中科技大学武昌分校制 信息系统仿真课程设计任务书

20 年月日 目录 摘要 (5)

一、Simulink 仿真设计 (6) 1.1 低通抽样定理 (6) 1.2 抽样量化编码 (9) 二、MATLA仿真设计 (12) 2.1 、自编程序实现动态卷积 (12) 2.1.1 编程分析 (12) 2.1.2 自编matlab 程序: (13) 2.1.3 仿真图形 (13) 2.1.4 仿真结果分析 (15) 2.2 用双线性变换法设计IIR 数字滤波器 (15) 2.2.1 双线性变换法的基本知识 (15) 2.2.2 采用双线性变换法设计一个巴特沃斯数字低通滤波器 (16) 2.2.3 自编matlab 程序 (16) 2.2.4 仿真波形 (17) 2.2.5 仿真结果分析 (17) 三、总结 (19) 四、参考文献 (19) 五、课程设计成绩 (20) 摘要 Matlab 是一种广泛应用于工程设计及数值分析领域的高级仿真平台。它功能

强大、简单易学、编程效率高,目前已发展成为由MATLAB 语言、MATLAB 工作环境、MATLAB 图形处理系统、MATLAB 数学函数库和MATLAB 应用程序接口五大部分组成的集数值计算、图形处理、程序开发为一体的功能强大的系统。本次课程设计主要包括MATLAB 和SIMULINKL 两个部分。首先利用SIMULINKL 实现了连续信号的采样及重构,通过改变抽样频率来实现过采样、等采样、欠采样三种情况来验证低通抽样定理,绘出原始信号、采样信号、重构信号的时域波形图。然后利用SIMULINKL 实现抽样量化编码,首先用一连续信号通过一个抽样量化编码器按照A 律13折线进量化行,观察其产生的量化误差,其次利用折线近似的PCM 编码器对一连续信号进行编码。最后利用MATLAB 进行仿真设计,通过编程,在编程环境中对程序进行调试,实现动态卷积以及双线性变换法设计IIR 数字滤波器。 本次课程设计加深理解和巩固通信原理、数字信号处理课上所学的有关基本概念、基本理论和基本方法,并锻炼分析问题和解决问题的能力。

图像处理课程设计报告

图像处理课程设计报告 导语:设计是把一种设想通过合理的规划周密的计划通过各种感觉形式传达出来的过程。以下是XX整理图像处理课程设计报告的资料,欢迎阅读参考。 图像处理课程设计报告1 摘要:图像处理技术从其功能上可以分为两大类:模拟图像处理技术、和数字图像处理技术。数字图像处理技术指的是将图像信号直接转换成为数字信号,并利用计算机进行处理的过程,其主要的特点在于处理的精度高、处理的内容丰富、可以进行复杂、难度较高的处理内容。当其不在于处理的速度比较缓慢。当前图像处理技术主要的是体现在数字处理技术上,本文说阐述的图像处理技术也是以数字图像处理技术为主要介绍对象。数字图像处理又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。近年来, 图像处理技术得到了快速发展, 呈现出较为明显的发展趋势, 了解和掌握这些发展趋势对于做好目前的图像处理工作具有前瞻性的指导意义。本文总结了现代图像处理技术的三点发展趋势。 对图像进行处理(或加工、分析)的主要目的有三个方面: (1)提高图像的视感质量,如进行图像的亮度、彩色变换,增强、抑制某些成分,对图像进行几何变换等,以改善图像的质量。(2)提取图像中所包含的某些特征或特殊信息,这些被提

取的特征或信息往往为计算机分析图像提供便利。提取特征或信息的过程是计算机或计算机视觉的预处理。提取的特征可以包括很多方面,如频域特征、灰度或颜色特征、边界特征、区域特征、纹理特征、形状特征、拓扑特征和关系结构等。 (3)图像数据的变换、编码和压缩,以便于图像的存储和传输。不管是 何种目的的图像处理,都需要由计算机和图像专用设备组成的图像处理系统对图像数据进行输入、加工和输出。 数字图像处理主要研究的内容有以下几个方面: 图像变换由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大。因此,往往采用各种图像变换的方法,如傅里叶变换、沃尔什变换、离散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,不仅可减少计算量,而且可获得更有效的处理。目前新兴研究的小波变换在时域和频域中都具有良好的局部化特性,它在图像处理中也有着广泛而有效的应用。 图像编码压缩图像编码压缩技术可减少描述图像的数据量,以便节省图像传输、处理时间和减少所占用的存储器容量。压缩可以在不失真的前提下获得,也可以在允许的失真条件下进行。编码是压缩技术中最重要的方法,它在图像处理技术中是发展最早且比较成熟的技术。

信息可视化与其发展(计算机图形学)

《计算机图形学》(课程编号:0882438)2009 - 2010 学年第 3学期 大作业 学院: 学号: 姓名: 成绩: 2010 年 6 月25 日

信息可视化技术的发展与应用可视化是指在人通过视觉观察并在头脑中形成客观事物的影像的过程,这是一个心智处理过程。可视化提高了人对事物的观察能力及整体概念的形成等。可视化结果便于人的记忆和理解,同时其对于信息的处理和表达方式有其他方法无法取代的优势。可视化技术以人们惯于接受图形、图像并辅以信息处理技术将客观事物及其内在的联系表现出来。可视化不仅是客观现实的形象再现,也是客观规律、知识和信息的有机融合。它的应用范围很广,主要有: (1)科学计算可视化 科学计算可视化是指空间数据场的可视化,它是用计算机图形学和图像处理技术,将科学计算过程中产生的数据及计算结果转换为图形或图像在屏幕上显示出来并进行交互处理的理论、方法和技术。其应用有: a)科学计算可视化在电网调度系统中的应用 电网调度一方面需要对其进行持续有力的分析与处理。另一方面,传统的仿真研究形式也需要加以改进,以方便对数学模型的调整并加深研究者对仿结果的理解,从而揭示电网运行的内在规律。当电力系统中各种发电、变电、输配电及用电设备之间的相互联结关系情况已经确定时,电力系统运行状态的描述通常是通过反映例如电压、功率、电流等变量的数值来实现的。由于科学计算可视化技术在大量信息的抽象综合、系统总体状况表示方面的优点,因此在电网调度力系统实时监视方面能够开展很好的应用,这些应用包括利用等高线技术监视电压等、动画潮流技术监视线路流动功率等、饼图技术监视线路(变压器)负载率等、三维交互技术用来监视多个信息(例如电压和功率)

matlab课程设计报告书

《计算机仿真及应用》课程设计报告书 学号:08057102,08057127 班级:自动化081 姓名陈婷,万嘉

目录 一、设计思想 二、设计步骤 三、调试过程 四、结果分析 五、心得体会 六、参考文献

选题一、 考虑如下图所示的电机拖动控制系统模型,该系统有双输入,给定输入)(t R 和负载输入)(t M 。 1、 编制MATLAB 程序推导出该系统的传递函数矩阵。 2、 若常系数增益为:C 1=Ka =Km =1,Kr =3,C2=0.8,Kb =1.5,时间常数T 1=5, T 2=0.5,绘制该系统的根轨迹、求出闭环零极点,分析系统的稳定性。若)(t R 和)(t M 分别为单位阶跃输入,绘制出该系统的阶跃响应图。(要求C 1,Ka ,Km ,Kr ,C2,Kb , T 1,T 2所有参数都是可调的) 一.设计思想 题目分析: 系统为双输入单输出系统,采用分开计算,再叠加。 要求参数均为可调,而matlb 中不能计算未赋值的函数,那么我们可以把参数设置为可输入变量,运行期间根据要求赋值。 设计思路: 使用append 命令连接系统框图。 选择‘参数=input('inputanumber:')’实现参数可调。 采用的方案: 将结构框图每条支路稍作简化,建立各条支路连接关系构造函数,运行得出相应的传递函数。 在得出传递函数的基础上,使用相应的指令求出系统闭环零极点、画出其根轨迹。 通过判断极点是否在左半平面来编程判断其系统是否稳定。 二.设计步骤 (1)将各模块的通路排序编号

(2)使用append命令实现各模块未连接的系统矩阵 (3)指定连接关系 (4)使用connect命令构造整个系统的模型 三.调试过程 出现问题分析及解决办法: 在调试过程出现很多平时不注意且不易寻找的问题,例如输入的逗号和分号在系统运行时不支持中文格式,这时需要将其全部换成英文格式,此类的程序错误需要细心。 在实现参数可调时初始是将其设为常量,再将其赋值进行系统运行,这样参数可调性差,后用‘参数=input('inputanumber:')’实现。 最后是在建立通路连接关系时需要细心。 四.结果分析 源代码: Syms C1 C2 Ka Kr Km Kb T1 T2 C1=input('inputanumber:') C2=input('inputanumber:') Ka=input('inputanumber:') Kr=input('inputanumber:') Km=input('inputanumber:') Kb=input('inputanumber:') T1=input('inputanumber:') T2=input('inputanumber:') G1=tf(C1,[0 1]); G2=tf(Ka*Kr,[0 1]); G3=tf(Km,[T1 1]); G4=tf(1,[T2 1]); G5=tf(1,[1 0]); G6=tf(-C2,1); G7=tf(-Kb,1); G8=tf(-1,1); Sys=append(G1,G2,G3,G4,G5,G6,G7,G8) Q=[1 0 0;2 1 6;3 2 7;4 3 8;5 4 0;6 5 0;7 4 0;8 0 0;]; INPUTS1=1; OUTPUTS=5; Ga=connect(Sys,Q,INPUTS1,OUTPUTS) INPUTS2=8; OUTPUTS=5; Gb=connect(Sys,Q,INPUTS2,OUTPUTS) rlocus(Ga)

计算机图形学必考知识点

Phong Lighting 该模型计算效率高、与物理事实足够接近。Phong模型利用4个向量计算表面任一点的颜色值,考虑了光线和材质之间的三种相互作用:环境光反射、漫反射和镜面反射。Phong模型使用公式:I s=K s L s cosαΦα:高光系数。计算方面的优势:把r和v归一化为单位向量,利用点积计算镜面反射分量:I s=K s L s max((r,v)α,0),还可增加距离衰减因子。 在Gouraud着色这种明暗绘制方法中,对公用一个顶点的多边形的法向量取平均值,把归一化的平均值定义为该顶点的法向量,Gouraud着色对顶点的明暗值进行插值。Phong着色是在多边形内对法向量进行插值。Phong着色要求把光照模型应用到每个片元上,也被称为片元的着色。 颜色模型RGB XYZ HSV RGB:RGB颜色模式已经成为现代图形系统的标准,使用RGB加色模型的RGB三原色系统中,红绿蓝图像在概念上有各自的缓存,每个像素都分别有三个分量。任意色光F都可表示为F=r [ R ] + g [ G ] + b [ B ]。RGB颜色立方体中沿着一个坐标轴方向的距离代表了颜色中相应原色的分量,原点(黑)到体对角线顶点(白)为不同亮度的灰色 XYZ:在RGB 系统基础上,改用三个假想的原色X、Y、Z建立了一个新的色度系统, 将它匹配等能光谱的三刺激值,该系统称为视场XYZ色度系统,在XYZ空间中不能直观地评价颜色。 HSV是一种将RGB中的点在圆柱坐标系中的表示法,H色相S饱和度V明度,中心轴为灰色底黑顶白,绕轴角度为H,到该轴距离为S,沿轴高度为S。 RGB优点:笛卡尔坐标系,线性,基于硬件(易转换),基于三刺激值,缺点:难以指定命名颜色,不能覆盖所有颜色范围,不一致。 HSV优点:易于转换成RGB,直观指定颜色,’缺点:非线性,不能覆盖所有颜色范围,不一致 XYZ:覆盖所有颜色范围,基于人眼的三刺激值,线性,包含所有空间,缺点:不一致 交互式计算机程序员模型 (应用模型<->应用程序<->图形库)->(图形系统<->显示屏).应用程序和图形系统之间的接口可以通过图形库的一组函数来指定,这和接口的规范称为应用程序编程人员接口(API),软件驱动程序负责解释API的输出并把这些数据转换为能被特定硬件识别的形式。API提供的功能应该同程序员用来确定图像的概念模型相匹配。建立复杂的交互式模型,首先要从基本对象开始。良好的交互式程序需包含下述特性:平滑的显示效果。使用交互设备控制屏幕上图像的显示。能使用各种方法输入信息和显示信息。界面友好易于使用和学习。对用户的操作具有反馈功能。对用户的误操作具有容忍性。Opengl并不直接支持交互,窗口和输入函数并没有包含在API中。 简单光线跟踪、迭代光线跟踪 光线跟踪是一种真实感地显示物体的方法,该方法由Appel在1968年提出。光线跟踪方法沿着到达视点的光线的相反方向跟踪,经过屏幕上每一象素,找出与视线所交的物体表面点P0,并继续跟踪,找出影响P0点光强的所有的光源,从而算出P0点上精确的光照强度。光线跟踪器最适合于绘制具有高反射属性表面的场景。优缺点:原理简单,便于实现,能生成各种逼真的视觉效果,但计算量开销大,终止条件:光线与光源相交光线超出视线范围,达到最大递归层次。一般有三种:1)相交表面为理想漫射面,跟踪结束。2)相交表面为理想镜面,光线沿镜面反射方向继续跟踪。3)相交表面为规则透射面,光线沿规则透射方向继续跟踪。 描述光线跟踪简单方法是递归,即通过一个递归函数跟踪一条光线,其反射光想和折射光线再调用此函数本身,递归函数用来跟踪一条光线,该光线由一个点和一个方向确定,函数返回与光线相交的第一个对象表面的明暗值。递归函数会调用函数计算指定的光线与最近对象表面的交点位置。 图形学算法加速技术BVH, GRID, BSP, OCTree 加速技术:判定光线与场景中景物表面的相对位置关系,避免光线与实际不相交的景物表面的求交运算。加速器技术分为以下两种:Bounding Volume Hierarchy 简写BVH,即包围盒层次技术,是一种基于“物体”的场景管理技术,广泛应用于碰撞检测、射线相交测试之类的场合。BVH的数据结构其实就是一棵二叉树(Binary Tree)。它有两种节点(Node)类型:Interior Node 和Leaf Node。前者也是非叶子节点,即如果一个Node不是Leaf Node,它必定是Interior Node。Leaf Node 是最终存放物体/们的地方,而Interior Node存放着代表该划分(Partition)的包围盒信息,下面还有两个子树有待遍历。使用BVH需要考虑两个阶段的工作:构建(Build)和遍历(Traversal)。另一种是景物空间分割技术,包括BSP tree,KD tree Octree Grid BSP:二叉空间区分树 OCTree:划分二维平面空间无限四等分 Z-buffer算法 算法描述:1、帧缓冲器中的颜色设置为背景颜色2、z缓冲器中的z值设置成最小值(离视点最远)3、以任意顺序扫描各多边形a) 对于多边形中的每一个采样点,计算其深度值z(x,y) b) 比较z(x, y)与z缓冲器中已有的值zbuffer(x,y)如果z(x, y) >zbuffer(x, y),那么计算该像素(x, y)的光亮值属性并写入帧缓冲器更新z缓冲器zbuffer(x, y)=z(x, y) Z-buffer算法是使用广泛的隐藏面消除算法思想为保留每条投影线从COP到已绘制最近点距离,在投影后绘制多边形时更新这个信息。存储必要的深度信息放在Z缓存中,深度大于Z缓存中已有的深度值,对应投影线上已绘制的多边形距离观察者更近,故忽略该当前多边形颜色,深度小于Z缓存中的已有深度值,用这个多边形的颜色替换缓存中的颜色,并更新Z缓存的深度值。 void zBuffer() {int x, y; for (y = 0; y < YMAX; y++) for (x = 0; x < XMAX; x++) { WritePixel (x, y, BACKGROUND_VALUE); WriteZ (x, y, 1);} for each polygon { for each pixel in polygon’s projection { //plane equation doubl pz = Z-value at pixel (x, y); if (pz < ReadZ (x, y)) { // New point is closer to front of view WritePixel (x, y, color at pixel (x, y)) WriteZ (x, y, pz);}}}} 优点:算法复杂度只会随着场景的复杂度线性增加、无须排序、适合于并行实现 缺点:z缓冲器需要占用大量存储单元、深度采样与量化带来走样现象、难以处理透明物体 着色器编程方法vert. frag 着色器初始化:1、将着色器读入内存2、创建一个程序对象3、创建着色器对象4、把着色器对象绑定到程序对象5、编译着色器6、将所有的程序连接起来7、选择当前的程序对象8、把应用程序和着色器之间的uniform变量及attribute变量关联起来。 Vertex Shader:实现了一种通用的可编程方法操作顶点,输入主要有:1、属性、2、使用的常量数据3、被Uniforms使用的特殊类型4、顶点着色器编程源码。输入叫做varying变量。被使用在传统的基于顶点的操作,例如位移矩阵、计算光照方程、产生贴图坐标等。Fragment shader:计算每个像素的颜色和其他属性,实现了一种作用于片段的通用可编程方法,对光栅化阶段产生的每个片段进行操作。输入:Varying 变量、Uniforms-用于片元着色器的常量,Samples-用于呈现纹理、编程代码。输出:内建变量。 观察变换 建模变换是把对象从对象标架变换到世界标架 观察变换把世界坐标变换成照相机坐标。VC是与物理设备无关的,用于设置观察窗口观察和描述用户感兴趣的区域内部分对象,观察坐标系采用左手直角坐标系,可在用户坐标系中的任何位置、任何方向定义。其中有一坐标轴与观察方向重合同向并与观察平面垂直。观察变换是指将对象描述从世界坐标系变换到观察坐标系的过程。(1):平移观察坐标系的坐标原点,与世界坐标系的原点重合,(2):将x e,y e轴分别旋转(-θ)角与x w、y w轴重合。 规范化设备坐标系 规范化设备坐标系是与具体的物理设备无关的一种坐标系,用于定义视区,描述来自世界坐标系窗口内对象的图形。 光线与隐式表面求交 将一个对象表面定义为f(x,y,z)=f(p)=0,来自P0,方向为d的光线用参数的形式表示为P(t)=P0+td. 交点位置处参数t的值满足:f(P0+td)=0,若f是一个代数曲面,则f是形式为X i Y j Z k的多项式之和,求交就转化为寻求多项式所有根的问题,满足的情况一:二次曲面,情况二:品面求交,将光线方程带入平面方程:p*n+c=0可得到一个只需做一次除法的标量方程p=p0+td。可通过计算得到交点的参数t的值:t=(p0*n+c)/(n*d). 几何变换T R S矩阵表示 三维平移T 三维缩放S旋转绕z轴Rz( ) 100dx 010dy 001dz 0001 Sx000 0Sy00 00Sz0 0001 cos-sin00 sin cos00 0010 0001 θθ θθ 旋转绕x轴Rx(θ) 旋转绕y轴Ry(θ) 1000 0cos-sin0 0sin cos0 0001 θθ θθ cos0sin0 0100 -sin0cos0 0001 θθ θθ 曲线曲面 Bezier曲线性质:Bezier曲线的起点和终点分别是特征多边形的第一个顶点和最后一个顶点。曲线在起点和终点处的切线分别是特征多边形的第一条边和最后一条边,且切矢的模长分别为相应边长的n倍;(2)凸包性;(3)几何不变性(4)变差缩减性。端点插值。 均匀B样条曲线的性质包括:凸包性、局部性、B样条混合函数的权性、连续性、B样条多项式的次数不取决于控制函数。 G连续C连续 C0连续满足:C1连续满足: (1)(0) p(1)=(1)(0)(0) (1)(0) px qx py q qy pz qz == ???? ???? ???? ???? (1)(0) p'(1)=(1)'(0)(0) (1)(0) p x q x p y q q y p z q z == ???? ???? ???? ???? C0(G0)连续:曲线的三个分量在连接点必须对应相等 C1连续:参数方程和一阶导数都对应相等 G1连续:两曲线的切线向量成比例 三维空间中,曲线上某点的导数即是该点的切线,只要求两个曲线段连接点的导数成比例,不需要导 数相等,即p’(1)=aq’(0) 称为G1几何连续性。将该思想推广到高阶导数,就可得到C n和G n连续性。

计算机图形学课程设计书

计算机图形学课程设计 书 文档编制序号:[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日 摘要 图像融合是图像处理中重要部分,能够协同利用同一场景的多种传感器图像信息,输出一幅更适合于人类视觉感知或计算机进一步处理与分析的融合图像。它可明显的改善单一传感器的不足,提高结果图像的清晰度及信息包含量,有利于更为准确、更为可靠、更为全面地获取目标或场景的信息。图像融合主要应用于军事国防上、遥感方面、医学图像处理、机器人、安全和监控、生物监测等领域。用于较多也较成熟的是红外和可见光的融合,在一副图像上显示多种信息,突出目标。一般情况下,图像融合由

人脸识别课程设计论文(完美版)

前言 在人类社会的发展进入到21世纪的今天,安全问题已经成为困扰人们日常生活的重要问题之一。社会的发展促进了人的流动性,进而也增加了社会的不稳定性,使得安全方面的需求成为21世纪引起广泛关注的问题。不论是享受各项服务如网上冲浪、还是居家、办公等都涉及到安全,以往这些行为基本上是通过符号密码来进行安全保护,但是随着服务数量的不断增加,密码越来越多以致无法全部记住,而且密码有时也会被他人所窃取,各种密码被破解的概率越来越高,因为通常由于记忆的原因,人们经常会选用自己或亲人的生日、家庭地址、电话号码等作为密码并长期使用,这些很容易被一些不法分子获取。可见在现代社会中,身份识别已经成为人们日常生活中经常遇到的一个基本问题。人们乎时时刻刻都需要鉴别别人的身份和证明自己的身份,以获得对特定资源的使用权或者制权,同时防止这些权限被他人随意的取得。传统的身份识别方法主要基于身份标识物(如证件、卡片)和身份标识知识(如用户名、密码)来识别身份,这在很长一段时期是非常可靠和方便的识别方法,得到了广泛的应用。但是,随着网络、通信、交通等技的飞速发展,人们活动的现实空间和虚拟空间不断扩大,需要身份认证的场合也变得无不在。人们需要携带的身份标识物品越来越多,身份标识知识也变得越来越复杂和冗长在这种情况下,传统身份识别方式的弊端日益彰显。身份标识物品容易被丢失和伪造,份标识知识容易被遗忘、窃取和破解,而身份标识的重要性又使得一旦失去了身份标识会给标识的所有者甚至整个社会带来重大的甚至难以弥补的损失。在美国,每年约有上百万的福利款被人以假冒的身份领取;每年发生的信用卡、ATM、移动电话和冒领支票等成的损失达数百亿美元[2]。面临着这样的状况,人们对身份识别的安全性、可靠性、准确和实用性提出了更高的要求,必须寻求身份识别的新途径。 于是,近年来人类生物特征越来越广泛地用于身份识别,而且生物特征可以更好的进行安全控制,世界各国政府都在大力推进生物识别技术的发展及应用。与原有的人类身分识别技术(如:个人密码、磁卡、智能卡等)相比,基于人类生物特征的识别技术具有安全可靠、特征唯一、不易伪造、不可窃取等优点。人类本身具有很多相对独特的特征,如DNA、指纹、虹膜、语音、人脸等。基于这些相对独特的人类特征,结合计算机技术,发展起众多的基于人类生物特征的人类身份识别技术,如DNA识别技术、指纹识别技术、虹膜识别技术、语音识别技术、人脸识别技术。 人脸识别和其他的生物识别比起来有以下几个优点:1、其他的生物特征识别方法都需要一些人为的行为配合,而人脸识别不需要。2、人脸识别可应用在远距离监控中。3、针一对现在的第一、二代身份证,每个身份证都有人脸的正面照片,也就是人脸库将是最完善的,包括人最多的,我们可以利用这个库来更直观、更方便的核查该人的身份。 4、相对于其他基于生物特征识别技术,人脸识别技术具有特征录入方一便,信息丰富,使用面广等优点,同时人脸识别系统更加直接友好。人脸识别技术作为生物识别技术的

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

《计算机图形学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];

相关主题
文本预览
相关文档 最新文档