计算机图形学 图形几何变换的实现

计算机图形学  图形几何变换的实现
计算机图形学  图形几何变换的实现

计算机图形学图形几何变换的实现

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

实验五图形几何变换的实现

班级08信计2 学号89姓名徐阳分数

一、实验目的和要求:

1、掌握理解二维、三维变换的数学知识、变换原理、变换种类、变换方法;进一步理解采用齐次坐标进行二维、三维变换的必要性;利用Turboc实现二维、三维图形的基本变换和复合变换。

二、实验内容:

1、理解采用齐次坐标进行图形变换的必要性——变换的连续性,使复合变换得以实现。

2、掌握二维、三维图形基本变换(平移、缩放、对称、旋转、错切)的原理及数学公式。

3、利用Turboc实现二维、三维图形的基本变换、复合变换,在屏幕上显示变换过程或变换结果。

三、实验结果分析:

程序代码如下:

/*二维图形(直线)平移变换*/

#include

#include

#include

main()

{int x0,y0,x1,y1,i,j;

int a[3][3];

char key;

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

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

a[i][j]=0;

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

a[i][i]=1;

int graphdriver=DETECT;

int graphmode=0;

initgraph(&graphdriver,&graphmode," ");

cleardevice();

x0=250;y0=120;x1=350;y1=220;

line(x0,y0,x1,y1);

for( ; ;)

{outtextxy(100,400,"<-:left->:right^:up v:down Esc->exit");

key=getch();

switch(key)

{

case 75: a[2][0]=-10;

break;

case 77: a[2][0]=10;

break;

case 72: a[2][1]=-10;

break;

case 80: a[2][1]=10;

break;

case 27: exit(0);

break;

}

x0=x0*a[0][0]+y0*a[1][0]+a[2][0];

y0=x0*a[0][1]+y0*a[1][1]+a[2][1];

x1=x1*a[0][0]+y1*a[1][0]+a[2][0];

y1=x1*a[0][1]+y1*a[1][1]+a[2][1];

cleardevice();

line(x0,y0,x1,y1);

}

closegraph();

}

2.三维图形(立方体)旋转和比例变换的算法:

#include

#include

#include

#include

#include

#include

#define ZOOM_IN 0.9

#define ZOOM_OUT 1.1

int turn1[3]; /* [0] rx,[1] ry,[3] zoom*/

typedef struct

{

float x;

float y;

float z;

}point;

typedef struct

{

float x;

float y;

}point2d;

typedef struct

{float x;

float y;

float h;

point biao[8];

}fanti;

void make_box(float x,float y,float h,fanti *p) {

p->x=x;p->y=y;p->h=h;

p->biao[0].x=x/2;

p->biao[0].y=y/2;

p->biao[0].z=h/2;

p->biao[1].x=-x/2;

p->biao[1].y=y/2;

p->biao[1].z=h/2;

p->biao[2].x=-x/2;

p->biao[2].y=-y/2;

p->biao[2].z=h/2;

p->biao[3].x=x/2;

p->biao[3].y=-y/2;

p->biao[3].z=h/2;

p->biao[4].x=x/2;

p->biao[4].y=y/2;

p->biao[4].z=-h/2;

p->biao[5].x=-x/2;

p->biao[5].y=y/2;

p->biao[5].z=-h/2;

p->biao[6].x=-x/2;

p->biao[6].y=-y/2;

p->biao[6].z=-h/2;

p->biao[7].x=x/2;

p->biao[7].y=-y/2;

p->biao[7].z=-h/2;

}

void trun2d(point *p,point2d *q)

{

q->x=p->x+p->z*cos(0.25);

q->y=p->y+p->z*sin(0.25);

}

void initm(float mat[][4])

{

int count;

for(count=0;count<4;count++)

{ mat[count][0]=0.;

mat[count][1]=0.;

mat[count][3]=0.;

mat[count][count]=1.;

}

return;

}

void transfrom(point *p,point *q,float tm[][4])

{

float xu,yv,zw,h;

xu=tm[0][0]*p->x+tm[1][0]*p->y+tm[2][0]*p->z+tm[3][0]; yv=tm[0][1]*p->x+tm[1][1]*p->y+tm[2][1]*p->z+tm[3][1]; zw=tm[0][2]*p->x+tm[1][2]*p->y+tm[2][2]*p->z+tm[3][2]; p->x=xu;

p->y=yv;

p->z=zw;

return;

}

void rotationx(point *p,float alfa,float tm[][4])

{

float rad=0.0174532925;

initm(tm);

tm[1][1]=cos(rad*alfa);

tm[1][2]=sin(rad*alfa);

tm[2][1]=-tm[1][2];

tm[2][2]=tm[1][1];

return;

}

void rotationz(point *p,float alfa,float tm[][4])

{

float rad=0.0174532925;

initm(tm);

tm[0][0]=cos(rad*alfa);

tm[0][1]=sin(rad*alfa);

tm[1][0]=-tm[0][1];

tm[1][1]=tm[0][0];

return;

}

