1、列举三个你接触过的计算机图形学的应用实例。
答:(1)计算机辅助设计(CAD):如使用Protel、AutoCAD等软件绘图;
(2)计算机动画:如科幻电影或广告中的特技镜头;
(3)人机交互界面:如Windows系统
2、试述CRT的基本工作原理。
答:当电子枪的阴极被内部灯丝加热时发射电子束,此电子束穿过控制栅由聚焦系统聚焦后穿过偏转系统打在荧光屏上。荧光屏上有一层荧光物质,当电子束打中荧光屏时,可产生一个小的光点。因为荧光物质发光时间十分短暂,要使荧光屏上的画面稳定,需要控制光点。方法之一是使电子束很快地重复射向同一点,以此重画画面
3、设有两个显示分辨率分别为640×480及1280×1024的光栅扫描系统,如果每个象素12位,这两个系统各需多大的帧缓存?可显示的颜色数有多少种?如果每个象素为24位情况又如何?
答:(1)每个象素12位时:
可显示颜色数=212=4096(种)
第一个系统所需缓存大小=640×480×12/8
=460800(B)=450(KB)
第二个系统所需缓存大小=1280×1024×12/8
=1966080(B)=1920(KB)=1.875(MB)
(2)每个象素24位时:
可显示颜色数=224=16777216(种)
第一个系统所需缓存大小=640×480×24/8
=921600(B)=900(KB)
第二个系统所需缓存大小=1280×1024×24/8
=3932160(B)=3840(KB)=3.75(MB)
第二次作业
1、考虑象限间的对称性而扩充Bresenham算法,使之能生成任何斜率的直线。
解答:算法如下(暂不考虑水平线、垂直线):
Void Bres_line(int xa,int xb,int ya,int yb)
{
int dx=abs(xa-xb), dy=abs(ya-yb);
int p, flag = ((xa-xb) * (ya-yb) > 0) ? 1 : -1;
/*flag表示斜率是否为正*/
int d1, d2;
int i, j, End;
if (dx>= dy){
p = 2dy-dx;
d1 = 2*dy; d2 = 2*(dy-dx);
if((flag==1 && xa>xb) || (flag==-1 && xa<xb)){
i = xb; j = yb;
End = xa;
}
else{
i = xa; j = ya;
End = xb;
}
}/*斜率|k|<=1时*/
else{
p = 2*dx-dy;
d1 = 2*dx; d2 = 2*(dx-dy);
if((flag==1 && ya>yb) || (flag==-1 && ya<yb)){
i = yb; j = xb;
End = ya;
}
else{
i = ya; j = xa;
End = yb;
}
}/*斜率|k|>1时*/
setPixel(i, j);
while(i<End){
if (flag == 1) i++;
else i--;
if (p<0) p += d1;
else{
j++;
p += d2;
}
setPixel(i, j);
}
}
2、写出中点椭圆算法的实现步骤。
解答:步骤如下:
(1)设初值:已知椭圆长半轴为a,短半轴为b;设x=0,y=b,d=b2+a2(-b+0.25)。
(2)测试上半部分终止条件:b2(x+1)>a2 (y-0.5),如满足,则转(6)。
(3)根据对称性,作出椭圆上四个点的位置:
setPixel(x,y); setPixel(-x,y);
setPixel(x,-y); setPixel(-x,-y);
(4)计算下一象素的位置。
如果d>=0,则d=d+b2(2x+3)+a2(-2y+2), x=x+1,y=y-1
如果d<0,则d=d+b2(2x+3),x=x+1,y=y
(5)转步骤(2)
(6)用上半部分得到的最后的点(x,y),计算初值:d=b2(x+0.5)2+a2(y-1)2-a2b2
(7)测试下半部分终止条件:y>=0,如满足,则终止程序。
(8)根据对称性作出椭圆上四个点的位置。
9)计算下一象素点。
如果d>=0,则d=d+a2(-2y+3),x=x,y=y-1
如果d<0,则d=d+b2(2x+2)+a2(-2y+3), x=x+1,y=y-1
(10)转步骤(7)。本文地址:http://com.8s8s.com/it/it24926.htm