计算机图形学王汝传1-4章课后作业参考答案资料

计算机图形学王汝传1-4章课后作业参考答案资料
计算机图形学王汝传1-4章课后作业参考答案资料

第一章

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节。

8、简述三维图形生成和输出的流水线?

答:见课本P13页1.5.6.节。

9、向量图形和点阵图形之间的区别有哪些?

答:通过矢量法产生的图形称为矢量图形或者向量图形,用描点法产生的图形称为点阵图形。向量图形区别点阵图形的特点在于描述图形几何形状的数学模型及依据此模型生成几何图形的计算机命令。向量图形由各个基本图形构成,这就要求各个基本图形有各自独立的信息。如果用点阵图形来表示一个向量图形,构成向量图形的某个基本图形(如直线段、圆弧等)的所有点应有一个信息。因此,在描述一个基本图形时,同时要描述其相应的信息。向量图形最基本的优点是它本身是由精确的数据给出,所以可以充分利用各种输出图形设备的分辨率尽可能精确地输出图形。也正因为如此,向量图形的尺寸可以任意变化而不损失图形显示的质量。但是向量图形仅适合于描绘简单图形,而点阵图形可以描绘绚烂多彩的复杂图形。

10、什么是虚拟现实技术和可视化技术?

答:虚拟现实技术:利用计算机生成一种模拟环境,通过多种传感器和设备使用户“投入”到该环境中,实现用户和该环境直接进行交互的技术。例如模拟飞机驾驶舱。

可视化技术:通过对空间数据场构造中间几何因素,或用图形绘制技术在屏幕上产生二维图像。例如分子模型构造。

第二章

1、计算机图形系统有什么特点?有哪些主要功能?

答:课本2.1.1的图2.1展示了计算机图形系统的组成。计算机图形系统是为了支持应用程序,便于实现图形的输入输出的硬件和软件组合体。没有图形系统支持,就难以实现应用软件的开发。主要功能见课本2.1.2节。

2、计算机图形系统有哪几种?各有什么特点?

答:一种分类方法:交互式图形系统允许操作者以某种方式(对话方式或命令方式)来控制和操作图形生成过程,使得图形可以边生成、边显示、边修改,直至符合要求为止。而被动式绘图系统,图形在生成过程中,操作者无法对图形进行实时操作和控制,不具备交互功能,只提供各种图形命令或图形程序库,通过编程获得所需图形。

另一种分类方法:见课本2.1.3节,分为脱机绘图系统、联机绘图系统和交互式绘图系统。

3、阴极射线管由哪些部分组成?它们的功能分别是什么?

答:CRT由四部分组成:电子枪、聚焦系统、偏转系统和荧光屏,这四部分都在真空管内。电子枪由灯丝、阴极和控制栅极组成。灯丝加热阴极,阴极表面向外发射自由电子,控制栅控制自由电子是否向荧光屏发出,若允许电子通过,形成的电子流在到达屏幕的途中,被聚焦系统(电子透镜)聚焦成很窄的电子束,由偏转系统产生电子束的偏转电场(或磁场),使电子束左右、上下偏转,从而控制荧光屏上光点上下、左右运动,使得在指定时刻在屏幕指定位置上产生亮点。

4、光栅扫描显示器由哪些部分组成?它们的功能分别是什么?

答:见课本P21页图2.9所展示的组成框图,其后有各部分的介绍及功能。 5、对于分辨率为1024*1024的光栅系统,若每一像素用8位和12位二进制来表示存储信息,各需多大光栅存储容量以及显存?每一屏幕最多能显示多少颜色?若R ,G ,B 灰度都占8位,其显示颜色的总数是多少?

解:

1)每一像素用8位二进制来表示存储信息,所需容量为1024*1024*1=20

2(Byte )=1MB 彩色素:8

2=256(项)

2)若每一像素用12位二进制表示存储信息,所需容量为:1024*1024*1.5=1.5*20

2(Byte)

=1.5MB (由于显示卡的显存是按2的指数次倍增长的,因此所需显存为2M)

彩色素:12

2=4096( 项) 3)颜色总数:

28*

28*

28=

2

24

=16777216(种)

6、对于19英寸显示器,若X 和Y 两方向的分辨率相等,即1024*1024,那么每个像素点的直径是多少?

解:

210244.25*19=0.33(mm )或2

102419

=0.013(英寸)

7、对于分辨率为1024×768的光栅系统,若调色板设置为真彩色32位,此时需要显示一个

三维图形,各需要多大光栅存储容量以及显存?

答:调色板为真彩色32位,即意味着像素值的位长为32

所需容量为1024*768*32/8*3=9MB 因此所需要的显存为16M

8、GKS 有哪三种坐标系?它们有什么不同?试写出它们之间对应关系?

答:GKS 有3种不同的坐标系。第一种是供应用程序使用的实际世界坐标系统(World Coordinate System ,简称 WC );第二种是GKS 内部使用的规范设备坐标系(Normalized Device Coordinate ,简称NDC ),它的取值范围为[0,1],这是一种既与设备无关也与应用无关的坐标系;第三种是各工作站物理设备使用的设备坐标系(Device Coordinate System ,简称DC )。GKS 只支持二维对象的图形处理,因此上述3个坐标系都是二维坐标系。详见课本图3.28的描述。

9、GKS 中输入设备有哪6种逻辑功能?请各举出对应的物理设备。

答:见课本2.4.5.节。

10、当前主流的图形软件有哪些?

答:见课本2.6.3节。

第三章

1、编写画一正方形程序,并在其中用不同的颜色画15个正方形,每一个都比前一个小。

#include“graphics.h”

#includ e“conio.h”

void main()

{

int i,color=0,ls=0;

int j=700;

int gdriver=VGA;

int gmode=VGAHI;

initgraph(&gdriver,&gmode,””);

setbkcolor(15);

for(i=0;i<225;i=i+15, j=j-30)

{

setcolor(color);

bar(i,i,j,j);

color++;

ls++;

}

getch();

closegraph();

}

2、用不同的线形绘制题1中的图形

#include“graphics.h”

#include“conio.h”

void main()

{

int i,color=1,ls=0;

int j=700;

int gdriver=VGA;

gmode=VGAHI;

initgraph(&gdriver,&gmode,””);

setbkcolor(15);

for(i=0;i<=225;i=i+15, j=j-30)

{

setcolor(color);

//setlinestyle(ls%4,0,1); 或者

setlinestyle(4,ls,3);

rectangle(i,i,j,j);

setfillstyle(SOLID_FILL,color);

//floodfill(getmaxx()/2,getmaxy()/2,color); 此句会出现最后只用一种颜色填充的情况

color++;

ls++;

}

getch();

closegraph();

}

3、画一五颜六色的图(此例为画一个五颜六色的圆)

#include“graphics.h”

#include“conio.h”

void main()

{

int driver=DETECT,mode=0;

int i,start,end;

initgraph(&driver,&mode,””);

start=0;

end=20;

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

{

setfillstyle(SOLID_FILL,i);

pieslice(300,200,start,end,100);

start+=20;

end+=20;

}

getch();

restorecrtmode();

}

4、编写一辆自行车在一公路上由右至左快速行驶的程序。#include"stdlib.h"

#include"graphics.h"

#include"conio.h"

#include"stdio.h"

void main()

{

void *w;

int driver=DETECT,mode=0,i,start,end,j;

initgraph(&driver,&mode," ");

cleardevice();

setbkcolor(15);

setcolor(CGA-LIGHTGREEN);

start=0;

end=180;

circle(387,290,37);

circle(525,290,37);

line(404,217,398,230);

line(436,217,429,230);

line(398,230,429,230);

line(413,230,387,290);

line(387,290,525,290);

line(408,243,484,243);

line(387,290,484,243);

line(484,243,525,290);

line(444,290,484,243);

line(444,290,446,279);

line(444,290,443,300);

line(438,277,444,278);

line(435,300,451,301);

line(484,243,487,233);

line(472,233,502,233); //自行车基本轮廓的绘制

w=malloc(imagesize(350,200,562,327));

getimage(350,200,562,327,w);

for(i=350,j=0;i>0;i--,j--)

{

setfillstyle(EMPTY_FILL,0);

pieslice(387+j,290,start,end,37);

pieslice(525+j,290,start,end,37);

start+=40;

end+=40;

delay(5); //处于运动状态的自行车车轮的轴线的绘制

putimage(i-1,200,w,COPY_PUT);

line(2,327,562,327);

delay(10); //自行车行驶动画的实现

}

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

{

pieslice(37,290,start,end,37);

pieslice(175,290,start,end,37);

start+=40;

end+=40;

} //处于静止状态的自行车车轮的轴线的绘制

getch();

restorecrtmode();

closegraph();

}

