计算机图形学

类别:编程语言 点击:0 评论:0 推荐:

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