void rotationy(point *p,float alfa,float tm[][4])

{

float rad=0.0174532925;

initm(tm);

tm[0][0]=cos(rad*alfa);

tm[2][0]=sin(rad*alfa);

tm[0][2]=-tm[2][0];

return;

}

void adjust(point *p,point *q) {

float t[4][4];

switch(turn1[0])

{

case 1:

rotationy(p,2,t);

transfrom(p,q,t);

break;

case -1:

rotationy(p,-2,t);

transfrom(p,q,t);

break;

default:break;

}

switch(turn1[1])

{

case 1:

rotationz(p,2,t);

transfrom(p,q,t);

break;

case -1:

rotationz(p,-2,t);

transfrom(p,q,t);

break;

default:break;

}

switch(turn1[2])

{

case 1:

q->x=ZOOM_IN*p->x;

q->y=ZOOM_IN*p->y;

q->z=ZOOM_IN*p->z; break;

case -1:

q->x=ZOOM_OUT*p->x;

q->y=ZOOM_OUT*p->y;

q->z=ZOOM_OUT*p->z; break;

default:break;

}

void drawbox(fanti *p)

{

point2d fan2d[8];

int i;

for(i=0;i<=7;i++)

{

adjust(&p->biao[i],&p->biao[i]);

trun2d(&p->biao[i],&fan2d[i]);

fan2d[i].x+=300;

fan2d[i].y+=200;

}

cleardevice();

setcolor(RGB(255,24,39));

outtext(" ->:right <-:left ^:up v:down");

moveto(0,20);

outtext("page up:zoom in page down:zoom out space:redraw Esc:exit"); for(i=0;i<=3;i++)

{

if(i==3)

{line(fan2d[i].x,fan2d[i].y,fan2d[0].x,fan2d[0].y);

line(fan2d[i+4].x,fan2d[i+4].y,fan2d[4].x,fan2d[4].y);

}

else

{line(fan2d[i].x,fan2d[i].y,fan2d[i+1].x,fan2d[i+1].y);

line(fan2d[i+4].x,fan2d[i+4].y,fan2d[i+5].x,fan2d[i+5].y);

}

line(fan2d[i].x,fan2d[i].y,fan2d[i+4].x,fan2d[i+4].y);

}

}

void main()

{

int gd=DETECT,gm,i,j;

char key;

float x,y,h;

fanti a1;

x=100;

y=100;

h=100;

initgraph(&gd,&gm,"");

make_box(x,y,h,&a1);

drawbox(&a1);

for(;;)

turn1[0];

turn1[1];

turn1[2];

key=getch();

switch(key)

{case 77: turn1[0]=1;

break; /*RIGHT*/

case 75: turn1[0]=-1;

break; /*LIFT*/

case 72:turn1[1]=1;

break; /*UP*/

case 80:turn1[1]=-1;

break; /*DOWN*/

case 73:turn1[2]=1;

break; /*ZOOM IN*/ case 81:turn1[2]=-1;

break; /*ZOOM OUT*/ case 32:make_box(x,y,h,&a1);

break; /*REDRAW*/ case 27:exit(0);

break; /*ESC*/

default: key=0;

break;

}

if(key!=0) drawbox(&a1);

}

closegraph();

}

计算机毕业论文浅析计算机图形学在实践中的应用

浅析计算机图形学在实践中的应用摘要:本文对计算机图形在实践中的应用进行了论述。 关键词:图形学;发展;应用 1 计算机图形学的发展计算机图形学是利用计算机研究图形的表示、生成、处理,显示的科学。经过30多年的发展,计算机图形学已成为计算机科学中最为活跃的分支之一,并得到广泛的应用。1950年,第一台图形显示器作为美国麻省理工学院(MIT)旋风一号——(Whirlwind)计算机的附件诞生.该显示器用一个类似示波器的阴极射线管(CRT)来显示一些简单的图形。在整个50年代,只有电子管计算机,用机器语言编程,主要应用于科学计算,为这些计算机配置的图形设备仅具有输出功能。计算机图形学处于准备和酝酿时期,并称之为:“被动式”图形学。 2 计算机图形学在曲面造型技术中的应用曲面造型技术是计算机图形学和计算机辅助几何设计的一项重要内容,主要研究在计算机图象系统的环境下对曲面的表示、设计、显示和分析。它肇源于飞机、船舶的外形放样工艺,经三十多年发展,现在它已经形成了以Bezier和B样条方法为代表的参数化特征设计和隐式代数曲面表示这两类方法为主体,以插值(Intmpolation)、拟合(Fitting)、逼近(Ap-proximation)这三种手段为骨架的几何理论体系。随着计算机图形显示对于真实性、实时性和交互性要求的日益增强,随着几何设计对象向着多样性、特殊性和拓扑结构复杂性靠拢的趋势的日益明显,随着图形工业和制造工业迈向一体化、集成化和网络化步伐的日益加快,随着激光测距扫描等三维数据采样技术和硬件设备的日益完善,曲面造型在近几年来得到了长足的发展。 2.1 从研究领域来看,曲面造型技术已从传统的研究曲面表示、曲面求交和曲面拼接,扩充到曲面变形、曲面重建、曲面简化、