5、试自行设计一个美术图案,并且用程序实现。

(略)

第四章

1. 为什么说直线生成算法是二维图形生成技术的基础?

答:无论什么复杂图形,它们都是由直线段和曲线段组成(三维图形经投影后最终变成了二维图形),而图形设备显示曲线段时,最终还是将曲线段转化成一系列直线段逼近表示的。因此,所有图形都可以看成是由直线段组成的。可参考课本图4.1。

2. 根据DDA画直线算法,遍一程序求(0,0)到(4,12)和(0,0,)到(12,4)的直线

#include “graphics.h”

#include “math.h”

void DDA_Line(int x1,int y1,int x2,int y2)

{

float increx,increy,x,y,length;

int i;

if(abs(x2-x1)>abs(y2-y1))

length=abs(x2-x1);

else

length=abs(y2-y1);

increx=(x2-x1)/length;

increy=(y2-y1)/length;

x=x1;

y=y1;

for(i=1;i<=length;i++)

{

putpixel(x,y,1);

x=x+increx;

y=y+increy;

}

}

void main()

{

int driver=DETECT,mode=0;

initgraph(&driver,&mode,””);

int x1=0,y1=0,x2=4,y2=12;

int x3=12,y3=4;

DDA_Line(x1,y1,x2,y2);

DDA_Line(x1,y1,x3,y3);

getch();

}

3. 根据逐点比较法编一程序画一段圆弧,其圆心为(0,0),圆弧两点为A(5,0)、B(0,5)

方法1:顺4象限

#include "graphics.h"

#include "stdio.h"

#include "conio.h"

void ZDBJ_ARC(float x0,float y0,float x1,float y1,float x2,float y2); void main()

{

int gdriver=CGA,mode=CGAC0;

initgraph(&gdriver,&mode," ");

ZDBJ_ARC(0,0,25,0,0,25);

getch();

closegraph();

}

void ZDBJ_ARC(float x0,float y0,float x1,float y1,float x2,float y2) {

float f=0.0,F;

float dx=1,dy=1;

while(abs(x1-x2)>1)

{

if(f>=0)

{

x1=x1-dx;

y1=y1;

putpixel(x1,y1,1);

f=f-2*dx*(x1-x0)+dx*dx;

}

else

{

x1=x1;

y1=y1+dy;

putpixel(x1,y1,1);

f=f+2*dy*(y1-y0)+dy*dy;

}

}

}

方法2:逆4象限

#include "graphics.h"

#include "stdlib.h"

#include "conio.h"

void ZDBJ_ARC(float x0,float y0,float x1,float y1,float x2,float y2); void main()

{

int gdriver=CGA,mode=CGAC0;

initgraph(&gdriver,&mode," ");

ZDBJ_ARC(0,0,0,25,25,0);

getch();

closegraph();

}

void ZDBJ_ARC(float x0,float y0,float x1,float y1,float x2,float y2) {

float f=0.0,F;

float dx=1,dy=1;

while(abs(y1-y2)>1)

{

if(f>0)

{

x1=x1;

y1=y1-dy;

putpixel(x1,y1,1);

f=f-2*dy*abs(y1-y0)+dy*dy;

}

else

{

x1=x1+dx;

y1=y1;

putpixel(x1,y1,1);

f=f+2*dx*abs(x1-x0)+dx*dx;

}

}

}

方法3:顺1象限

#include“graphics.h”//省略了图形初始化的步骤

#include“conio.h”

#include “math.h”

void main()

