计算机图形学第二版科学出版社.docx
《计算机图形学第二版科学出版社.docx》由会员分享,可在线阅读,更多相关《计算机图形学第二版科学出版社.docx(31页珍藏版)》请在冰豆网上搜索。
计算机图形学第二版科学出版社
第三章习题答案
3.1计算机图形系统的主要功能是什么?
答:
一个计算机图形系统应具有计算、存储、输入、输出、交互等基本功能,它们相互协作,完成图形数据的处理过程。
1.计算功能
计算功能包括:
1)图形的描述、分析和设计;2)图形的平移、旋转、投影、透视等几何变换;
3)曲线、曲面的生成;4)图形之间相互关系的检测等。
2.存储功能
使用图形数据库可以存放各种图形的几何数据及图形之间的相互关系,并能快速方便地实现对图形的删除、增加、修改等操作。
3.输入功能
通过图形输入设备可将基本的图形数据(如点、线等)和各种绘图命令输入到计算机中,从而构造更复杂的几何图形。
4.输出功能
图形数据经过计算后可在显示器上显示当前的状态以及经过图形编辑后的结果,同时还能通过绘图仪、打印机等设备实现硬拷贝输出,以便长期保存。
5.交互功能
设计人员可通过显示器或其他人机交互设备直接进行人机通信,对计算结果和图形利用定位、拾取等手段进行修改,同时对设计者或操作员输入的错误给以必要的提示和帮助。
3.2阴极射线管由哪些部分组成?
它们的功能分别是什么?
答:
CRT主要由阴极、电平控制器(即控制极)、聚焦系统、加速系统、偏转系统和阳极荧光粉涂层组成,这六部分都在真空管内。
阴极(带负电荷)被灯丝加热后,发出电子并形成发散的电子云。
这些电子被电子聚集透镜聚焦成很细的电子束,在带正高压的阳极(实际为与加速极连通的CRT屏幕内侧的石墨粉涂层,从高压入口引入阳极高电压)吸引下轰击荧光粉涂层,而形成亮点。
亮点维持发光的时间一般为20~40mS。
电平控制器是用来控制电子束的强弱的,当加上正电压时,电子束就会大量通过,在屏幕上形成较亮的点,当控制电平加上负电压时,依据所加电压的大小,电子束被部分或全部阻截,通过的电子很少,屏幕上的点也就比较暗。
所以改变阴极和控制电平之间的电位差,就可调节电子束的电流密度,改变所形成亮点的明暗程度。
利用偏转系统(包括水平方向和垂直方向的偏转板)可将电子束精确定位在屏幕的任意位置上。
只要根据图形的几何坐标产生适当的水平和垂直偏转磁场(或水平和垂直偏转板静电场),控制电于束的偏转,就可以在CRT荧光屏上得到发亮的图形轨迹。
3.4分辨率为800×600,能显示216种颜色的显示器,至少需要选用帧缓存的容量为
(1)512K
(2)1M(3)2M(4)3M。
答:
1MB
3.7灰度等级为256,分辨率为1024×768的显示器,至少需要选用帧缓存的容量为
(1)512K
(2)1M(3)2M(4)3M。
答:
1MB
3.9说明显卡主要部分的功能。
答:
常见显卡的结构中包括:
显卡的BIOS芯片、图形处理芯片、显存、数模转换器(RandomAccessMemoryDigital-to-AnalogConverter,RAMDAC)芯片、接口等。
显卡的工作原理如图2.16所示。
1.显卡BIOS芯片
显卡BIOS芯片主要用于保存VGA(VideoGraphicsArray,视频图形阵列)BIOS程序。
VGABIOS是视频图形卡基本输入、输出系统(VideoGraphicsAdapterBasicInputandOutputSystem),它的功能与主板BIOS功能相似,主要用于显卡上各器件之间正常运行时的控制和管理,所以BIOS程序的技术质量(合理性和功能)必将影响显卡最终的产品技术特性。
2.图形处理芯片
图形处理芯片是显卡的核心,显卡的性能基本上取决于图形处理芯片的技术类型和性能。
可将它看做是完成图像生成与操纵的、独立于CPU的一个本地处理器,它管理与系统总线的接口,这个接口应具有零等待的猝发式传送能力。
图形处理芯片的主要功能是依据设定的显示工作方式,自主地、反复不断地读取显示存储器中的图像点阵数据,将它们转换成R、G、B三色信号并配以同步信号送至显示器,即刷新屏幕。
图形处理芯片还要提供一个由系统总线至显示存储器总线的通路,以支持CPU将主存中已修改好的点阵数据写入到显示存储器,即修改或更新屏幕,这些修改数据写入显示存储器,一般都利用扫描回程的消隐时间进行,因此显示屏幕不会出现凌乱;或者显示存储器的容量足够大,保存不止一屏图像数据;待一屏数据修改完再用于刷新显示。
图形处理芯片还有颜色查找表的功能。
颜色查找表是由高速的随机存储器组成,用来存储表达像素色彩的代码。
配置了颜色查找表的帧缓存中的每一像素对应单元的代码不再代表该像素的色彩值,而是代表了颜色查找表的地址索引。
根据这一索引值读出的颜色查找表中所储存的像素色彩,经D/A转换后送至显示器。
颜色查找表每个单元所包括的位数一般大于帧缓存的色彩值位数,从而采用颜色查找表可以起到丰富色彩的作用。
现在的图形处理芯片都具有图形加速功能,也就是说它提供图形函数的计算功能,专门用来执行图形加速任务,可以大大减少CPU所必须处理的图形函数,使CPU可以执行更多其他的任务,从而提高了计算机的整体性能。
衡量显示处理芯片的技术先进性主要是看其所具有的2D/3D图形处理能力、芯片图形处理引擎的数据位宽度、与显存之间的数据总线宽度和所支持的显存类型容量、内部RAMDAC的工作时钟频率、具备几条像素渲染处理流水线、所支持的图形应用程序接口(API)种类以及芯片生产工艺技术水平等。
3.显示存储器(VRAM)
显示存储器(简称显存)的用途主要是用来保存由图形芯片处理好的各帧图形显示数据,然后由数模转换器读取并逐帧转换为模拟视频信号再提供给显示器使用,所以显存也被称为“帧缓存”,它的大小直接影响到显卡可以显示的颜色多少和可以支持的最高分辨率。
4.数模转换器
显存中存储的是数字信息,而显示器工作需要的是模拟信号,这就需要在显存和显示器中间有一个数模转换器(RandomAccessMemoryDigital-to-AnalogConverter,RAMDAC),将数字信号转换为模拟信号,使显示器能够显示图像。
RAMDAC的另一个重要作用是提供显卡能够达到的刷新率,它也影响着显卡输出的图像质量。
3.11列举你所知道的计算机图形输入和输出设备。
答:
图形输入设备:
键盘、鼠标、游戏杆、控制按钮、光笔、数字化仪、触摸板、图形扫描仪、手写输入板、跟踪球、空间球、语音输入和数据手套等。
图形显示设备:
阴极射线管显示器、液晶显示器、等离子显示器和荧光显示器等。
图形绘制设备:
静电绘图仪、喷墨绘图机、激光打印机、笔式绘图机、热敏和热升华绘图仪/打印机、照相排版设备等。
3.12下列语句中,正确的论述是()
(1)在图形系统中,显示器的分辨率只影响图形显示的精度。
(2)在光栅扫描图形显示器中,所有图形都应转化为像素点来显示。
(3)一般图形系统中所配置的点阵绘图(打印)机,其分辨率对图形运算的精度没有直接影响。
(4)在光栅扫描显示器中,可直接显示用几何特征参数描述图形元素(点、线、圆、弧等)。
(5)在图形系统中,显示器的分辨率有限,但不限制图形处理运算的精度。
(6)在光栅扫描显示器中,采用像素点阵显示所有图形。
答:
(2)、(3)、(5)、(6)正确。
第四章习题答案
4.1(无)
4.4多边形的顶点和点阵表示各有什么优点?
答:
顶点表示是用多边形的顶点的序列来描述多边形,该表示几何意义强、占内存少。
(但他不能直观地说明哪些像素在多边形内)。
点阵表示用位于多边形内的像素的集合来描述多边形。
该方法虽然没有多边形的几何信息,是面着色所需要的图像表示形式。
4.9请简要叙述种子算法的基本思想及其用堆栈实现八连通算法原理。
答:
种子算法充分利用了递归调用的机理,在前一种子点确定并变为新颜色后,按照自身调用的八向顺序依次查找新的种子点,找到即变为新颜色,继续下一种子的查找。
未查的方向被压栈保存,等退栈时继续查找,最终完成蔓延至整个区域所有点都变为新颜色。
4.12在区域填充的扫描线算法中加上反走样程序,使用连续性来减少连续扫描线上的计算量。
答案:
deltax=xe-xs;
deltay=ye-ys;
m=deltay/deltax;
y=ys;
x=xs;
a=1-m;
d=0.5;
for(I=1;I{
setpixel(framebuffer,x,y,d);
if(d>=a)
{
y=y+1;
d=d-a;
}
elsed=d+m;
x=x+1;
}
第五章习题答案
5.2证明三维变换矩阵的乘积对以下运算顺序是可交换的:
(1).任意两个连续平移。
由上面两式可得:
(2).任意两个连续的放缩变换。
由上两式可得:
=
(3).任意两个连续的关于任一坐标轴的旋转。
以绕x轴为例,绕其他轴旋转同理可得
由上两式可得:
=
5.7将梁友栋-Barsky裁减算法改写成多边形裁减算法。
答:
梁友栋-Barsky裁减算法是线段裁减,如果对多边形的每条边用该方法,会使原来封闭的多边形变成不封闭或是一些离散的线段。
为此可以将梁友栋-Barsky裁减算法改写成多边形裁减算法。
包含PiPi+1的直线与窗口4条边界相交,其中两个是潜在的进入交点,另外两个是潜在的离开交点,计算出交点的参数值,并分别记为t_in1,t_in2,t_out1,t_out2.跨越窗口直线有2种情形
1
2
for(每条边e){
确定边的方向
用此来确定包含线首先与裁减区域的哪条边界线相交
寻找退出点的t值
if(t_out2>0)
寻找第2个进入点的t值
if(t_in2>t_out1){
if(0output_vert(turning_vertex);
}else{
If(0=t_in2){
If(0<=t_in2)
Output_vert(适当的面交点);
Else
Output_vert(起始顶点);
If(1>=t_out1)
Output_vert(适当的面交点);
Else
Output_vert(终止顶点);
}
}
If(0Output_vert(适应的窗口角点);
}/*对每条边*/
第六章习题答案
6.1下面有关平面几何投影的叙述中,哪些是正确的?
(1).平面几何投影中,透视投影的投影中心到投影平面的距离是有限的。
(Y)
(2).平面几何投影中,一组平行线的投影仍保持平行。
(N)
(3).平行投影与透视投影相比,视觉效果更有真实感,而且能真实地反映物体的精确集合尺寸与形状。
(N)
(4).在三维空间中的平行投影变换不可能产生灭点。
(Y)
6.2(无)
6.3(无)
第八章习题答案
8.4设投影中心为原点,构造一个由透视投影到平行投影的变换。
此变换使得原物体平行投影在
平面上和将原物体透视投影在规范化视见平面上产生的图像相同。
答:
原物体在平面
上的透视投影是:
其中,
。
点
在视见平面上的透视投影是:
透视投影到平行投影变换
为:
这里,
是规范化前裁剪平面的位置。
现在,对点
应用变换
,得到点:
在
平面上的平行投影为:
所以
和
产生相同的投影图像。
而且,
变换将以
为边界的规范化透视视见体变换到以
为边界的长方体上。
8.6请叙述扫描线消隐算法的基本思想及其算法的具体实现。
答:
1、基本思想:
从最上面的一条扫描线开始工作,向下对每一条扫描线进行处理。
在处理当前扫描线时,开一个一维数组作为当前扫描线的Z-buffer。
首先找出与当前扫描线相关的多边形,以及每个多边形中相关的边对。
对每一个边对之间的小区间上的各象素,计算深度,并与Z-buffer中的值比较,找出各象素处可见平面,计算颜色,写帧缓存。
对深度计算,采用增量算法。
2、算法的具体实现:
首先,建立几个类
classpolygon
{
public:
doublea,b,c,d;
ShapeTypType;
intdeltaY,yMax;
doubledetaZx,deltaZy;
COLORREFcolor;
boolvisible;
intIP;
//,可以将所有的多边形放在一个一维数组中,所在位置即位其ip
public:
voidfillPoly(inti,pt3DX[],COLORREFcolor1,intip,ShapeTyptype)
{
//实现填充多边形的各个变量
}
};
structEdge
{
public:
ShapeTypType;
intdeltaY;
doubledeltaX;
intIP;
doubletopX;
inttopY;
public:
/////引进topY一是为了在将相应的边加入y桶时方便,而是为了判断活化边结束的时候
//////////对边的信息进行填充后,deltay!
=0决定了将其放入ymax决定的链表中
voidfillEdge(pt3Dx,pt3Dy,intip,ShapeTyptype)
{//填充边的各个参数}
};
structEdgeLive
{
public:
ShapeTypType;
doublexl;
intdeltaYl;
doubledeltaXl;
doublexr;
intdeltaYr;
doubledeltaXr;
doublezl;
doubledeltaZx,deltaZy;
intIP;
public:
//////////活化边的填充的时候,说明这两条边肯定不是并行与x轴的直线,,
/////////因为在相eldgeBox填入内容的时候应该已经进行了处理
};
这些准备工作完成之后,有了前期的准备工作---三维模型的建立及其可以发生的仿射变换,就可以进行下面的扫描线算了。
函数voidScanningZBufffer();的功能便是进行该算法的实现。
在实现时,要有一个初始化工作,完成将变化之后各个体的各个面和边放入到合适的链表中。
所需得各个链表如下所示:
listm_AllPoly[800];//存放所有的多边形
listm_curPoly;//多边形活化链表,用来存放当前正在处理的多边形
listm_AllEdge[800];//所有的边
listm_curEdge;//边活化链表,用来存放当前处理的边对
函数voidInitialize();负责进行上面的工作。
之后便可以进行算法的主体了;
程序原代码见附件。
8.8简述用
缓冲器算法来确定哪一个面被隐藏的方法。
答:
缓冲器算法设置了一个二维数组,类似于帧缓冲器。
但是
缓冲器存放的是每个象素点的深度值,而不是帧缓冲器中的颜色值。
缓冲器的初始值为某个大的数值,通常是后裁剪平面的距离。
在判断像素
上的哪个平面更靠近观察者时,就可以简单地比较
缓冲器中的深度值和当前平面的深度值。
如果当前平面的值比
缓冲器中的值小(即距视点更近),则用新值替换原
缓冲器中的值,像素的颜色值也变成新平面的颜色值。
直流电机测速与控制实验
一、实验目的
1.熟悉直流电动机的工作特性。
2.学习直流电机的驱动、测速电路的设计。
3.学习直流电机的驱动、测速程序的编写。
二、实验内容
根据系统提供的直流电机驱动、测速电路,使用单片机驱动直流电机,测量直流电机的转
速,控制直流电机稳定运行在一个范围内。
三、实验要求
按实验内容编写一个程序,并在实验仪上调试和验证。
四、实验说明
使用栅格圆盘和光电门组成测速系统。
当直流电机通过传动部分带动栅格圆盘旋转时,测
速光电门获得一系列脉冲信号。
这些脉冲信号通过单片机两个定时/计数器配合使用同,一个计
数,一个定时。
计算出单位时间内的脉冲数m,经过单位换算,就可以算得直流电机旋转的速
度。
直流电机转速计算公式:
n=60·m/(N1·T·N)(rpm)
其中:
n为直流电机转速,N为栅格数,N1为T0中断次数,m为计数器T1在规定时间内测
得的脉冲数,T为定时器T0定时器溢出时间。
使用系统提供的显示电路,可把电机的转速显示出来。
直流电机转速调节:
某些场合往往要求直流电机的转速在一定范围内可调节,例如,电车、机床等,调节范围
根据负载的要求而定。
调速可以有三种方法:
(1)改变电机两端电压;
(2)改变磁通;(3)在
电枢回路中,串联调节电阻。
本实验采用第一种方法:
通过改变施加于电机两端的电压大小达
到调节直流电机转速的目的。
本实验用DAC0832D/A转换输出控制直流电机两端电压。
程序中
直流电机初始速度较大(大约40转/秒),设运行速度设置为2000转/分,经过若干秒后,直流
电机转速慢慢下降到运行速度,以设定的速度运行。
本实验需要用到CPU模块(F3区)、直流电机模块(A6区)、并行数模转换模块(D8区)、
8279显示模块(E7区)。
直流电机电路原理参见图31-1A、图31-1B。
图31-1A直流电机电路
12
A
-
+DC-Motor
VCC
2
13
Q10A
9013
P12A
V-DCMotor
R49A
3K
12
J3A
Header2
78
图31-1B光电测速电路
五、实验预习要求
学习教材的相关内容,根据实验要求画出程序流程图,写出实验程序。
六、实验步骤
1)系统各跳线器处在初始设置状态。
用导线连接直流电机模块的PulseOut到CPU模块的P35;
用导线连接并行数模转换模块的CS_0832到CPU模块的8000H;
并行数模转换模块的VOUT端口接直流电机模块的V-DCmotor。
2)用万用表测量“-Vref”端的电压,手动调节电位器RW3D,把-Vref电压调到-2.5V。
3)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。
编译无误后,下载程序
运行。
4)直流电机顺时针旋转,第四个数码显示P最后二位显示电机转速(单位为转/秒)。
观察
直流电机转速,若干秒后,直流电机转速慢慢下降到运行速度,以程序设定的速度±1转/秒运
行(样例程序中转速默认为40转/秒)。
七、实验参考
;//***********************************************************
Z8279EQU08701H;8279状态/命令口地址
D8279EQU08700H;8279数据口地址
LEDMODEQU10H;左边输入八位字符显示
;外部译码键扫描方式,双键互锁
LEDFEQEQU36H;扫描速率
LEDCLSEQU0C1H;清除显示RAM
LEDWR0EQU80H;设定的将要写入的显示RAM地址
DAC0832EQU8000H;D/A转换地址
LEDDBUFEQU30H
PULSELEQU50H
PULSEHEQU51H
SPEEDEQU52H;速度
SPEED1EQU53H;速度
TIMEREQU54H;软件计数20次
DACEQU58H;
;转速计算:
设T0定时50mS,则1S有20个50mS,1分钟有1200个50mS,
;设50mS内T1计数为n个脉冲,则1分钟有1200n个脉冲,
;而脉冲编码器一转产生12个脉冲,则转速为100n转/分。
;或:
设1S内T1计数为m个脉冲,则转速为5m转/分。
ORG0000H
LJMPSTART
ORG000BH
LJMPINTT0;定时器T0中断服务程序
ORG0100H
START:
MOVSP,60H
MOVDPTR,#DAC0832
MOVA,#00H
MOVDAC,#00
MOVX@DPTR,A;使电机停转
MOVPULSEL,#0
MOVPULSEH,#0
MOVSPEED,#40;设置运行速度40转/S
MOVA,SPEED
MOVB,#10
DIVAB
MOVB,#6
MULAB
MOVSPEED1,A;SPEED1=SPEED*60/100SPEED为设定的每秒转速
LCALLINIT8279
MOVTL0,#00H;50ms(65536-50000*11.0592/12=4C00H)
MOVTH0,#4CH
MOVTIMER,#20;软件计数20次
MOVTH1,#0
MOVTL1,#0
MOVTMOD,#51H;置T0定时,T1计数
SETBET0;允许T0中断
SETBTR0;开始定时
SETBTR1;开始记数
SETBEA;中断允许
MLOOP:
LCALLDACOUT;驱动输出
SJMPMLOOP
DACOUT:
MOVDPTR,#DAC0832
MOVA,DAC
MOVX@DPTR,A;驱动电机输出
RET
INTT0:
;定时器T0中断服务程序
PUSHDPH;保存现场
PUSHDPL
PUSHACC
CLRTR1;停止T1计数
CLRC
MOVA,TL1
ADDA,PULSEL
MOVPULSEL,A
CLRA
ADDCA,PULSEH
MOVPULSEH,A
MOVA,SPEED1
;DECA
MOVR7,A
MOVA,TL1
CJNEA,R7,PD1
SJMPGOON;THL=SPEED继续
PD1:
JCSHIFT;THL;SJMPSHIFT1;THL>SPEED转调小DAC
MOVA,SPEED1
INCA
MOVR7,A
MOVA,TL1
CJNEA,R7,PD2
SJMPGOON;THL=SPEED+1继续
PD2:
JNCSHIFT1;THL>SPEED+1转调小DAC
SJMPGOON;SPEED-1SHIFT:
INCDAC;小于设定速度
SJMPGOON
SHIFT1:
DECDAC;大于设定速度
GOON:
MOVA,TIMER
DECA
MOVTIMER,A
JNZBACK;软件计数,次数不到返回
MOVTIMER,#20
MOVR7,PULSEL
MOVR6,PULSEH
MOVR3,#5
LCALLDIV12;MULD5
MOVR6,R4
MOVR7,R5
;LCALLToBCD
MOVB,