二维几何图形变换.

// 二维几何图形变换.cpp : 定义应用程序的类行为。 // #include "stdafx.h" #include "二维几何图形变换.h" #include "MainFrm.h" #include "二维几何图形变换Doc.h" #include "二维几何图形变换View.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CMyApp BEGIN_MESSAGE_MAP(CMyApp, CWinApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) // 基于文件的标准文档命令 ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) // 标准打印设置命令 ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup) END_MESSAGE_MAP() // CMyApp 构造 CMyApp::CMyApp() { // TODO: 在此处添加构造代码, // 将所有重要的初始化放置在InitInstance 中 } // 唯一的一个CMyApp 对象 CMyApp theApp; // CMyApp 初始化 BOOL CMyApp::InitInstance() {

// 如果一个运行在Windows XP 上的应用程序清单指定要 // 使用ComCtl32.dll 版本6 或更高版本来启用可视化方式, //则需要InitCommonControls()。否则,将无法创建窗口。 InitCommonControls(); CWinApp::InitInstance(); // 初始化OLE 库 if (!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE; } AfxEnableControlContainer(); // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, // 例如修改为公司或组织名 SetRegistryKey(_T("应用程序向导生成的本地应用程序")); LoadStdProfileSettings(4); // 加载标准INI 文件选项(包括MRU) // 注册应用程序的文档模板。文档模板 // 将用作文档、框架窗口和视图之间的连接 CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CMyDoc), RUNTIME_CLASS(CMainFrame), // 主SDI 框架窗口 RUNTIME_CLASS(CMyView)); if (!pDocTemplate) return FALSE; AddDocTemplate(pDocTemplate); // 分析标准外壳命令、DDE、打开文件操作的命令行 CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // 调度在命令行中指定的命令。如果 // 用/RegServer、/Register、/Unregserver 或/Unregister 启动应用程序,则返回FALSE。if (!ProcessShellCommand(cmdInfo)) return FALSE; // 唯一的一个窗口已初始化,因此显示它并对其进行更新 m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow();

计算机图形学-图形的几何变换

贵州大学实验报告 学院:计算机科学与技术专业:软件工程班级:软件132 姓名常伟学号1308060226 实验地点一教704 实验时间2016.5.9 指导教师李智实验成绩 实验项目名称试验四、图形的几何变换 实验目的1.掌握矢量运算。 2.熟练使用齐次坐标。 3.掌握采用齐次坐标进行几何变换。 实验要求1.理解几何图形变换的原理,编程实现图形的几何变换。 2.编程界面友好,实现变换的所有方式,包括平移、缩放、旋转、对称、错切以及基本变换基础上的组合变换。 3.几何变换使用矩阵进行运算。