{

int x1=5,y1=0,x2=0,y2=5;

int x0=0,y0=0;

int R=sqrt((x2-x0)* (x2-x0)+(y2-y0)* (y2-y0));

int dx=abs(x2-x1);

int dy=abs(y2-y1);

int n=dx+dy;

putpixel(x2,y2,1);

int f;

int x=x2,y=y2;

for(int i=0;i

{

f=(x-x0)* (x-x0)+(y-y0)* (y-y0)-R*R;

if(f>=0)

putpixel(x,y--,1);

else

putpixel(x++,y,1);

}

getch();

closegraph();

} //另一种做法是采用课本P97页表4.2的公式

4. 编一程序用角度DDA法画一圆//以圆点为圆心,半径为20的圆

#include “graphics.h”//省略了图形初始化的步骤

#include “conio.h”

#include “math.h”

void main()

{

int x0=0,y0=0,R=20;

int x1,y1,xi,yi;

int N=R*8;

float a=2*3.14/N;

x1=20,y1=0;

for(int i=1;i<=N;i++)

{

xi=x0+R*cos(i*a)

yi=y0+R*sin(i*a);

line(x1,y1,xi,yi);

x1=xi;

y1=yi;

}

getch();

closegraph();

}

5. 如果线段端点坐标值不是整数,采用DDA算法产生的直线和将端点坐标值先取整后再用Bressenham算法产生的直线是否完全相同?为什么?能否扩充整数Bressenham算法使之能够处理当线段端点坐标值不是整数的情况。

答:不相同。因为DDA算法总是选择△x或者△y中的较大者作为步进的方向,不失一般性,假设选择x方向,则x方向每前进一个像素点,y方向前进的像素点个数应该在[0, 1]区间,但是由于采用了(向上或者向下或者四舍五入)取整运算,必然会导致某些像素点偏在

了真实直线的一侧。而Bressenham 算法每一步都会根据实际直线与网格的距离来决定下一个像素点的选择,因此所选像素点更加贴近于真实的直线。

可以扩充整数Bressenham 算法使之能够处理当线段端点坐标值不是整数的情况。

6. 若采用Bresenham 算法实现画圆,写出算法实现的具体流程(包括判别公式推导等等)。 答:给定圆心在原点,半径为R 的圆,其方程为x 2+y 2=R 2,构造函数F(x, y)= x 2+y 2-R 2,对于圆上的点,有F(x, y)=0;对于圆外的点,F(x, y)>0;而对于圆内的点,F(x, y)<0。

此处仅考虑如图所示的第一象限内x ∈??

2/,0R 的1/8圆弧,此时中点Bresenham 画圆算法要从(0, R)到(2/2/R R ,)顺时针地确定最佳逼近于该圆弧的像素序列。

由于最大位移方向为x ,因此其基本原理:每次x 方向上走一步,而y 方向上或减1或减0。假定当前与圆弧最近者已确定,为P(x i , y i ),那么下一候选像素只能是正右方的Pu(x i +1, y i )和右下方的Pd(x i +1, y i -1)。到底选取哪一个候选点依旧用中点进行判别。

假设M 是Pu 和Pd 的中点,即有M(x i +1, y i -0.5),则当F(x M , y M )<0,M 在圆内,这说明Pu 离圆弧更近,应取其为下一个像素点;当F(x M , y M )>0,M 在圆外,说明Pd 离圆弧更近;当F(x M , y M )=0,则约定取Pd 。

构造判别式d i =F(x M , y M )= F(x i +1, y i -0.5)=(x i +1)2+(y i -0.5)2- R 2 (1) 当d i <0,取Pu(x i +1, y i ),计算下一步的的判别式

d i+1=F(x u , y u )= F(x i +2, y i -0.5)= (x i +2)2+(y i -0.5)2- R 2= d i +2x i +3 所以沿正右方向,d i 的增量为2x i +3。

(2) 当d i ≥0,取Pd(x i +1, y i +1),计算下一步的的判别式

d i+1=F(x d , y d )= F(x i +2, y i -1.5)= (x i +2)2+(y i -1.5)2- R 2= d i +2(x i -y i )+5 所以沿右下方向,d i 的增量为2(x i -y i )+5。

显然,所绘制圆弧段的第一个像素为P 0(0, R),因此判别式d 0的初始值为1.25-R ,可以令d ’=d-0.25来摆脱小数运算,则判别式d i <0对应于d i <-0.25,由于d 始终是整数,d i <-0.25等价于d i <0。

7. 已知4个型值点(1.0,2.0),(2.5,3.5),(4.0,4.5),(5.0,4.0),求各段三次样条曲线。Si (X )(i=1,2,3),设边界条件为抛物线端

解:m1=x2-x1=1.5, m2=x3-x2=1.5, m3=x4-x3=1; λ2=m2/(m2+m1)=0.5; u2=m1/(m1+m2)=0.5; λ3=m3/(m2+m3)=0.4;

u3=m2/(m2+m3)=0.6;

R2=3*[u2*(y3-y2)/m2+λ2*(y2-y1)/m1]=2.5;

R3=3*[u3*(y4-y3)/m3+λ3*(y3-y2)/m2]=-0.1;

于是有

0.5b1+2b2+0.5b3=2.5 (1)

0.4b2+2b3+0.6b4=-0.1 (2)

又边界抛物线端

b1+b2=2 (3)

b3+b4=-1 (4)

由(1),(2),(3),(4)得

b1=39/38, b2=37/38, b3=3/38, b4=-41/38

从而

c1=-1/57;

d1=0;

c2=-1/57;

d2=-64/513;

c3=-11/19;

d3=0;

故可得

s1(x)=2+39/38(x-1)-1/57(x-1)2 x∈[1.0, 2.5]

s2(x)=3.5+37/38(x-2.5)-1/57(x-2.5)2-64/513(x-2.5)3x∈[2.5, 4.0]

s3(x)=4.5+3/38(x-4)-11/19(x-4)2 x∈[4.0, 5.0]

8. 已知4个型值点坐标值P0(5,5)、P1(10,15)、P2(15,10)、P3(10,5),绘一个三次贝塞尔曲线。

解:

用矩阵表示为

p(t)=[t3 t2 t 1]P[p0 p1 p2 p3]T

P= -1 3 -3 1

3 -6 3 0

-3 3 0 0

1 0 0 0

p(0)=[5, 5]

p(0.15)=[7.215, 8.536]

p(0.35)=[9.83, 10.64]

p(0.5)=[11.25, 10.625]

p(0.65)=[12.015, 9.615]

p(0.85)=[11.606, 7.198]

p(1)=[10, 5]

将上面各点相连可以画出三次贝塞尔曲线。

9. 编写一个绘制Bezier曲线的程序。

该程序根据以下数据点[x, y]:[50, 100] [80, 230] [100, 270] [140, 160] [180, 50] [240, 65] [270, 120] [330, 230] [380, 230] [430, 150]计算出结果,并实现三段首尾相接的三次贝塞尔曲线在屏幕上显示的功能,采用了C++语言实现;

#include "graphics.h"

#include "conio.h"

#include "stdio.h"

typedef struct

{

double x,y;

} DPOINT; //定义结构体

class Bezier //定义Bezier类

{

private:

DPOINT* bP;

int m_maxIndex;

void drawFrame();

void drawCurve();

void drawCurve(int p0,int p1,int p2,int p3);

public:

Bezier(DPOINT* p,int len); //定义构造函数

void draw();

};

Bezier::Bezier(DPOINT* p,int len) //构造函数的实现

{

this ->bP=p;

m_maxIndex=len-1;

}

void Bezier::draw() //通过公有函数调用私有函数

{

drawFrame();

drawCurve();

}

void Bezier::drawFrame() //其功能是绘制出多边形和各个端点

{

setcolor(12);

for(int i=0;i

{

line( bP[i].x, bP[i].y, bP[i+1].x, bP[i+1].y ); //绘制多边形

circle(bP[i].x, bP[i].y,5); //绘制各个端点

}

circle(bP[m_maxIndex].x,bP[m_maxIndex].y,5);

}

void Bezier::drawCurve() //实现多段Bezier曲线绘制的功能

{

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

{

drawCurve(i,i+1,i+2,i+3);

}

}

void Bezier::drawCurve(int p0,int p1,int p2,int p3) //实现绘制某一段Bezier曲线的功能

{

double tmpx=0.0;

double tmpy=0.0;

double t=0.0;

for(;t<=1.0;t+=0.001)

{

tmpx=(-bP[p0].x+3*bP[p1].x-3*bP[p2].x+bP[p3].x)*t*t*t+(3*bP[p0].x-6*bP[p1].x+3*bP[p2].x)* t*t+(-3*bP[p0].x+3*bP[p1].x)*t+bP[p0].x;

tmpy=(-bP[p0].y+3*bP[p1].y-3*bP[p2].y+bP[p3].y)*t*t*t+(3*bP[p0].y-6*bP[p1].y+3*bP[p2].y)* t*t+(-3*bP[p0].y+3*bP[p1].y)*t+bP[p0].y;

putpixel(tmpx,tmpy,3);

}

}

void main() //主函数的实现

{

int graphdriver=DETECT,graphmode;

initgraph(&graphdriver,&graphmode,"E:\\tc3\\bgi");

setbkcolor(15);

DPOINT* p;

p=new DPOINT[10];

p[0].x=50.0;

p[0].y=100.0;

p[1].x=80.0;

p[1].y=230.0;

p[2].x=100.0;

p[2].y=270.0;

p[3].x=140.0;

p[3].y=160.0;

p[4].x=180.0;

p[4].y=50.0;

p[5].x=240.0;

p[5].y=65.0; p[6].x=270.0; p[6].y=120.0; p[7].x=330.0; p[7].y=230.0; p[8].x=380.0; p[8].y=230.0; p[9].x=430.0; p[9].y=150.0; Bezier bzr(p,10); bzr.draw(); delete p; getch(); closegraph();

}

10. 编写一个绘制B 样条曲线的程序。

该程序根据以下数据点[x, y]:P0[50, 130] P1[120, 40] P2[100, 270]和P3[140, 160]计算出结果,并实现两段首尾相接的两次B 样条曲线在屏幕上显示的功能,采用了C++语言实现;

将已知点代入式(4-19)可得两段两次B 样条曲线方程:

P 1(t )= 2

1

[ t 2 t 1]?????-1

21

122- ????

?

001?????10012050

????

?27040130 =[-45 160]t 2 +[70 -90]t +[85 85]

P 2(t )=

2

1[ t 2

t 1]?????-1

21

122-

????

?001?????140100120 ????

?60127040 = [30 -170]t 2 +[-20

230]t +[110 155]

#include "graphics.h" #include "conio.h" #include "stdio.h" typedef struct { double x,y;

} DPOINT; //定义结构体

class B_Spline //定义B 样条曲线类 { private: DPOINT* bP;

int m_maxIndex; //有多少个型值点

void drawFrame();

void drawCurve();

void drawCurve(int p0,int p1,int p2);

public:

B_Spline(DPOINT* p,int len); //定义构造函数

void draw();

};

B_Spline::B_Spline(DPOINT* p,int len) //构造函数的实现

{

this ->bP=p;

m_maxIndex=len;

}

void B_Spline::draw() //通过公有函数调用私有函数

{

drawFrame();

drawCurve();

}

void B_Spline::drawFrame() //其功能是绘制出多边形和各个端点

