计算机图形学之三维直线变换

计算机图形学之三维直线变换
计算机图形学之三维直线变换

计算机图形学实验报告

一、实验原理

三维直线坐标的表示:

()z y x ,,表示空间中一点,因此可以用点的集合(简称点集)来表示一个平面

图形或三维立体,写成矩阵的形式为:?????

????

???n n

n

z y x z y x z y x 222

111。 旋转变换:

三维旋转变换是3个二维旋转变换,且旋转轴分别为x 、y 、z 轴。 绕x 轴旋转α角

变换矩阵为:?????

??

??

???-=10

000cos sin 00sin cos 000

01

αααα

rx T 绕y 轴旋转β角

变换矩阵为:?????

?

???

???-=10

000cos 0sin 0010

0sin 0cos ββββry T 绕z 轴旋转γ角

变换矩阵为:?????

??

??

???-=10

00010000cos sin 00

sin cos λ

λλλrz T 平移变换:

将空间一点),,(z y x 平移到一个新的位置),,('''z y x 的变换为:

[]

[][]1101000010000111''

'

n z m y k y n

m

k z y

x

z y x

+++=?????

??

??

???=

其中:k 、m 、n 分别为沿x 、y 、z 方向上的平移量。 投影变换-正面投影:

将物体向正面投影,即令Y=0, 点在V 面上投影的坐标变换为:

[]

[][]1010

00

01000000000111''

'

z x z y

x

z y x

=?????

????

???= 窗口:

在计算机中,窗口是图形的可见部分,是在用户坐标系中定义的确定显示内容的一个矩形区域,只有在这个区域内的图形才能在设备坐标系下输出,而窗口外的部分则被裁掉。 视区:

视区是在这杯坐标系(通常是屏幕)中定义的一个矩形区域,用于输出窗口中的图形。视区决定了窗口中的图形要显示于屏幕上的位置和大小。 窗口--视区变换

窗口中一点),(w w y x W 变换到视区中对应的点),(v v y x V 之间的关系

为:???

?

???

+---=+---=yb

yb w yb yt yb yt

v xl

xl w xl xr xl xr v V w y W W V V y V W x W W V V x )()(

二、实验步骤

1. 定义一个齐次三维直线。

2. 对直线进行旋转变换(绕x 轴旋转30度),变换矩阵为

????

?

????

???-=1000030cos 30sin 0030sin 30cos 00001

rx T 。 3. 将旋转后的直线向正面投影,即令Y=0,变换矩阵为?????

????

???=10

0001000000

0001

T 。 4. 定义一个窗口,用Liang-Barsky 裁剪算法对投影的直线进行裁剪

5. 进行窗口-视区变换,并且显示出裁剪前后的图形。

三、源程序

void CHView::OnDraw(CDC* pDC) {

CHDoc* pDoc = GetDocument();

ASSERT_V ALID(pDoc);

// TODO: add draw code for native data here

double pts[2][4]={{200,88,300,1},{400,55,100,1}};//定义齐次三维直线

pDC->MoveTo(pts[0][0],pts[0][2]);

pDC->LineTo(pts[1][0],pts[1][2]);

//将直线进行旋转变换

double pts1[2][4];

double T[4][4]={{1,0,0,0},{0,0.87,0.5,0},{0,-0.5,0.87,0},{0,0,0,1}};//定义旋转变换矩阵

pts1[0][0]=pts[0][0];

pts1[0][1]=pts[0][1]*T[1][1]+pts[0][2]*T[2][1];

pts1[0][2]=pts[0][1]*T[1][2]+pts[0][2]*T[2][2];

pts1[0][3]=pts[0][3];

pts1[1][0]=pts[1][0];

pts1[1][1]=pts[1][1]*T[1][1]+pts[1][2]*T[2][1];

pts1[1][2]=pts[1][1]*T[1][2]+pts[1][2]*T[2][2];

pts1[1][3]=pts[1][3];

//将直线正面投影变换

int xv1,xv2,yv1,yv2;

xv1=pts1[0][1];

yv1=pts1[0][2];

xv2=pts1[1][0];

yv2=pts1[1][2];

pDC->MoveTo(xv1,yv1);

pDC->LineTo(xv2,yv2);

int XL=80,XR=280,YB=160,YT=350;//给窗口边界赋值

int Vxl=180,Vxr=380,Vyb=80,Vyt=270;//给视区边界赋值

CRect rect(XL,YB,XR,YT);//画出窗口

CBrush brush(RGB(0,255,0));//用绿色绘制裁剪窗口

pDC->FrameRect(&rect,&brush);

POINT p1,q1;

p1.x=xv1;

p1.y=yv1;

q1.x=xv2;

q1.y=yv2;

CPen *pOld,pen(PS_SOLID,1,RGB(255,0,0));//设置红色画笔

pOld=pDC->SelectObject(&pen);

clipParameter(&p1,&q1,XL,XR,YB,YT,pDC);//调用Liang-Barsky裁剪算法

pDC->SelectObject(pOld);

CRect rect1(Vxl,Vyb,Vxr,Vyt);//画出视区

CBrush brush1(RGB(255,0,255));//用亮红色绘制视区窗口

pDC->FrameRect(&rect1,&brush1);

p1.x=((Vxr-Vxl)/(XR-XL))*(p1.x-XL)+Vxl;//窗口-视区变换

p1.y=((Vyt-Vyb)/(YT-YB))*(p1.y-YB)+Vyb;

q1.x=((Vxr-Vxl)/(XR-XL))*(q1.x-XL)+Vxl;

q1.y=((Vyt-Vyb)/(YT-YB))*(q1.y-YB)+Vyb;

pDC->MoveTo(p1.x,p1.y);

pDC->LineTo(q1.x,q1.y);

}

void CHView::clipParameter(POINT *p1, POINT *p2, int XL, int XR, int YB, int YT, CDC *pDC)//Liang-Barsky裁剪算法

{

float u1=0.0,u2=1.0,dx=p2->x-p1->x,dy=p2->y-p1->y;

float x,y;

if(clipTest(-dx,p1->x-XL,&u1,&u2))

if(clipTest(dx,XR-p1->x,&u1,&u2))

if(clipTest(-dy,p1->y-YB,&u1,&u2))

if(clipTest(dy,YT-p1->y,&u1,&u2))

{

if(u1<=u2)

{

x=p1->x+u1*dx;y=p1->y+u1*dy;

p2->x=p1->x+u2*dx;p2->y=p1->y+u2*dy;

p1->x=x;

p1->y=y;

pDC->MoveTo(*p1);

pDC->LineTo(*p2);

}

}

}

int CHView::clipTest(float p, float q, float *u1, float *u2)

{

float r;

int remainflag=1;

if(p<0.0)

{

r=q/p;

*u1=(*u1>r)?*u1:r;

}

else if(p>0.0)

{

r=q/p;

*u2=(*u2

}

else if(q<0.0)

remainflag=0;

return remainflag;

}

四、结果

五、总结

通过此次实验,我觉得学习一些理论知识是远远不够的,更最重要的是练习编程,将学过的理论知识前后联系起来,然后将这些知识通过编程实现出来,这样才能学习好一门语言课。

计算机图形学输出直线实验报告

六盘水师范学院计科系本科班计算机图形学实验报告 系别:计科系 课程名称:计算机图形学 班级:本科 学号:114077031057 学生姓名:郑月儒 一、实验目的 1、了解和使用开发环境; 2、熟悉MFC上机操作步骤; 3、熟悉基本图形函数的使用。 二、实验环境 1、操作系统Windows7旗舰版 2、Microsoft Visual C++6.0 3、PC 三、实验人数 5人 四、实验内容 在屏幕上绘制一条直线。 五、实验步骤 (1)进入Microsoft Visual C++6.0集成开发环境后,选择“文件-新建”菜单,弹出“新建”对话框。单击“工程”标签,打开其选项卡,在其左边的列表框中选择MFC AppWizard(EXE)工程类型,在

“工程名称”文本框输入工程名,在“位置”中选择工程路径。如果是第一个工程文件,则必须创建一个新的工作区,选择“创建新的工作空间”,在“平台”编辑框中选择“Win32”。 (2)单击“确定”按钮,现实“MFC应用程序向导-步骤1”对话框,选择“单文档”选项。 (3)单击“完成”按钮,系统弹出“新建工程信息”对话框。(4)单击“确定”按钮,就完成了应用程序的自动生成,在指定的目录下生成了应用程序框架所必需的全部文件,并且可以以直接运行。 (5)选择“组建-执行”。因为是第一次执行,没有生成可执行文件.EXE,提示是否生成,选择“是”,则系统进行编译及连接,生成可执行文件,并运行。、 (6)在窗口左边工作区“FileView”标签中,选择graphicView.cpp 文件,在voidCGraphicView::OnDraw(CDC*pDC)函数中添加如下代码:pDC->SetPixel(100,100,RGB(0,0,0)); pDC->MoveTo(0,0); pDC->LineTo(1000,415); (7)运行程序,得到实验结果。 六、实验效果(含程序运行主要截图)

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

名词解释 将图形描述转换成用像素矩阵表示的过程称为扫描转换。 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. 什么是图像的分辨率?

计算机图形学实验一_画直线

大学实验报告 学院:计算机科学与技术专业:计算机科学与技术班级:计科131

如果 d<0,则M在理想直线下方,选右上方P1点; 如果 d=0,则M在理想直线上,选P1/ P2点。 由于d是xi和yi的线性函数,可采用增量计算提高运算效率。 1.如由pi点确定在是正右方P2点(d>0).,则新的中点M仅在x方向加1,新的d值为: d new=F(xi+2,yi+0.5)=a(xi+2)+b(yi+0.5)+c 而 d old=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c d new=d old+a= d old-dy 2.如由pi点确定是右上方P1点(d<0),则新的中点M在x和y方向都增加1,新的d值为 d new=F(xi+2,yi+1.5)=a(xi+2)+b(yi+1.5)+c 而 d old=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c d new=d old+a+b= d old-dy+dx 在每一步中,根据前一次第二迭中计算出的d值的符号,在正右方和右上方的两个点中进行选择。d的初始值: d0=F(x0+1,y0+0.5)=F(x0,y0)+a+b/2=a+b/2=-dy+dx/2 F(x0,y0)=0,(x0,y0)在直线上。 为了消除d的分数,重新定义 F(x,y)=2(ax+by+c) 则每一步需要计算的d new 是简单的整数加法 dy=y1-y0,dx=x1-x0 d0=-2dy+dx d new=d old-2*dy,当 d old>=0 d new=d old-2(dy-dx),当d old<0 Bresenham画线算法 算法原理: 与DDA算法 相似,Bresenham 画线算法也要在 每列象素中找到 与理想直线最逼 近的象素点。 根据直线的 斜率来确定变量 在x或y方向递 增一个单位。另 一个方向y或x

计算机图形学基础期末考试试题

一、填空题 1.将多边形外部一点A与某一点B用线段连接,若此线段与多边形边界相交的次数为??????????,则点B在多边形外部。若此线段与多边形边界相交的次数为??????????,则点B在多边形内部。 2.生成直线的四点要求是_______________________,____________________________,____________________________________,速度要快。 3.由5个控制顶点Pi(i=0,1,…4)所决定的3次B样条曲线,由??????????段3次B样条曲线段光滑连接而成。 4.用于减少或克服在“光栅图形显示器上绘制直线、多边形等连续图形时,由离散量表示连续量引起的失真”的技术叫??????????。 5.图形的数学表示法一般有??????????,??????????,??????????。 1.一个交互性的计算机图形系统应具有、、、、 输入等五方面的功能。 2.阴极射线管从结构上可以分为、和。 3.常用的图形绘制设备有和,其中支持矢量格式。 4.PHIGS和GKS将各种图形输入设备从逻辑上分为六种:定位设备、笔划设 备、、、和。 5.通常可以采用和处理线宽。 6.齐次坐标表示就是用维向量表示n维向量。 7.平行投影根据可以分为投影和投影。 8.一个交互式计算机图形处理系统包括图形软件和_____________,图形软件又分为 _____________、_____________和三部分。 9.构成图形的要素包括和,在计算机中通常用采用两种方法来表示 图形,他们是和。 10.荫罩式彩色显像管的结构包括、、和。 11.目前常用的PC图形显示子系统主要由3个部件组成:、和一 个ROM BIOS芯片。 12.在交互输入过程中,图形系统中有_____________、、和其组 合形式等几种输入(控制)模式。 13.填充一个特定区域,其属性选择包括、和。 14.计算机中表示带有颜色及形状信息的图和形常用和参数法,其中用参数法描 述的图形称为,用描述的图形称为。 15.在显示技术中,我们常常采用提高总的光强等级。 16.常用的交互式绘图技术有、、和。

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

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

计算机图形学实验—中点算法画直线

计算机图形学实验报告 班级:软件1102 姓名:夏明轩 学号:201109020221

中点算法的线段光栅化 一、设计思想和算法流程 1.假定直线斜率0 P 2离直线更近更近->取P 2 。 M 在Q 的上方-> P 1离直线更近更近->取P 1 M 与Q 重合, P 1、P 2任取一点。 问题:如何判断M 与Q 点的关系? 由常识知:若y=kx+b; F(x,y)=y-kx-b;则有 ()()()?????<>=点在直线下方 0,点在直线上方0,点在直线上面0,y x F y x F y x F 假设直线方程为:ax +by +c=0 (y=(-a/b)x-c/b) 通过两点不能唯一确定a,b,c, 取 a=y 0-y 1, b=x 1-x 0, c=x 0y 1-x 1y 0 F(x,y)=ax +by +c=b(y-(-a/b)x-c/b); ()()()?????<>=点在直线下方0,点在直线上方0 ,点在直线上面0,y x F y x F y x F 则有 ∴欲判断M 点是在Q 点上方还是在Q 点下方,只需把M 代入F (x ,y ),并检查它的符号。构造判别式:d=F(M)=F(x p +1,y p +0.5)=a(x p +1)+b(y p +0.5)+c 当d<0,M 在直线(Q 点)下方,取右上方P 2; 当d>0,M 在直线(Q 点)上方,取右方P 1; 当d=0,选P 1或P 2均可,约定取P 1; 能否采用增量算法呢?若d ≥0 ---->M 在直线上方->取P1;此时再下一个象素的判别式为 d 1=F(x p +2, y p +0.5) =a(x p +2)+b(y p +0.5)+c = a(x p +1)+b(y p +0.5)+c +a =d+a ; 增量为a 若d<0 ------>M 在直线下方->取P2;此时再下一个象素的判别式为 d 2= F(x p +2, y p +1.5) =a(x p +2)+b(y p +1.5)+c = a(x p +1)+b(y p +0.5)+c +a +b =d+a+b ;

计算机图形学用VC++画直线

实验一基本图形生成算法 实验目的: 掌握中点Bresenham绘制直线的原理 设计中点Bresenham算法 编程实现中点Bresenham算法 实验描述: 使用中点Bresenham算法绘制斜率为0≤k≤1的直线。 算法设计: 直线中点Bresenham算法 1. 输入直线的起点坐标P0(x0,y0)和终点坐标P1(x1,y1)。 2. 定义直线当前点坐标x,y、定义中点偏差判别式d、定义直线斜率k、定义像素点颜色 rgb。 3. x=x0,y=y0,计算d=0.5-k,k=(y1-y0)/(x1-x0),rgb=RGB(0,0,255)。 4. 绘制点(x,y),判断d的符号。若d<0,则(x,y)更新为(x+1,y+1),d 更新为 d+1-k;否则(x,y)更新为(x+1,y),d更新为d-k。 5. 如果当前点x 小于x1,重复步骤4,否则结束。 源程序: 1)// TestView.h #include "InputDlg.h"//对话框头文件 class CTestView : public CView { ….. } 2)//TestView.cpp #define ROUND(a) int(a+0.5) //四舍五入 ….. void CTestView::OnMbline()//菜单响应函数 { InputDlg dlg; if(dlg.DoModal()==IDOK) { AfxGetMainWnd()->SetWindowText(":直线中点Bresenham算法"); RedrawWindow(); Mbline(dlg.m_x0, dlg.m_y0, dlg.m_x1, dlg.m_y1); } } void CTestView::Mbline(double x0, double y0,double x1,double y1) //直线中点Bresenham函数{ CClientDC dc(this); COLORREF rgb=RGB(0,0,255); //定义直线颜色为蓝色 double x,y,d,k; x=x0;y=y0;k=(y1-y0)/(x1-x0);d=0.5-k;

计算机图形学实验--实验六 三维立方体

贵州大学实验报告 学院:计算机科学与信息学院专业:软件工程班级: 102班Java3D的编程思想显示如下:

panel.setBackground(Color.WHITE); panel.setSize(600, 600); panel.setVisible(true); g = panel.getGraphics(); } class KeyMonitor extends KeyAdapter { public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_3: BasicConstruct bc = new BasicConstruct(); bc.addMyBox(x, y, z, bc); break; default: ; } } } } 三维图形的实现类: package wangqian.draw.transform; import javax.swing.JFrame; import java.awt.*; import javax.media.j3d.Canvas3D; import com.sun.j3d.utils.universe.SimpleUniverse; import javax.media.j3d.BranchGroup; import com.sun.j3d.utils.geometry.Box; import javax.vecmath.*; import javax.media.j3d.DirectionalLight; import javax.media.j3d.BoundingSphere; import javax.media.j3d.Appearance; import javax.media.j3d.Material; import javax.media.j3d.TransformGroup; import com.sun.j3d.utils.behaviors.mouse.*; public class BasicConstruct extends JFrame { protected SimpleUniverse simpleU; protected BranchGroup rootBranchGroup; public BasicConstruct() { initial_setup(); }

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

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

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

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

计算机图形学 直线的生成算法的实现

实验二 直线的生成算法的实现 班级 08信计2班 学号 59 姓名 分数 一、实验目的和要求 1.理解直线生成的基本原理。 2.掌握几种常用的直线生成算法。 3.利用Visual C++实现直线生成的DDA 算法。 二、实验内容 1.了解直线的生成原理,尤其是Bresenham 画线法原理。 2.掌握几种基本的直线生成算法:DDA 画线法、Bresenham 画线法、中点画线法。 3.利用Visual C++实现直线生成的DDA 算法,在屏幕上任意生成一条直线。 三、实验步骤 1.直线的生成原理: (1)DDA 画线法也称数值微分法,是一种增量算法。是一种基于直线的微分方程来生成直线的方法。 (2)中点画线法原理 以下均假定所画直线的斜率[0,1]k ∈,如果在x 方向上的增量为1,则y 方向上的增量只能在01 之间。中点画线法的基本原理是:假设在x 坐标为p x 的各像素点中,与直线最近者已经确定为(,)p p P x y ,用小实心圆表示。那么,下一个与直线最近的像素只能是正右方的1(1,)p p P x y +,或右上方的2(1,1)p p P x y ++,用小空心圆表示。以M 为1P 和2P 的中点,则M 的坐标为(1,0.5)p p x y ++。又假设Q 是理想直线与垂直线1p x x =+的交点。显然,若M 在Q 的下方,则2P 离直线近,应取2P 为下一像素点;若M 在Q 的上方,则1P 离直线近,应取1P 为下一像素点。 (3)B resenham 画线法原理 直线的中点Bresenham 算法的原理:每次在主位移方向上走一步,另一个方向上走不走步取决于中点偏差判别式的值。 给定理想直线的起点坐标为P0(x0,y0),终点坐标为P1(x1,y1),则直线的隐函数方程为: 0b kx y y)F(x,=--= (3-1) 构造中点偏差判别式d 。 b x k y y x F y x F d i i i i M M -+-+=++==)1(5.0)5.0,1(),(

计算机图形学-设计算法绘制直线与圆

信息与计算科学专业基础课 Computer Report Of course 计算机图形学课程实验 报告 实验题目设计算法绘制直线与圆 班级 姓名 学号 指导教师 日期

实验说明 试验目的: 掌握直线和圆的基本生成算法思想,并上机编程实现相应的算法。 试验地点: 教九楼401 数学系机房 实验要求(Direction): 1. 每个学生单独完成;2.开发语言为TurboC 或C++,也可使用其它语言;3.请在自己的实验报告上写明姓名、学号、班级;4.每次交的实验报告内容包括:题目、试验目的和意义、程序制作步骤、主程序、运行结果图以及参考文件;5. 自己保留一份可执行程序,考试前统一检查和上交。 实验内容 实验题一 实验题目 1).用DDA 法在屏幕上画一条具有三个像素宽的直线段L1。要求:(1)直线段L1的两个端点坐标和画线颜色都要求可以随机输入;(2)要求输出直线段L1上的各点坐标;(3)画出直线的同时要求标明两端点坐标。 2).将课堂所讲的斜率01、-1

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

第一章: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)

计算机图形学课程总结

计算机图形学报告 前言 计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。 其从狭义上是来说是一种研究基于物理定律、经验方法以及认知原理,使用各种数学算法处理二维或三维图形数据,生成可视数据表现的科学。广义上来看,计算机图形学不仅包含了从三维图形建模、绘制到动画的过程,同时也包括了对二维矢量图形以及图像视频融合处理的研究。由于计算机图形学在许多领域的成功运用,特别是在迅猛发展的动漫产业中,带来了可观的经济效益。另一方面,由于这些领域应用的推动,也给计算机图形学的发展提供了新的发展机遇与挑战。 计算机图形学的发展趋势包括以下几个方面: 1、与图形硬件的发展紧密结合,突破实时高真实感、高分辨率渲染的技术难点; 2、研究和谐自然的三维模型建模方法; 3、利用日益增长的计算性能,实现具有高度物理真实的动态仿真; 4、研究多种高精度数据获取与处理技术,增强图形技术的表现; 5、计算机图形学与图像视频处理技术的结合; 6、从追求绝对的真实感向追求与强调图形的表意性转变。 1、三维物体的表示 计算机图形学的核心技术之一就是三维造型三维物体种类繁多、千变万化,如树、花、云、石、水、砖、木板、橡胶、纸、大理石、钢、玻璃、塑料和布等等。因此,不存在描述具有上述各种不同物质所有特征的统一方法。为了用计算机生成景物的真实感图形,就需要研究能精确描述物体特征的表示方法。根据三维物体的特征,可将三维物体分为规则物体和非规则物体两类。

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

1.列举计算机图形学的主要研究内容。 计算机中图形的表示方法、图形的计算、图形的处理和图形的显示。 图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。 2.常用的图形输出设备是什么? 显示器(CRT、LCD、等离子)、打印机、绘图仪等。 2.常用的图形输入设备是什么? 键盘、鼠标、跟踪球、空间球、数据手套、光笔、触摸屏、扫描仪等。 3.列出3种图形软件工具。 AutoCAD、SolidWorks、UG、ProEngineer、CorelDraw、Photoshop、PaintShop、Visio、3DMAX、MAYA、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时,最接近于当前象素的右上方象素(xi+1,y i+1),x方向加1,d减 去1; ●而当d<0.5时,更接近于上方象素(x i,yi+1)。

为方便计算,令e=d-0.5,e的初值为-0.5,增量为1/k。 ●当e≥0时,取当前象素(x i,y i)的右上方象素(xi+1,y i+1),e减小1; ●而当e<0时,更接近于上方象素(xi,yi+1)。 voidBresenhamline (int x0,int y0,intx1, inty1,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(xp+0.5,y p+1)=a(x p+0.5)+b(yp+1)+c ●当d<0,M在Q点左侧,取右上方P2为下一个象素; ●当d>0,M在Q点右侧,取上方P1为下一个象素; ●当d=0,选P1或P2均可,约定取P1为下一个象素;

计算机图形学--绘制直线

计算机图形学 实验报告 专业:信息与计算科学 班级: 1002班 学号: 10080602** 姓名: *****

1.实验目的 熟悉CDC类的MoveTo()和LineTo()直线段绘制函数。 熟悉斜率-1

m_p1=CPoint(x,y); } void CLine::LineTo(CDC* pDC,double x,double y,double k) { m_p2=CPoint(x,y); CPoint p,t; pDC->SetMapMode(MM_LOMETRIC); pDC->SetViewportOrg(200,200); double d; if(k>=-1.0&&k<0.0) { if(m_p1.x >m_p2.x ) { t=m_p1; m_p1=m_p2; m_p2=t; } d=-0.5-k; for(p=m_p1;p.x SetPixel (p.x ,p.y ,RGB(0,0,255)); if(d>0) { p.y--; d-=1+k; } else { d-=k; } } } } void CTEXTView::OnDraw(CDC* pDC) { CTEXTDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CLine cline; cline.MoveTo (-200,300); cline.LineTo (pDC,200,-300,-0.3); }

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

第六章 1.请简述朗伯(Lambert )定律。 设物体表面在P 点法线为N ,从P 点指向光源的向量为 L ,两者夹角为θ,则点P 处漫反射光的强度为: I d =I p k d cos θ 式中 : I d ——表面漫反射光的亮度; I p ——入射光的光亮度; K d ——漫射系数(决定于表面材料及入射光的波长) 0≤K d ≤l ; θ——入射光线与法线间的夹角,0≤θ≤π/2。 并且,当物体表面垂直于入射光方向时(N 、L 方向一致)看上去最亮,而θ越来越大,接近90°时,则看上去越来越暗。 2.试写出实现哥罗德(Gouraud )明暗处理的算法伪代码。 deltaI = (i2 - i1) / (x2 - x1); for (xx = x1; xx < x2; xx++) { int offset = row * CScene.screenW + xx; if (z < CScene.zBuf[offset]) { CScene.zBuf[offset] = z; CScene.frameBuf[offset] = i1; } z += deltaZ; i1 += deltaI; } 3. 在Phong 模型n s p d p a a V R K I N L K I K I I )()(?+?+=中,三项分别表示何含义?公式 中的各个符号的含义指什么? 三项分别代表环境光、漫反射光和镜面反射光。a I 为环境光的反射光强,p I 为理想漫

反射光强,a K 为物体对环境光的反射系数,d K 为漫反射系数,s K 为镜面反射系数,n 为 高光指数,L 为光线方向,N 为法线方向,V 为视线方向,R 为光线的反射方向。 4.试写出实现Phong (冯)明暗方法的伪代码。 for (xx = x1; xx < x2; xx++) { int offset = row * CScene.screenW + xx; if (z < CScene.zBuf[offset]) { CScene.zBuf[offset] = z; pt = face.findPtInWC(u,v); float Ival = face.ptIntensity; CScene.frameBuf[offset] = Ival; } u += deltaU; z += deltaZ; p1.add(deltaPt); n1.add(deltaN); } 5.请简述自身阴影的生成方法。 自身阴影生成过程如下: (1)首先将视点置于光源位置,以光线照射方向作为观察方向,对在光照模型下的物体实施消隐算法,判别出在光照模型下的物体的“隐藏面”,并在数据文件中加以标识; (2)然后按实际的视点位置和观察方向,对物体实施消隐算法,生成真正消隐后的立体图形; (3)检索数据文件,核查消隐后生成的图形中,是否包含有在光照模型下的“隐藏面”。如有,则加以阴影符号标识这些面。 6.试写出光线跟踪算法的C 语言描述。 /*TraceRay 的三个参数分别是起点start ,跟踪方向direction 和已跟踪的深度depth ,返回的是光线direction 的颜色。*/ Color TraceRay(start,direction,depth) V ector start,direction; Int depth; { if (depth>MAX_DEPTH) color=black; else { 光线与物体求交,找出离start 最近的交点; if (无交点) color=背景色;

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

实验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的平移

3D计算机图形学综述

3D计算机图形学综述 摘要:计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。其中3D计算机图形学是计算机图形学理论最为火热的一门学科。其主要应用在计算机辅助设计、科学计算可视化、计算机动画、计算机艺术和虚拟现实等领域。 关键词:计算机图形学,三维图像,发展历史,研究热点,发展趋势 一、前言 图形是传递信息的最主要的媒体之一。人们使用图形来表达与交流思想有着悠久的历史,工程领域和各个学科分支都离不开图。它能使人们通观全局,一目了然。人的眼睛从一张图纸中吸收信息比从一张表格吸收信息快得多。若图形和数字互为补充,则可使人们更深刻的认识事物的本质及其内在联系。计算机图形处理使计算机在处理复杂问题后输出离散数据的同时,有可能以图形的形式输出器连续模型。计算机图形学得以飞速发展,其根本原因是图形为传递信息的最主要媒体之一。所有现代科学和工程领域几乎都可以采用计算机图形以加强信息的传递和理解。 计算机图形学作为计算机科学与技术学科的一个独立分支已经历了近40年的发展历程。一方面,作为一个学科,计算机图形学在图形基础算法、图形软件与图形硬件三方面取得了长足的进步,成为当代几乎所有科学和工程技术领域用来加强信息理解和传递的技术和工具。另一方面,计算机图形学的硬件和软件本身已发展成为一个巨大的产业,1996年总产值达500 亿美元,预计到2000年将达到1000亿美元。因此,当前全世界从事计算机图形学研究、应用和产业的队伍十分庞大,这也是为什么每年参加SIG-GRAPH年会的人数多达3~4万人的理由。 其中,3D 计算机图形就是利用计算机在平面里显示出三维图形,以满足人眼近大远小特性的需求,使图形具有更高的真实感和立体感。具体来说就是利用计算机将图形图像的色彩灰度等属性进行层次处理,使其凸出的部分亮度高,凹陷的部分亮度较低,并且制造相应的阴影。 计算机图形学在我国虽然起步较晚,然而它的发展却十分迅速。我国的主要高校都开设了多门计算机图形学的课程,并有一批从事图形学基础和应用研究的研究所。在浙江大学建立的计算机辅助与图形学国家重点实验室,已成为我国从事计算机图形学研究的重要基地之一。我国学者的论文从80年代后期开始进入国际一流的SIGGRAPH和Eurographics等学术会议和重要的学术刊物,标志着我国在这一领域的研究水平已接近或部分达到国际先进水平。 二、计算机图形学发展历史 计算机图形学是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。 1950年,第一台图形显示器作为美国麻省理工学院(MIT)旋风号—(Whirlwind)计算机的附件诞生了。该显示器用一个类似示波器的阴极射线管(CRT)来显示一些简单的图形。在整个50年代,只有晶体管计算机,用机器语言编程,主要应用于科学计算,为这些计算机置的图形设备仅具有输出功能。计算机图形学处于准备和酝酿时期并称之为:“被动式”图形学。 1963年,伊凡?苏泽兰在麻省理工学院发表了名为《画板》的博士论文,它标志着计

相关文档
最新文档