实验原理 二维齐次坐标变换的矩阵的形式是 ? ? ? ? ? ? ? ? ? ? i h g f e d c b a 这个矩阵的每一个元素都是有特殊含义的。其中,? ? ? ? ? ? e d b a 可以对图形进行缩放、旋 转、对称和错切等变换;? ? ? ? ? ? f c 是对图形进行平移变换;[]h g是对图形作投影变换;[]i 则是对图形进行缩放变换。 下面给出几个基本变换的矩阵运算。 1.平移变换 ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? + + = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? ? ? 1 ) , ( 1 1 1 1 1 1 ' ' y x T y x y x t t t t t t y x y x y x y x 2.缩放变换 ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? 1 ) , ( 1 1 1 1 ' ' y x s s S y s x s y x s s y x y x y x y x 3.旋转矩阵 ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? + - = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?- = ? ? ? ? ? ? ? ? ? ? 1 ) ( 1 cos sin sin cos 1 1 cos sin sin cos 1 ' ' y x R y x y x y x y x θ θ θ θ θ θ θ θ θ 4.对称矩阵 ? ? ? ? ? ? ? ? ? ? + + = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? 1 1 1 1 ' ' ey dx by ax y x e d b a y x 对称变换其实只是a、b、d、e取0、1等特殊值产生的一些特殊效果。 5.错切变换 ? ? ? ? ? ? ? ? ? ? + + = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? 1 1 1 1 1 1 ' ' y dx by x y x d b y x

计算机图形学论文

湖北大学学生课程设计 (论文) 题目:关于图形软件图形用户接口设计研究的一点思考 学号:2012221104210 069 姓名:刘雄 专业年级:计信2012级1班 教师姓名:余敦辉 2015年6 月2 日

目录 摘要和关键词(中文)-------------------------------------01 摘要和关键词(英文)-----------------------------------02 论文正文---------------------------------------------------03 1.图界面【GUI】的概述--------------------------------03 2.图形用户接口的定义--------------------------------03 3.图形软件图形用户接口【GUI】的表现形式-------------04 3.1屏幕的划分--------------------------------------------=--04 3.2字形的选用-----------------------------------------------05 3.3颜色、灰度的选择-----------------------------------------06 3.4窗口-----------------------------------------------------08 3.5菜单-----------------------------------------------------09 3.6图形符号和光标-------------------------------------------10 3.7按钮-----------------------------------------------------11 参考文献--------------------------------------------------12

计算机图形学教程课后习题参考答案.

第一章 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节。

计算机图形学--图形几何变换实现

实验五 图形几何变换的实现 班级:信计二班 学号: :解川 分数: 一、实验目的 为了掌握理解二维、三维的数学知识、变换原理、变换种类、变换方法;进一步理解采用齐次坐标进行二维、三维变换的必要性;利用VC++语言实现二维、三维图形的基本变换与复合变换。 二、实验容 (1) 理解采用齐次坐标进行图形变换的必要性——变换的连续性,使复合变换 得以实现。 (2) 掌握二维、三维图形基本变换的原理及数学公式。 (3) 利用VC++语言实现二维、三维图形的基本变换、复合变换,在评不上显 示变换过程或变换结果。 三、实验步骤 (1) 预习教材关于二维、三维图形变换的原理与方法。 (2) 使用VC++语言实现某一种或几种基本变换。 (3) 调试、编译、运行程序。 四、原理分析 源程序分别实现了对二维图形进行的平移变换—基本变换;对三维图形进行的绕某一个坐标轴旋转变换以及相对于立方体中心的比例变换—复合变换。 三维几何变换: (1) 比例变换: []1111z y x =[]1z y x T 3D =[]1z y x ????? ?? ?? ???s n m l r j i h q f e d p c b q 局部比例变换: s T =? ? ??? ???? ???1000000000000j e a 其中a 、b 、j 分别为在x 、y 、z 方向的比例系数。

整体比例变换: s T =? ? ??? ???? ???s 000010000100001其中s 为在xyz 方向的等比例系数。S>1时,整体缩小;s<1时,整体放大。 (2) 旋转变换: 旋转变换的角度方向为(沿坐标轴的反方向看去,各轴按逆时针方向旋转) 绕z 轴旋转: RZ T =?? ??? ???? ???-100 010000cos sin 00sin cos θθθθ 绕x 轴旋转: RX T =??????? ?? ???-10 00 0cos sin 00sin cos 000 01 θθθθ 绕y 轴旋转: RY T =????? ???? ???-10 0cos 0sin 00100sin 0cos θθθθ 程序代码: /*三维图形(立方体)旋转变换、比例变换*/ #include #include #include #include #include #include #define ZOOM_IN 0.9 #define ZOOM_OUT 1.1

计算机图形学论文

计算机图形学论文 学号:11001010123 专业:信息与计算科学 班级:110010101 姓名: 指导教师:傅由甲

一.摘要 计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。计算机图形学作为计算机科学与技术学科的一个独立分支已经历了近40年的发展历程。一方面,作为一个学科,计算机图形学在图形基础算法、图形软件与图形硬件三方面取得了长足的进步,成为当代几乎所有科学和工程技术领域用来加强信息理解和传递的技术和工具。计算机图形学在我国虽然起步较晚,然而它的发展却十分迅速。我国的主要高校都开设了多门计算机图形学的课程,并有一批从事图形学基础和应用研究的研究所。在浙江大学建立的计算机辅助与图形学国家重点实验室,已成为我国从事计算机图形学研究的重要基地之一。 关键词:实现2D/3D图形的算法,纹理映射,发展简史,发展趋势 二、计算机图形学中运用到的技术算法 (1)OpenGL实现2D/3D图形的算法 OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。OpenGL是个与硬件无关的软件接口,可以在不同的平台如Windows95、Windows NT、Unix、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL 的软件具有很好的移植性,可以获得非常广泛的应用。由于OpenGL是图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将AutoCAD、3DS/3DSMAX等3D图形设计软件制作的DXF和3DS模型文件转换成OpenGL 的顶点数组。 OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;OpenGL使用简便,效率高。它具有一下功能: 1.建模:OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面绘制函数。 2.变换:OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转、变比镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。 3.颜色模式设置:OpenGL颜色模式有两种,即RGBA模式和颜色索引(Color Index)。 4.光照和材质设置:OpenGL光有辐射光(Emitted Light)、环境光(Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light)。材质是用光反射率来表示。

计算机图形学论文计算机图形学理论与技术发展趋势研究

华北电力大学 课程论文 | | 论文题目计算机图形学理论与技术发展趋势研究 课程名称计算机图形学 | | 专业班级:学生姓名: 学号:成绩: (纸张用A4,左装订;页边距:上下2.5cm,左2.9cm, 右2.1cm)* 封面左侧印痕处装订

计算机图形学理论与技术发展趋势 研究 摘要: 计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。 关键字:研究领域与目的发展历程应用方面 引言:计算机图形学是计算机与应用专业的专业主干课,它的重要性体现在人们越来越强烈地需要和谐的人机交互环境:图形用户界面已经成为一个软件的重要组成部分,以图形的方式来表示抽象的概念或数据(可视化)已经成为信息领域的一个重要发展趋势。 正文:计算机图形学的主要研究内容就是研究如何在计算机上表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的。如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。 计算机图形学一个主要目的就是要利用计算机产生令人赏心悦目的真实感图形。为此,必须建立图形所描述场景的几何表示,再用某种光照模型,计算在假想的光源、纹理、材质属性下的光照明效果。同时,真实感图形计算的结果是以数字图像的方式提供的,计算机图形学也就和图像处理有着密切的关系。 计算机图形学的研究内容非常广泛,如图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法、非真实感绘制,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。 1950年,第一台图形显示器作为美国麻省理工学院(MIT)旋风I号(Whirlwind I)计算机的附件诞生了。该显示器用一个类似于示波器的阴极射线管(CRT)来显示一些简单的图形。1958年美国Calcomp公司由联机的数字记录仪发展成滚筒式绘图仪,GerBer公司把数控机床发展成为平板式绘图仪。在整个50年代,只有电子管计算机,用机器语言编程,主要应用于科学计算,为这些计算机配置的图形设备仅具有输出功能。计算机图形学处于准备和酝酿时期,并称之为:“被动式”图形学。到50年代末期,MIT的林肯实验室在“旋风”计算机上开发SAGE空中防御体系,第一次使用了具有指挥和控制功能的CRT显示器,操作者可以用笔在屏幕上指出被确定的目标。与此同时,类似的技术在设计和生产过程中也陆续得到了应用,它预示着交互式计算机图形学的诞生。 1962年,MIT林肯实验室的Ivan E.Sutherland 发表了一篇题为“Sketchpad:一个人机交互通信的图形系统”的博士论文,他在论文中首次使用了计算机图形学“Computer Graphics”这个术语,证明了交互计算机图形学是一个可行的、有用的研究领域,从而确定了计算机图形学作为一个崭新的科学分支的独立地位。他在论文中所提出的一些基本概念和技术,如交互技术、分层存储符号的数据结构等至今还在广为应用。1964年MIT的教授Steven A. Coons提出了被后人称为超限插值的新思想,通过插值四条任意的边界曲线来构造曲面。同在60年代早期,法国雷诺汽车公司的工程师Pierre Bézier发展了一套被后人称为Bézier曲线、曲面的理论,成功地用于几何外形设计,并开发了用于汽车外形设计

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

第一章绪论 概念:计算机图形学、图形、图像、点阵法、参数法、 图形的几何要素、非几何要素、数字图像处理; 计算机图形学和计算机视觉的概念及三者之间的关系; 计算机图形系统的功能、计算机图形系统的总体结构。 第二章图形设备 图形输入设备:有哪些。 图形显示设备: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

二维图形基本变换规则及应用

二维图形基本变换规则及应用 (07级信息与计算科学傅强070350221) 摘要 利用计算机绘制的图形与我们日常见到的图片、照片是有相似之处。除图片、照片等图形外,自然界中还存在丰富多彩的有形物体。一般,根据图形所在空间的不同,可将图形分为:三维图形和二维图形。图片、照片属二维图形,自然界中形形色色的物体属于三维图形。在计算机绘图的过程中,二维图形的绘制是绘制三维图形的基础,研究计算机图形的生成必须从研究二维图形开始。计算机绘制图形时,无论图形多么复杂,都是利用一些相应图形基元经过图形变换组成的。在计算机绘图中,经常用到图形变换,图形变换是指图形信息经过几何变换后产生新的图形。基本的几何变换研究物体坐标在直角坐标系内的平移、旋转和变比等规则。本文主要介绍二维图形的一些基本变换规则及其应用 关键词:直角坐标系内;平移;旋转;应用 ABSTRACT Using the computer graphics and see our daily drawings, photographs are similarities. Besides the drawings, photographs and other graphic, nature also exist rich and colorful tangible objects. In general, according to the different space, the graphics can be divided into: 3d graphics and 2d graphics. The drawings, photographs of 2d graphics, all kinds of objects in the nature belongs to 3d graphics. In computer graphics, the process of 2d graphics rendering 3d graphics drawing is the basis, research of computer graphics generation must start from the 2d graphics. Computer graphics, no matter how complex, graphics are using some corresponding graphic element composed by graphical transformation. In computer graphics, often use graphics transformation, graphics transform refers to the graphical information through after new graphics geometry transform. The basic research object coordinate geometry transform in cartesian coordinate system in translation, rotation and change rules than etc. This paper mainly introduces some basic transformation of 2d graphics and its application in the rules. Keywords: a cartesian coordinate system, Translation, Rotating, application

(计算机图形学)关于任意直线的对称变换

实验3:关于任意直线的对称变换 实验类型:验证、设计 所需时间:3学时 主要实验内容及要求: 对于任意直线的二维图形对称变化的实验,要求输入的直线是任意直线,直线的端点只能由键盘输入或者鼠标拾取,要做对称变换的图形也是一个任意图形(至少应是一个任意多边形)。 对称变换,先分析如何使用一系列简单变换来构造题目要求的复合变换。本体要实现的变换可以用如下一组变换组合来实现: ①将直线任一点移至与坐标原点重合 ②将平移后的直线绕原点旋转至与某一坐标轴重合 ③将题目要求的对称变换转为实现已知图形关于上述坐标轴的对称变换 ④按逆序求上述①、②变换的逆变换 ⑤将上述矩阵依次相乘得到最终的复合变换矩阵 则某一多边形关于任意直线的对称变换就转变为将该多边形的各顶点与上述求得的复合变换进行矩阵乘法,求得变换后的新多边形的各个顶点坐标。 根据上述流程,编程实现,并测试程序功能。 源代码: #include #include using namespace std;

void Initial(void) { glClearColor(1.0f,1.0f,1.0f,1.0f); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0); } class CPoint { public: int x; int y; CPoint(){} CPoint(int x1,int y1) { x=x1; y=y1; } static CPoint ZeroMoveToXY(CPoint p, CPoint XY);//原始坐标向屏幕坐标XY 的平移 static CPoint ToZero(CPoint p);//关于原点对称 static CPoint XYMoveToZero(CPoint p, CPoint XY);//XY坐标向屏幕坐标的平移

计算机图形学总结论文

计算机图形学总结 首先,感谢老师一个学期以来的教导,您的授课真的让我受益匪浅。您不仅教会了我们很多新颖的知识,还让我们对一些事情有了新的正确认识。 其次,通过一个学期的学习,经过老师细心的讲解,我对图形学这门课有了基础的认识,从您的课上我学到了不少知识,基本上对图形学有了一个大体的认识。上课的时候,您的PPT做的栩栩如生,创意新颖的FLASH就吸引了我的眼球,再加上您那详细生动的讲解,就让我对这门课产生了浓厚的兴趣,随着一节一节课的教学,您的讲课更加深深地吸引了我,并且随着对这门课越来越深入的了解更促使我产生了学好这门的欲望。您教会了我们怎们做基本知识,还教了我们不少的算法。听您的课可以说是听得津津有味。以下就是我对计算机图形学这门课的认识。 计算机图形学Computer Graphics简称CG是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法!计算机图形学主要研究两个问题:一个是如何在计算机中构造一个客观世界---几何(模型)的描述,创建和处理,一‘几何’一词统一表述之,二是如何将计算机中的虚拟世界用最形象的方式静态或动态的展示出来,几何的视觉再现,一‘绘制’一词统一表述之。由此可以说: 计算机图形学=几何+绘制 本课程让我了解了和掌握必要的图形学概念、方法和工具。智能CAD计算机美术与设计计算机动画艺术科学计算可视化。 一、图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看图形主要分为两类一类是基于线条信息表示的如工程图、等高线地图、曲面的线框图等另一类是明暗图也就是通常所说的真实感图形。计算机图形学一个主要的目的就是要利用计算机产生令人赏心悦目的真实感图形。为此必须建立图形所描述的场景的几何表示再用某种光照模型计算在假想的光源、纹理、材质属性下的光照明效果。所以计算机图形学与另一门学科计算机辅助几何设计有着密切的关系。事实上图形学也把可以表示几何场景

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

第三章习题答案 3.1 计算机图形系统的主要功能是什么? 答:一个计算机图形系统应具有计算、存储、输入、输出、交互等基本功能,它们相互协作,完成图形数据的处理过程。 1. 计算功能 计算功能包括: 1)图形的描述、分析和设计;2)图形的平移、旋转、投影、透视等几何变换; 3)曲线、曲面的生成;4)图形之间相互关系的检测等。 2. 存储功能 使用图形数据库可以存放各种图形的几何数据及图形之间的相互关系,并能快速方便地实现对图形的删除、增加、修改等操作。 3. 输入功能 通过图形输入设备可将基本的图形数据(如点、线等)和各种绘图命令输入到计算机中,从而构造更复杂的几何图形。 4. 输出功能 图形数据经过计算后可在显示器上显示当前的状态以及经过图形编辑后的结果,同时还能通过绘图仪、打印机等设备实现硬拷贝输出,以便长期保存。 5. 交互功能 设计人员可通过显示器或其他人机交互设备直接进行人机通信,对计算结果和图形利用定位、拾取等手段进行修改,同时对设计者或操作员输入的错误给以必要的提示和帮助。 3.2 阴极射线管由哪些部分组成?它们的功能分别是什么? 答:CRT主要由阴极、电平控制器(即控制极)、聚焦系统、加速系统、偏转系统和阳极荧光粉涂层组成,这六部分都在真空管内。 阴极(带负电荷)被灯丝加热后,发出电子并形成发散的电子云。这些电子被电子聚集透镜聚焦成很细的电子束,在带正高压的阳极(实际为与加速极连通的CRT屏幕内侧的石墨粉涂层,从高压入口引入阳极高电压)吸引下轰击荧光粉涂层,而形成亮点。亮点维持发光的时间一般为20~40mS。 电平控制器是用来控制电子束的强弱的,当加上正电压时,电子束就会大量通过,在屏幕上形成较亮的点,当控制电平加上负电压时,依据所加电压的大小,电子束被部分或全部阻截,通过的电子很少,屏幕上的点也就比较暗。所以改变阴极和 控制电平之间的电位差,就可调节电子 束的电流密度,改变所形成亮点的明暗 程度。 利用偏转系统(包括水平方向和 垂直方向的偏转板)可将电子束精确定 位在屏幕的任意位置上。只要根据图形 的几何坐标产生适当的水平和垂直偏转磁场(或水平和垂直偏转板静电场),图 2.2CRT原理图