{

setcolor(12);

for(int i=0;i

{

line( bP[i].x, bP[i].y, bP[i+1].x, bP[i+1].y ); //绘制多边形

circle(bP[i].x, bP[i].y,5); //绘制多边形各个端点

}

circle(bP[m_maxIndex-1].x,bP[m_maxIndex-1].y,5);

}

void B_Spline::drawCurve() //实现多段B样条曲线绘制的功能

{

for(int i=0;i

{

drawCurve(i,i+1,i+2);

}

}

void B_Spline::drawCurve(int p0,int p1,int p2) //实现绘制某一段Bezier曲线的功能{

double tmpx=0.0;

double tmpy=0.0;

double t=0.0;

for(;t<=1.0;t+=0.001)

{

tmpx=(0.5*bP[p0].x-bP[p1].x+0.5*bP[p2].x)*t*t+(-bP[p0].x+bP[p1].x)*t+0.5*bP[p0].x+0.5*bP[ p1].x;

tmpy=(0.5*bP[p0].y-bP[p1].y+0.5*bP[p2].y)*t*t+(-bP[p0].y+bP[p1].y)*t+0.5*bP[p0].y+0.5*bP[p 1].y;

putpixel(tmpx,tmpy,3);

}

}

void main() //主函数的实现

{

int graphdriver=DETECT,graphmode;

initgraph(&graphdriver,&graphmode,""); //图形初始化

setbkcolor(15);

DPOINT* p;

p=new DPOINT[4];

p[0].x=50.0;

p[0].y=130.0;

p[1].x=120.0;

p[1].y=40.0;

p[2].x=190.0;

p[2].y=130.0;

p[3].x=260.0;

p[3].y=40.0;

B_Spline b_sp(p,4);

b_sp.draw();

delete p;

getch();

closegraph();

}

11. 简述NURBS曲线产生的背景和特点?

答:NURBS曲线具有局部可调性、凸包性、几何和透视投影变换不变性等等,它采用有理参数多项式可以精确表示圆锥曲线、二次曲面等,对于几何造型算法提供了思路。

12. 将下列数据

X 2 6 10 12 14 16

Y 3 8 11 13 15 17

按最小二乘法曲线拟合,分别求一次和二次多项式曲线,拟合以上数据并画图表示。

解:如下表所示:

一次多项式的情形:

60a +601a =67 0a =1.4608 600a +7361a =802 1a =0.9706 所求多项式为y=f(x)=1.4608+0.9706x 二次多项式的情形:

60a +601a +7362a =67 0a =1.0793 600a +7361a +97922a =802 1a =1.0921 7360a +97921a +1360002a =10564 2a =-0.006796 所求多项式为y=f(x)=1.0793+1.0921x-0.006796x 2

13. 设五边形的五个顶点坐标为(10, 10),(15, 5),(12, 5),(8, 2)和(4, 5),利用多边形区域填充算法,编一程序生成一个实心图。

解:假设以上五个顶点依次对应编号A-B-C-D-E ,首先计算得到ET 表:

计算机图形学习题分析

第一章绪论 1、计算机图形学、图形处理与模式识别本质区别是什么?请各举一例说明。 解:计算机图形学是研究根据给定的描述,用计算机生成相应的图形、图像所生成的图形、图像可以显示屏幕上、硬拷贝输出或作为数据集存在计算机中的学科。计算机图形学研究的是从数据描述到图形生成的过程。例如计算机动画。 图形处理是利用计算机对原来存在物体的映像进行分析处理,然后再现图像。例如工业中射线探伤。 模式识别是指计算机对图形信息进行识别和分析描述,是从图形(图像)到描述的表达过程。例如邮件分捡设备扫描信件上手写的邮政编码,并将编码用图像复原成数字。 2、举3个例子说明计算机图形学的应用。 解:①事务管理中的交互绘图 应用图形学最多的领域之一是绘制事务管理中的各种图形。通过从简明的形式呈现出数据的模型和趋势以增加对复杂现象的理解,并促使决策的制定。 ②地理信息系统 地理信息系统是建立在地理图形基础上的信息管理系统。利用计算机图形生成技术可以绘制地理的、地质的以及其他自然现象的高精度勘探、测量图形。 ③计算机动画 用图形学的方法产生动画片,其形象逼真、生动,轻而易举地解决了人工绘图时难以解决的问题,大大提高了工作效率。 3、计算机生成图形的方法有哪些? 解:计算机生成图形的方法有两种:矢量法和描点法。 ①矢量法:在显示屏上先给定一系列坐标点,然后控制电子束在屏幕上按一定的顺序扫描,逐个“点亮”临近两点间的短失线,从而得到一条近似的曲线。尽管显示器产生的只是一些短直线的线段,但当直线段很短时,连成的曲线看起来还是光滑的。 (2)描点法 4.什么叫虚拟现实技术和可视化? 解:虚拟现实技术: 利用计算机生成一种模拟环境,通过多种传感器和设备使用户“投入”到该环境中 ,实现用户和该环境直接进行交互的技术。例如模拟飞机驾驶舱。 可视化技术: 通过对空间数据场构造中间几何因素,或用图形绘制技术在屏幕上产生二维图象。例如分子模型构造。 5.对于分辨绿为1024*1024的光栅系统,若每一像素咏8位和12位二进制来表示存储信息,各需多大光栅存储容量?每一屏幕最多能显示多少颜色?若R,G,B灰度都占8位,其显示颜色的总数是多少? 解: 1) 每一像素用8位二进制来表示存储信息,所需容量为1024*1024*1=220(byte)=1MB

计算机图形学作业

计算机图形学第一次作业 计算机X班XXX 1XXX010XXX 1.你是否想用图形学的有关知识去解决一两个实际问题?你想解决的问题是什么?考虑如何解决? 答:我希望可以解决的有设计汽车外壳和制作动画。 解决方法:(1)汽车外壳 使用3D MAX/AutoCAD软件进行设计。 (2)制作动画 利用动画制作软件(3D MAX)在计算机上制作动画 2.某彩色图形显示系统,CRT显示器的分辨率为1024×1024,它可以从2^17次方种颜色中选择出2^15次方来显示,其帧缓冲器的容量应该如何计算?查色表的长度和宽度应为多少? 解:16b==2B 因为分辨率为1024x1024 所以1024*1024*2B=2MB 3.采用Bresenham画线算法,绘出起点(1,3),终点为(9,18)的直线段。 解: void DrawBresenhamline(int x0, int y0, int x1, int y1) { int dx = x1 - x0;//x偏移量 int dy = y1 - y0;//y偏移量 int ux = dx >0 ?1:-1;//x伸展方向 int uy = dx >0 ?1:-1;//y伸展方向 int dx2 = dx <<1;//x偏移量乘2 int dy2 = dy <<1;//y偏移量乘2 if(abs(dx)>abs(dy)) {//以x为增量方向计算 int e = -dx; //e = -0.5 * 2 * dx,把e 用2 * dx* e替换 int x = x0;//起点x坐标 int y = y0;//起点y坐标 for (x = x0; x < x1;x+=ux) { printf ("%d,%d\n",x, y); e=e + dy2;//来自2*e*dx= 2*e*dx + 2dy (原来是e = e + k) if (e > 0)//e是整数且大于0时表示要取右上的点(否则是右下的点) { y += uy; e= e - dx2;//2*e*dx = 2*e*dx - 2*dx (原来是e = e -1) } } } else {//以y为增量方向计算

计算机图形学期末大作业3D建模

深圳大学实验报告 课程名称:计算图形学 实验名称:3D建模和真实感图形绘制 学院:计算机与软件学院专业:计算机科学与技术报告人:学号:2012150 班级: 1 同组人:无 指导教师:周虹 实验时间:2014年11、12月 实验报告提交时间:2014/12/28 教务处制

一.实验目的 1、使用OpenGL创建和动画你自己设计的角色。 2、熟悉3D层次建模和转换。 二.实验步骤 1、打开VC6.0打开工作空间modeler.dsw, 可以看到工程的所有工程都包含进来了。找到sample.cpp并打开。 2、找到sample.cpp中的draw函数,在这个函数中绘制图形。首先,在一对glPushMatrix()和glPopMatrix()之间用glTranslated函数确定绘制图形坐标系的原点(以下图形的绘制均用到这对函数,后面不再赘述)。然后用三角形绘制平行四边形的地板,用

setDiffuseColor函数设定不同的颜色参数。 主要代码如下: 2、为模型绘制背景,即三角旋转阶梯。同样的,用三角形绘制,使得整个画面看起来像舞台般宽敞华丽。

截断): 拼接柱子,并且颜色设置成黄白相间,使气氛柔和淡雅。