计算机图形学 图形几何变换的实现

计算机图形学图形几何变换的实现

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

实验五图形几何变换的实现 班级08信计2 学号89姓名徐阳分数 一、实验目的和要求: 1、掌握理解二维、三维变换的数学知识、变换原理、变换种类、变换方法;进一步理解采用齐次坐标进行二维、三维变换的必要性;利用Turboc实现二维、三维图形的基本变换和复合变换。 二、实验内容: 1、理解采用齐次坐标进行图形变换的必要性——变换的连续性,使复合变换得以实现。 2、掌握二维、三维图形基本变换(平移、缩放、对称、旋转、错切)的原理及数学公式。 3、利用Turboc实现二维、三维图形的基本变换、复合变换,在屏幕上显示变换过程或变换结果。 三、实验结果分析: 程序代码如下: /*二维图形(直线)平移变换*/ #include #include #include main() {int x0,y0,x1,y1,i,j; int a[3][3]; char key; for(i=0;i<3;i++) for(j=0;j<3;j++) a[i][j]=0; for(i=0;i<3;i++) a[i][i]=1; int graphdriver=DETECT; int graphmode=0; initgraph(&graphdriver,&graphmode," "); cleardevice(); x0=250;y0=120;x1=350;y1=220; line(x0,y0,x1,y1); for( ; ;) {outtextxy(100,400,"<-:left->:right^:up v:down Esc->exit"); key=getch();

《计算机图形学》课程设计论文(参考)

攀枝花学院 学生课程设计(论文) 题目:图书馆图书管理系统 学生姓名:黄志强学号:201110801008 所在院(系):计算机学院 专业:计算机科学与技术 班级: 2011级1班 指导教师:罗学刚 2012年6月13日

攀枝花学院本科学生课程设计任务书 注:任务书由指导教师填写。

课程设计(论文)指导教师成绩评定表

摘要 汉诺塔(又称河内塔)问题是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。 利用计算机图形学进行汉诺塔演示程序设计,是利用C语言绘图函数实现汉诺塔的递归算法图形界面演示过程。通过C语言实现图形学的绘图,程序控制,以及区域填充,并根据汉诺塔的算法原理实现大小不同的盘子移动的全过程演示。 关键词汉诺塔,变换矩阵,种子填充算法,递归调用

目录 摘要 .......................................................................................................................................... I 1 需求分析 (1) 1.1 需求概述 (1) 1.2 需求环境 (1) 1.3 功能描述 (2) 2 概要设计 (3) 2.1 程序功能模块 (3) 2.2 程序流程图 (3) 2.3 数据结构的设计 (4) 3 详细设计 (5) 3.1 程序初始化 (5) 3.1.1 代码功能 (5) 3.1.2 功能实现代码 (5) 3.2 盘块的移动过程 (5) 3.2.1代码功能 (5) 3.2.2 功能实现代码 (5) 3.3 递归函数 (6) 3.3.1 流程图 (6) 3.3.2 功能实现代码 (7) 4 测试与运行 (8) 结束语 (9) 参考文献 (10)