4、柱子一般都有柱台的。此处用长方体作为柱台,大气得体。颜色选择淡蓝色,正好跟柱子的颜色相辉映。 主要代码如下:

5、俗话说好事成双。在同一个层次中,我再绘制了同样的柱子和柱台,使画面呈现对称美。 6、柱子是空心的,得给它加个“盖子”。为了统一柱子的结构,此处依然用三角形拼接柱子的尖顶,尖顶作为柱子的下一个层次。如图:

计算机图形学作业-Display-答案分析

计算机图形学作业I 一.判断题 1.齐次坐标提供了坐标系变换的有效方法,但仍然无法表示无穷远的点;(×) 2.若要对某点进行比例、旋转变换,首先需要将坐标原点平移至该点,在新的坐标系下做比例或旋转变换,然后在将原点平移回去;(√) 3. 相似变换是刚体变换加上等比缩放变换;(√) 4. 保距变换是刚体变换加上镜面反射;(√) 5. 射影变换保持直线性,但不保持平行性。(√) 二、填空题 1.透视投影的视见体为截头四棱锥形状;平行投影的视见体为长方体形状。 2.字符的图形表示可以分为矢量表示和点阵表示两种形式。 3.仿射变换保持直线的平行性 4.刚体变换保持长度 5.保角变换保持向量的角度 三、单项选择题 1. 分辨率为1024×1024的显示器各需要多少字节位平面数为24的帧缓存?( D) A. 512KB; B. 1MB; C. 2MB; D. 3MB ; 2. 在透视投影中,主灭点的最多个数是( C ) A 1; B 2; C 3; D 4 3. 以下关于图形变换的论述不正确的是( B ) A. 平移变换不改变图形大小和形状,只改变图形位置; B. 拓扑关系不变的几何变换不改变图形的连接关系和平行关系; C.旋转变换后各图形部分间的线性关系和角度关系不变,变换后直线的长度不变 D.错切变换虽然可引起图形角度的改变,但不会发生图形畸变; 4. 使用下列二维图形变换矩阵:将产生变换的结果为( D ) A. 图形放大2倍; B. 图形放大2倍,同时沿X、Y1个绘图单位; C.沿X坐标轴方向各移动2个绘图单位; D.沿X坐标轴方向放大2倍,同时沿X、Y坐标轴方向各平移1个绘图单位。 5. 下列有关投影的叙述语句中,正确的论述为(B ) A. 透视投影具有近小远大的特点; B. 平行投影的投影中心到投影面距离是无限的; C. 透视投影变换中,一组平行于投影面的线的投影产生一个灭点; T =

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

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

《数字图像处理》复习大作业及答案

2014年上学期《数字图像处理》复习大作业及参考答案 ===================================================== 一、选择题(共20题) 1、采用幂次变换进行灰度变换时,当幂次取大于1时,该变换是针对如下哪一类图像进行增 强。(B) A 图像整体偏暗 B 图像整体偏亮 C图像细节淹没在暗背景中D图像同时存在过亮和过暗背景 2、图像灰度方差说明了图像哪一个属性。(B ) A 平均灰度 B 图像对比度 C 图像整体亮度D图像细节 3、计算机显示器主要采用哪一种彩色模型( A ) A、RGB B、CMY或CMYK C、HSI D、HSV 4、采用模板[-1 1]T主要检测( A )方向的边缘。 A.水平 B.45? C.垂直 D.135? 5、下列算法中属于图象锐化处理的是:( C ) A.低通滤波 B.加权平均法 C.高通滤波 D. 中值滤波 6、维纳滤波器通常用于( C ) A、去噪 B、减小图像动态范围 C、复原图像 D、平滑图像 7、彩色图像增强时, C 处理可以采用RGB彩色模型。 A. 直方图均衡化 B. 同态滤波 C. 加权均值滤波 D. 中值滤波 8、__B__滤波器在对图像复原过程中需要计算噪声功率谱和图像功率谱。 A. 逆滤波 B. 维纳滤波 C. 约束最小二乘滤波 D. 同态滤波 9、高通滤波后的图像通常较暗,为改善这种情况,将高通滤波器的转移函数加上一常数量以 便引入一些低频分量。这样的滤波器叫B。 A. 巴特沃斯高通滤波器 B. 高频提升滤波器 C. 高频加强滤波器 D. 理想高通滤波器 10、图象与灰度直方图间的对应关系是 B __ A.一一对应 B.多对一 C.一对多 D.都不 11、下列算法中属于图象锐化处理的是:C A.低通滤波 B.加权平均法 C.高通滤 D. 中值滤波 12、一幅256*256的图像,若灰度级数为16,则存储它所需的比特数是:( A ) A、256K B、512K C、1M C、2M 13、噪声有以下某一种特性( D ) A、只含有高频分量 B、其频率总覆盖整个频谱 C、等宽的频率间隔内有相同的能量 D、总有一定的随机性 14. 利用直方图取单阈值方法进行图像分割时:(B) a.图像中应仅有一个目标 b.图像直方图应有两个峰 c.图像中目标和背景应一样大 d. 图像中目标灰度应比背景大 15. 在单变量变换增强中,最容易让人感到图像内容发生变化的是( C )

计算机图形学作业-Display-答案

计算机图形学作业 I 一.判断题 1.齐次坐标提供了坐标系变换的有效方法,但仍然无法表示无穷远的点;(×) 2.若要对某点进行比例、旋转变换,首先需要将坐标原点平移至该点,在新的坐标系下做比例或旋转变换,然后在将原点平移回去;(√) 3. 相似变换是刚体变换加上等比缩放变换;(√) 4. 保距变换是刚体变换加上镜面反射;(√) 5. 射影变换保持直线性,但不保持平行性。(√) 二、填空题 1.透视投影的视见体为截头四棱锥形状;平行投影的视见体为长方体形状。 2.字符的图形表示可以分为矢量表示和点阵表示两种形式。 3.仿射变换保持直线的平行性 4.刚体变换保持长度 5.保角变换保持向量的角度 三、单项选择题 1. 分辨率为1024×1024的显示器各需要多少字节位平面数为24的帧缓存?( D) A. 512KB; B. 1MB; C. 2MB; D. 3MB ; 2. 在透视投影中,主灭点的最多个数是( C ) A 1; B 2; C 3; D 4 3. 以下关于图形变换的论述不正确的是( B ) A. 平移变换不改变图形大小和形状,只改变图形位置; B. 拓扑关系不变的几何变换不改变图形的连接关系和平行关系; C.旋转变换后各图形部分间的线性关系和角度关系不变,变换后直线的长度不变 D.错切变换虽然可引起图形角度的改变,但不会发生图形畸变; 4. 使用下列二维图形变换矩阵:将产生变换的结果为( D ) A. 图形放大2倍; B. 图形放大2倍,同时沿X、Y1个绘图单位; C.沿X坐标轴方向各移动2个绘图单位; D.沿X坐标轴方向放大2倍,同时沿X、Y坐标轴方向各平移1个绘图单位。 5. 下列有关投影的叙述语句中,正确的论述为(B ) A. 透视投影具有近小远大的特点; B. 平行投影的投影中心到投影面距离是无限的; C. 透视投影变换中,一组平行于投影面的线的投影产生一个灭点; T =

计算机图形学第三章答案

1. voidLine_Midpoint(int x1, int y1, int x2, int y2, int color) { int x = x1, y = y1; int a = y1 - y2, b = x2 - x1; int cx = (b >= 0 ? 1 : (b = -b, -1)); int cy = (a <= 0 ? 1 : (a = -a, -1)); putpixel(x, y, color); int d, d1, d2; if (-a <= b) // 斜率绝对值 <= 1 { d = 2 * a + b; d1 = 2 * a; d2 = 2 * (a + b); while(x != x2) { if (d < 0) y += cy, d += d2; else d += d1; x += cx; putpixel(x, y, color); } } else // 斜率绝对值 > 1 { d = 2 * b + a; d1 = 2 * b; d2 = 2 * (a + b); while(y != y2) { if(d < 0) d += d1; else x += cx, d += d2; y += cy; putpixel(x, y, color); } } } 7 void Line_Midpoint(int x1, int y1, int x2, int y2, int color, int flag) { intx,y; if(flag==0) { x0=point.x; y0=point.y; flag=1; } else { flag=0; x1=point.x; y1=point.y; a=y0-y1;

计算机图形学期末编程大作业

完成下列程序的设计、调试与及设计说明书: 一、实现直线、圆的生成 要求:(1)算法不限;(2)直线的端点、圆的圆心、半径由用户实时输入;(3)用所实现的直线、圆的生成程序实现一个任意图形的绘制。 二、实现区域填充(多边形区域)或影线填充 要求:(1)区域自行指定,至少应有一个内环(2)算法:计算机相关专业的要求实现图案填充,机械相关专业的要求实现影线填充。 三、直线段裁剪算法的实现 要求:完成对一个指定图形(见图)的裁剪,先在图形 区显示原始图形及窗口位置,然后将裁剪后图形的显示在图 形区的另一侧。 四、凸多面体消隐的实现(外法线法) 要求:立体数据自定。 五、样条曲线的实现 要求:实现B样条曲线,并能通过交互输入点的形式完成曲 线绘制。 注意:要反求控制点 六、平时成绩(30分) 要求: 1、语言不限,可以是所熟悉的如何一种语言。 2、须提交的内容包括:源程序(电子版)、可执行程序,设计说明书(电子版及打印版)。 3、程序须经教师运行测试通过。 4、设计说明书B5页面打印,内容包括:算法与数据结构,程序流程说明及变量,程序运行情况分析及结果截图,程序使用说明。

题目一:实现直线、圆的生成 要求:(1)算法不限;(2)直线的端点、圆的圆心、半径由用户实时输入;(3)用所实现的直线、圆的生成程序实现一个任意图形的绘制。 1.程序使用说明. 1)概述 该程序以Visual C++6.0作为编程开发工具,利用其中的MFC(Microsoft Foundation Classes)库作为应用程序的框架,进行图形的编程绘制,有良好的用户操作界面和简洁的操作方法。 执行该程序,界面如下图。 图1-1 程序运行界面 图形绘制功能的实现,主要是通过点选菜单栏中的对应菜单项来实现。主要功能有:图形颜色的选择、绘制直线、绘制圆。 2)具体操作说明: a.颜色的选择. 鼠标左键单击菜单项,便会弹出颜色编辑对话框,如图2。

计算机图形学作业答案

计算机图形学作业答案 第一章序论 第二章图形系统 1.什么是图像的分辨率? 解答:在水平和垂直方向上每单位长度(如英寸)所包含的像素点的数目。 2.计算在240像素/英寸下640×480图像的大小。 解答:(640/240)×(480/240)或者(8/3)×2英寸。 3.计算有512×512像素的2×2英寸图像的分辨率。 解答:512/2或256像素/英寸。 第三章二维图形生成技术 1.一条直线的两个端点是(0,0)和(6,18),计算x从0变到6时y所对应的值,并画出结果。 解答:由于直线的方程没有给出,所以必须找到直线的方程。下面是寻找直线方程(y =mx+b)的过程。首先寻找斜率: m =⊿y/⊿x =(y 2-y 1 )/(x 2 -x 1 )=(18-0)/(6-0) = 3 接着b在y轴的截距可以代入方程y=3x+b求出 0=3(0)+b。因此b=0,所以直线方程为y=3x。 2.使用斜截式方程画斜率介于0°和45°之间的直线的步骤是什么? 解答: (1)计算dx:dx=x 2-x 1 。 (2)计算dy:dy=y 2-y 1 。 (3)计算m:m=dy/dx。 (4)计算b: b=y 1-m×x 1 (5)设置左下方的端点坐标为(x,y),同时将x end 设为x的最大值。如果 dx < 0,则x=x 2、y=y 2 和x end =x 1 。如果dx > 0,那么x=x 1 、y=y 1 和x end =x 2 。 (6)测试整条线是否已经画完,如果x > x end 就停止。 (7)在当前的(x,y)坐标画一个点。 (8)增加x:x=x+1。 (9)根据方程y=mx+b计算下一个y值。 (10)转到步骤(6)。 3.请用伪代码程序描述使用斜截式方程画一条斜率介于45°和-45°(即|m|>1)之间的直线所需的步骤。

计算机图形学作业题

计算机图形学作业题 1. 计算机中由图形的形状参数(方程或分析表达式的系数,线段的端点坐标等)加属性参数(颜色、线型等)来表示图形称图形的参数表示;枚举出图形中所有的点称图形的点阵表示,简称为图像(数字图像) 2. 什么是计算机图形学?计算机图形学有哪些研究内容? 3. 计算机图形学有哪些应用领域? 4. 计算机图形学有哪些相关学科分支?它们的相互关系是怎样的? 5. 图形系统的软件系统由哪些软件组成?举例说明。 6. 了解计算机图形系统的硬件。 7. 什么是显示器的分辨率、纵横比、刷新率? 8. 什么是像素、分辨率、颜色数?分辨率、颜色数与显存的关系? 分辨率M ?N 、颜色个数K 与显存大小V 的关系: 例:分辨率为1024像素/行?768行/ 帧,每像素24位(bit )颜色(224种颜色)的显示器,所需的显存为:1024?768?24位(bit )=1024?768?24/8=2359296字节(byte )。或:每像素16777216种颜色(24位真彩色),1024?768的分辨率,所需显存为:1024?768?log 216777216位显存=2359296字节显存。 9. 什么是图元的生成?分别列举两种直线和圆扫描转换算法。 10. OpenGL 由核心库GL(Graphics Library)和实用函数库GLU(Graphics Library Utilities)两个库组成。 11. 区域填充算法要求区域是连通的,因为只有在连通区域中,才可能将种子点的颜色扩展到区域内的其它点。 区域可分为 向连通区域和 向连通区域。区域填充算法有 填充算法和 填充算法。 12. 字符生成有哪两种方式? 点阵式(bitmap fonts 点阵字——raster 光栅方法):采用逐位映射的方式得到字符的点阵和编码——字模位点阵。 笔画式(outline fonts 笔画字——stroke 方法):将字符笔画分解为线段,以线段端点坐标为字符字模的编码。 13. 图形信息包含图形的 和 。 14. 什么是图形变换?图形变换只改变图形的 不改变图形的 。图形变换包括 和 ( )。 15. 熟练掌握二维图形的齐次坐标表示、平移、比例、旋转、对称变换以及复合变换的方法和原则。 16. 图形的几何变换包括 、 、 、 、 ;图形连续作一次以上的几何变换称 变换。 17. 试写出图示多边形绕点A(xo,yo)旋转的变换矩阵。要求写出求解过程及结果。 18. 试写出针对固定参考点、任意方向的比例变换矩阵。 19. 试写出对任意直线y=mx+b 的对称变换矩阵。 20. 什么是窗口?什么是视区?什么是观察变换? 21. 简述二维观察变换的流程。 22. 试述窗口到视区的变换步骤,并推出变换矩阵。 ??—(位) —K N M V 2log ??≥

东南大学自动化学院计算机图形学大作业

计算机图形学大作业 ——程序设计 用简单光照模型显示一系列小球在不同参数情况下的镜面反射效果 学号:08009223 姓名:贺国睿 专业:自动化日期:2012.5.26