计算机图形学论文

计算机图形学论文题目:边缘填充算法思想与改进 院(系) 专业计算机系 班级 学号 姓名 指导老师

摘要 计算机图形学边缘填充算法的基本思想是,逐边向右取补。它适用于具有帧缓冲区的图形系统。边缘填充算法包括传统的边缘填充算法﹑栅栏填充算法和打标志算法。本文通过对边缘填充算法的描述引出栅栏填充算法的改进,通过改进栅栏的选择来。边缘填充是一类多边形扫描转换算法, 算法思路清晰, 结构简单。算法的一个不足是对复杂图形的每一象素都要进行多次I/O操作, 影响算法的效率。本文对此作了改进,给出的改进算法对象素的访问次数较少, 因而有较高的效率。 关键词(宋体小三号):计算机图形学;边缘填充算法;栅栏填充算法;改进。

目录 摘要 (1) 引言 (3) 一、算法原理 (4) 二、适用领域 (4) 三、算法种类 (4) 四、算法程序节选 (4) 五、算法改进 (6) 结语 (7) 参考文献 (8)

引言 近年来, 随着计算机技术的迅速发展及图形设备价格的下降, 光栅图形技术发展很快, 它的应用领域不断扩大, 并己成为计算机图形学的一个重要分支。 边缘填充算法采用求余的方法, 免去了有序边表算法中对边排序的工作量, 而改用求余运算代替。其特点为可以按任意顺序处理多边形的边。算法的主要不足之处在于, 对于较复杂的图形每一象素可能被访问多次, 因此这一算法受到输入=输出条件的限制。栅栏填充算法要比边缘填充算法访问象素的次数减少。 本文最后给出的栅栏填充改进算法在传统的栅栏填充算法思想上,改进了栅栏的选取,通过过多边形两个顶点的连线作为栅栏线,然后去各个边到栅栏的投影取补,循环一周形成填充效果。(宋体小四号,字号、行距均同正文)