1 设计目标和要求 ?用简单光照模型显示一系列小球在不同参数情况下的镜面反射效果; 2 算法原理介绍 2.1光源分析 在现实生活中的物体,要有光照存在才可以被看到。物体通过自身发光以及反射光进入人眼,物体才能在人眼中成像。如果没有任何的光,人眼将观察不到任何东西,一片漆黑。 在光照中首先是光源,要有光源才能产生光线,才有以后的一系列反射、折射、散射等效果。不同的物体的表面物理属性不同,所以相同的光线照射到不同表面属性的物体表面会产生不同的效果,发生漫反射,镜面反射的比例各不相同,有的属于半透明的物体还有折射效果。这些不同的物体表面物理属性属于材质的范畴。 除了材质以外,物体表面还有各种图案效果,这就是纹理。光线在空中穿行的时候,还会有更多复杂的效果。 在现实中,光源的类型很多,而且有的光源不能简单的用一种模型来描述,而是具有多种不同类型光源特点。几种基本的光源类型是:点光源、无穷远光源、方向光源和环境光。 点光源:光线从光源点向四面八方发散,发光的恒星(如太阳)、发光的灯泡一般使用该光源模型模拟,是最简单的光源。 无穷远光源:所有的光线都平行的从一个方向过来,当发光体(如太阳)离渲染的场景很远可以认为是无穷远时,一般使用该光源模型进行模拟。 方向光源:光线沿着一个方向在特定角度范围内逐渐发散开。现实世界中的车灯,手电筒一般使用该光源模型进行模拟。 环境光源:光线从各个地方以各个角度投射到场景中所有物体表面,找不到光源的确切位置。现实世界中不存在这样的光源,一般使用该光源模型来模拟点光源、无穷远光源、方向光源在物体表面经过许多次反射后的情况,环境光源照亮所有物体的所有面。 这四种基本的光源模型,只能近似的描述光源,不可能做到非常逼真。在现实中,一束光线照射到物体表面发生反射后,再照射到另外的物体的表面,如此循环反复这才是环境光的真正情况。这个过程是个无限次反射的过程,计算机无法处理无限的问题,所以采取了简单的近似处理。而且环境光源在反射过程中,上一次反射所带的颜色会影响下次反射所照物体的颜色,并且无限的重复。光线追踪算法是一种好得多的近似描述,但也仅仅是近似描述,只是近似效果比用环境光源模型要好。 OpenGL还提供了让物体自发光让自己可以被看见的方式。这就是物体自发光。物体自发光对于光源十分的重要,比如电灯泡可以看作是一个点光源,我们把点光源的位置设置到灯泡的中央,这样灯泡周围的物体将被照亮,但是灯泡的外表面由于相对光源来说是背面,将不能被照亮。这与实际情况不符合,灯泡照亮其它物体,而自身却不亮,所以需要通过物体自发光让灯泡的外表面也发亮。 光源的一般属性包括:镜面反射光线颜色、漫反射光颜色、环境光线颜色、光源位置。镜面反射光颜色:在物体表面将发生镜面反射的光线的颜色。漫反射光颜色:在物体表面将发生漫反射的光线的颜色。环境光线颜色:照亮所有物体所有表面的光线的颜色。光源位置就是光源在场景中所在的位置。 光线的衰减:光源发出的光线的强度会随着传播距离越来越大而变弱(无穷远光源除外)。光线强度会乘以一个衰减因子。 衰减因子=1/(K1 + K2 * d + k3 *d^2) 其中d为光源距离(无穷远光源的衰减因子为1)方向光源发出的光线会随着偏移中心方向的角度增大而减弱。

2016年春《计算机图形学》作业 (答案)

2016年北京大学现代远程教育《计算机图形学》作业题 注意事项: 1.本作业题中所标注的章节均以学习指导和课件为准; 2.作业请独立自主完成,不要抄袭。 一、填空题 1.(第1章)图形是由点、线、面、体等几何要素和明暗、灰度(亮度)、色彩等非几何要素构成的,从现实世界中抽象出来的带有灰度、色彩及形状的图或形。 2.(第2章)一个计算机图形系统至少应具有计算、存储、输入、输出、交互等基本功能; 3.(第2章)光栅扫描图形显示器是画点设备,显示一幅图像所需要的时间等于显示整个光栅所需的时间,而与图像的复杂程度无(填“有”或“无”)关; 4.(第3章)在计算机图形学中,多边形有两种重要的表示方法:顶点表示和点阵表示。 5.(第3章)多边形填充的扫描线算法先求出扫描线与多边形边的交点,利用____扫描线的连续性求出多边形与扫描线相交的连续区域,然后利用多边形边的连续性,求出下一条扫描线与多边形的交点,对所有扫描线由下到上依次处理。 6.(第3章)将区域内的一点(种子)赋予给定的颜色,然后将这种颜色扩展到整个区域内的过程叫区域填充;区域的表示方法有内点表示和 边界表示两种。 7.(第4章)常用坐标系一般可以分为世界坐标系、局部坐标系、观察坐标系、设备坐标系、标准化设备坐标系。

8.(第4章)对于基本几何变换,一般有平移、旋转、反射和错切等。这些基本几何变换都是相对于 坐标原点 和 坐标轴 进行的几何变换。 9.(第4章)在三维空间中的物体进行透视投影变换,最多可能产生 3 个主灭点。 10.(第6章)根据输入数据的不同性质,图形核心系统(GKS)和三维图形系统 (PHIGS)把输入设备在逻辑上分成以下几类: 定位___设备、 笔画__设备、 定值 设备、 选择 设备、 拾取 设备、 字符串 设备。 11.(第7章)隐藏面和隐藏线的消除有两种基本的算法,一种是基于 图像空间 的方法,一种是基于 物体空间 的方法。 12.(第7章)扫描线z 缓冲器算法所用到的数据结构包括一个 多边形y 筒 、一个 边y 筒 、一个 多边形活化表__、一个 边活化表___; 13.(第8章)通常,人们把反射光考虑成3个分量的组合,这3个分量分别是_ 环境光 反射、 漫 反射和 镜面 反射。 14.(第8章)为了解决由多个平面片近似表示曲面物体的绘制问题,人们提出了各种的简单算法,其中最具代表性的两种方法: Gouraud 光亮度插值技术 和 Phong 法向量插值技术 。 15.(第9章)对于三次多项式曲线,常用四个几何条件进行描述:两端点的位置P 0=P (0)和P 1=P (1);两端点的切矢量和;那么参数曲线的多项式表示为,其中,F 0(t )=___13223+-t t __,F 1(t )=__2332t t +-___,G 0(t )=__t t t +-232___, G 1(t )=____23t t -___。 二、选择题 1.(第2章)下列不属于图形输入设备的是____D____; A .键盘 B. 鼠标 C. 扫描仪 D. 打印机

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

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

计算机图形学作业题

1、已知一直线段起点(0,0),终点(8,6),利用Bresenham算法生成此直线段,写出 生成过程中坐标点及决策变量d的变化情况,并在二维坐标系中,标出直线上各点。 2、试用中点画圆算法原理推导第一象限中y=0到x=y半径为R的圆弧段的扫描转换算法。(要求写清原理、误差函数和递推公式,并进行优化) 3、如下图所示多边形,若采用扫描线算法进行填充,试写出该多边形的ET表和当扫描线Y=3时的有效边表(AET表)。 4、试按左下右上顺序用四向算法,分析当S1为种子时,下图区域的填充过程。 5、将下图中的多边形ABCD先关于点C(3,4)整体放大2倍,再绕点D(5,3)顺时针旋转90 ,试推导其变换矩阵、计算变换后的图形各顶点的坐标,并画出变换后的图形。

6、已知三角形ABC 各顶点的坐标A(3,2)、B(5,5)、C(4,5),相对直线P 1P 2(线段的坐标分别为:P 1 (-3,-2) 、P 2 (8,3) )做对称变换后到达A ’、B ’、C ’。 试计算A ’、B ’、C ’的坐标值。(要求用齐次坐标进行变换,列出变换矩阵,列出计算式子,不要求计算结果) 7、试作出下图中三维形体ABCDE 的三视图。要求写清变换过程,并画出生成的三视图。 x 8、试采用Sutherland –Cohen 裁剪算法,叙述裁剪如下图所示的直线AB 和CD 的步骤: ① 写出端点A 、B 、C 、D 的编码; ② 写出裁剪原理和直线AB 、CD 的裁剪过程。 A B C D 9 、用梁友栋算法裁减如下图线段AB ,A 、B 点的坐标分别为(3,3)、(-2,-1) 裁剪窗口为wxl=0,wxr=2,wyb=0,wyt=2。

武汉理工大学《计算机图形学》大作业

《计算机图形学基础》大作业 课程名称计算机图形学基础开课学院计算机科学与技术学院指导教师姓名佘名高 学生姓名杨峻 学生专业班级软件工程1102 2013-2014 学年第一学期