计算机图形学(第三版)孙家广课后习题答案

第一章:P56 1、列出在你过去学习工作中用过与计算机图形学有关的程序c语言: #include main() { int graphdriver = VGA, graphmode=VGAHI; initgraph(&graphdriver,&graphmode,””); setbkcolor(BLUE); setcolor(WHITE); setfillstyle(1,LIGHTRED); bar3d(100,200,400,350,100,1); floodfill(450,300,WHITE); floodfill(250,450,WHITE); setcolor(LIGHTGREEN); rectangle(450,400,500,450); floodfill(470,420,LIGHTGREEN); getch(); closegraph(); } JA V A语言: 例1、画点 Import java.io.*; Class point { int ax; int ay; int bx; int by; public point(int ax, int ay, int bx, int by) { float k ; //计算斜率 float b; k=(by-ay)/(bx-ax); b=ay-ax*k; system.out.println(“直线的方程为:y=”+k+”x”+”+”+b); } } 例2、画矩形 class DrawPanel extends Jpanel { public void paint(Graphics g)

实验二维图形基本变换

实验一二维图形的基本变换 一.实验目的 1、掌握CAD图形处理的原理和方法; 2、通过上机操作,熟悉多边形的平移、比例和旋转变换,掌握二维图形的基本变换。 3、理解CAD对图形进行复合变换(平移、比例和旋转变换)的过程。 二.实验要求 1、上机调试所编程序,实现图形的绘制、平移变换、比例变换和旋转变换。 2、二维图形各点的坐标、平移、比例、旋转角度可由用户任意输入,原图形和变换后的图形必须同时显示在显示器上。 三.实验设备 1、计算机系统; 2、安装Turbo C或其他C语言集成开发工具 四.实验原理 在计算机图形处理中,经常需要对已经生成的图形进行几何变换处理。例如,改变原始图形的大小、移动图形到某一指定位置或根据需要将图形旋转某一个角度,这就要求图形的处理软件能够实现缩放、平移、旋转等几何变换。由于点是构成一个几何形体的最基本的元素,而一幅二维图形可以看成是一个点集,如三角形有三个特征

点……,因此,我们就可以把对图形的几何变换归结对点的变换。通过对构成几何图形的特征点集的几何变换即可实现整个图形的几何变换。即如何实现一个旧点到变化后新点的计算求解是本次实验的重点。 我们给出平移、比例、旋转变换的矩阵分别为: 平 移: T t =???? ??????1010001n m (m,n 分别为x,y 方向上的平移量) 全比例: T s =???? ??????1000000b a (a,b 分别为x,y 方向上的比例因子) 旋 转: T r =???? ??????-1000cos sin 0sin cos θθθθ (θ为旋转角,逆时针为正) 假设一几何图形由A(x A,y A ) B(x B ,y B ) C(x C ,y C ) D(x D ,y D )四点组成,那么变换后四点坐标为A ’(x ’A,y ’A ) B ’(x ’B ,y ’B ) C ’(x ’C ,y ’C ) D ’(x ’D ,y ’D ) 平移:??????????????1111''''''''D D C C B B A A Y X Y X Y X Y X =???????? ??????1111D D C C B B A A Y X Y X Y X Y X T t =??????????????1111D D C C B B A A Y X Y X Y X Y X ??????????1010001n m =?????? ????????++++++++1111n Y m X n Y m X n Y m X n Y m X D D C C B B A A 比例:??????????????1111''''''''D D C C B B A A Y X Y X Y X Y X =??????????????1111D D C C B B A A Y X Y X Y X Y X T s =??????????????1111D D C C B B A A Y X Y X Y X Y X ??????????1000000b a =?????? ????????1111D D C C B B B A bY aX bY aX bY aX bY aX

相关文档
最新文档