一、命题计划 题目:C语言图形编程 (以下题目文档要求:①基本论述②算法③程序源代码④界面图) 二、内容与要求 (1)撰写内容 1.根据Bresenham直线绘制算法,实现直线的绘制。 2.用C语言编写:画y=sin(x)的图形(要求画出[-2π,2π]的图形及笛卡尔坐标)3.用C语言编写一个小圆沿着大圆运动的程序。 4.对图1中的零件图形,如何根据它所标注的尺 寸,按照适当的顺序有步聚地画出该图形。 提示:首先要分析此零件图形的几何关系,了解 构成这个图形各线段的性质,才能顺利地绘出此图形。 线段(直线或圆弧)在零件图形中分为三类,即已知线 段、中间线段和连接线段。以圆弧为例,按几何原理, 已知圆心的两个位置尺寸与半径尺寸便可画出圆。因 此图形中,已知这三个尺寸的圆弧称为已知圆弧,画 图时应该最先画出。凡已知其中二个尺寸的圆弧称为 中间圆弧。凡只已知一个尺寸(一般是圆弧半径)的圆 弧称为连接圆弧。中间圆弧和连接圆弧都缺省圆心的位置尺寸,它的几何位置是根据相切的条件来确定的。因此画圆弧的顺序为:先画已知圆弧,再画中间圆弧,最后画连接圆弧。 本零件图形是对称图形,三个小圆均匀分布在圆周中心线上,φ10,φ25,φ50和R10都是已知圆弧,R8为连接圆弧,φ50是已知圆弧的端点和R10已知圆弧的端点与连接圆弧的端点相切,从而构成整个图形。 (2)撰写要求 1.基本论述 2.算法 3.程序源代码 4.程序运行截图 5.小结

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

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

16秋西交《计算机图形学》在线作业

奥鹏17春16秋西交《计算机图形学》在线作业 一、单选(共30 道,共60 分。) 1. 在三维造型中,不可以使用垂直扫掠造型方法构造的有( )。 A. 园柱 B. 长方体 C. 三棱锥 D. 正十二面体 标准解: 2. 在直线段的参数方程表示方法中,参数t的取值范围为( )。 A. 【0,1】 B. 【0,∞】 C. 【-1,1】 D. 【-1,0】 标准解: 3. 如果希望在CorelDRAW中创建的多个页面具有相同的图形元素,可以执行下面的哪一项操作( ) A. 先创建多个页面,然后分别在各个页面中绘制相同的图形元素 B. 创建一个页面并在此页面绘制需要的图形元素,然后再将此页面复制多个 C. 选择“Layout-Page Setup”命令,在弹出的对话框中进行设置 D. 在Master Page中创建一个图层,在此图层中绘制希望出现在各个页面中的图形元素,则此各个页面将具有相同的图形元素 标准解: 4. 下列有关平面几何投影的叙述,错误的是( )。 A. 透视投影又可分为一点透视、二点透视、三点透视 B. 斜投影又可分为等轴测、斜二测 C. 正轴测又可分为等轴测、正二测、正三测 D. 正视图又可分为主视图、侧视图、俯视图 标准解: 5. 要快速以递增的方式增大字体大小,可以利用“文本”工具选择特定的字符后,执行以下哪步操作( ) A. 按CTRL + "+"键 B. 双击“缩放”工具 C. 按CTRL + 数字小键盘上的"8" D. 按CTRL + 数字小键盘上的"2" 标准解: 6. 有M个控制顶点Pi(i=1,…k)所决定的n次B样曲线,由()段n次B样曲线段光滑连接而成。

计算机图形学作业

1?什么是图形?在计算机中,图形是如何表示的?计算机图形学的主要研究内容是什么? 答:从广义上说,能够在人的视觉系统中形成的视觉印象的客观对象都称为图形。在计算机图形学中,图形是对客观对象的一种抽象表示,它带有形状和颜色信息。在计算机中,图形通过用点陈法和参数法来表示图形。计算机图形学的主要研究内容是图形的输入,图形的处理,图形的生成和输出。 2?试举例说明计算机图形学的应用。 答:图形用户界面,计算机辅助设计,科学计算可视化,科技、教育、商业领域中的交互式绘图,计算机艺术,地理信息系统,计算机动画、广告及娱乐,多媒体系统,虚拟现实系统。 3.试列举出你所知道的图形输入与输出设备。 答:图形输入设备:鼠标,图形输入板,跟踪球,光笔,触摸屏,操纵杆,空间球,数据手套。 图形输出设备:阴极射线管显示器,液晶显示器,等离子显示器,绘图仪。 4.你用过哪些图形软件包?把它们列举出来。 答:OpenGL DirectX。 5.阴极射线管有哪几个部分组成?它们的功能分别是什么? 答:阴极射线管有五部分组成:电子枪,聚焦系统,加速电极,偏转系统,荧光屏。 电子枪的功能:电流通过灯丝产生热量,对阴极加热使其发出电子束,控制电子束的强弱和数量。 聚焦系统的功能:聚焦系统通过电场或磁场控制电子束,使电子束“变细”,保证轰击荧光屏时产生的亮点足够小,提高显示系统的分辨率。 加速电极的功能:加速电极加有正的高电压,使经过聚焦的电子束高速运动。 偏转系统的功能:控制电子束的水平方向上和竖直方向上的偏转。 荧光屏的功能:显示图形。 6.什么叫刷新?刷新频率与荧光物质的持续发光时间的关系如何? 答:在画线显示器中,电子束在荧光屏上产生的亮点只能持续极短的时间,为了产生静态的不闪烁的图形,电子束必须周期性地反复扫描所要绘制的图形,这种扫描

计算机图形学大作业

程序大作业选题内容 用VC++或者OpenGL上机编程实现如下算法,选择OpenGL编程者可以将文献综述报告选为对OpenGL图形标准和相关库函数的介绍。 程序设计报告要求用A4纸打印,要求报告要求有以下内容: 1设计目标和要求 2算法原理介绍 3程序源代码 4程序运行结果抓图 5参考文献 6 学习体会 1.NURBS曲线的生成与显示。 要求能够演示出w权因子的变化对曲线形状的影响,以及控制顶点的变化对曲线形状的影响,有良好的程序界面,交互式地控制w因子的变化和控制顶点的变化,以示可以通过控制点和权因子来灵活地改变形状。 2.参数多项式曲面的生成与显示 包括双线性曲面、单线性曲面、双三次参数曲面片、孔斯(Coons)曲面。 3.双三次Bezier曲面的生成与显示 要求用不同颜色显示双三次Bezier曲面和曲面的控制网格,并且可以取消曲面控制网格的显示,允许交互式地改变控制网格的顶点位置,以观看Bezier曲面性状的改变。 4.双三次B样条曲面的生成与显示 要求用不同颜色显示双三次B样条曲面和曲面的控制网格,并且可以取消曲面控制网格的显示,允许交互式地改变控制网格的顶点位置,以观看B样条曲面性状的改变。 5.扫描曲面的生成与显示 通过任意指定被运动的基体、以及基体运动的路径,显示生成的扫描曲面。 6.生成并显示Julia集和Madelbrot集的逐级放大图。 如下图所示:

7.实现分形图像压缩算法。 要求能够实现图像的打开、显示和保存功能,并同时显示压缩前和压缩后的图像。 8.用随机插值模型生成并显示山的模型 9.绘制Sierpinski金字塔(需要考虑多边形绘制的顺序,并使用消隐算法,才能显示正确的结果) 10.绘制Sierpinski海绵(需要考虑多边形绘制的顺序,并使用消隐算法,才能显示正确的结果) 11.用粒子系统模拟自然景物,例如跳动的火焰、烟雾、下雨、行云、随风摇曳的草丛等(任选其一)。12.任意选择一种消隐算法,实现曲面物体的消隐(例如一个圆环中间放置一个球)。 13.用简单光照模型显示一个简单场景的漫反射效果。 14.用简单光照模型显示一个简单场景的镜面反射效果。 例如:

相关文档
最新文档