《计算机图形学》练习测试题及参考答案

B(5,2)、C(3,5),相对直线Y=4做对称变换后到达A’、B’、C’。

试计算A’、B’、C’的坐标值。(要求用齐次坐标进行变换,列出变换矩阵)

8、设窗口左下角点坐标为(XW1,YW1),宽为LW,高为HW,视区左下角点坐标为(XV1,YV1),宽为LV,高为HV,已知窗口中有一点A(XA,YA),在视区中对应的坐标为A’(X’A,Y’A)。试计算A’的坐标值。(要求用齐次坐标进行变换,列出变换矩阵,列出计算式子,不要求计算结果)

A θo (XW1,YW1)

(XV1,YV1)

9、用Weiler-Atherton算法对以下凹区域进行裁剪,请分别建立主多边形和裁剪多边形的顶点表,进行裁剪并输出裁剪后多边形的顶点序列。

说明:1)为主多边形和裁剪多

S3 S4 边形设定方向

S7 S8 2)一系列交点中,I1I2I3是入

点,I4是出点

C2 I2 C3 3)建立两类交点表

S6 I3 S5 4)裁剪,输出新的顶点序列: I3S6I2C3,I1I4C1

主多边形 S1

S2 S3 S4 S5 I3 S6 I2 S7 S8 S9 I1 I4

S9

C1

S2

I1

I4 C4 S1

说明:实线为主多边形,虚线为裁剪多边形

裁剪多边形

C1 I1 C2 I2 C3 I3 C4 I4 C1

S1

10、分析边标志算法的实现过程,并写出其算法的C语言描述。

11、采用扫描线算法对多边形进行填充,请写出EL、AEL的结构,并分析扫描线算法的步骤和处理扫描线的步骤。

12、若用扫描线填充法将顶点为P0,P1,P2,P3,P4,P5,P6的多边形填充。请写出其边分类表EL及y=8时的活化链表。

13、已知一直线段起点(0,0),终点(-8,-3),利用Bresenham算法生成此直线段,写出生成过程中坐标点及误差ε的变化情况。并在下面的方格中,标出直线上各点

误差计算公式:误差初值??(x1)?2?y??x???(xi?1)??(xi)?2?y?2?x?(yi)?0 ??(x)??(x)?2?y?(yi)?0i?1i?14、用扫描线填充法将顶点为P0 (2,5), P1(2,10),P2(9,6),P3(16,11),P4(18,4),

P5(12,2),P6(7,2)的多边形填充。写出填充步骤。

P3 P1

P2 P4 P0

P6 P5

15、平面上给定三个顶点Qi(i=0,1,2),试构造一条插值这三个顶点的二次Bezier曲线。要求简述基本原理并画出示意图。

16、给定顶点P0P1P2P3P4P5P6构成的控制多边形,绘出三次B样条曲线的形状示意图。 要求:简要说明作图过程,保留作图辅助线,作出(或文字说明)曲线上各特征点的切线矢量。

画出以P0P1P2 P3决定的地0段3次样条曲线:

M1为P0P2的中点,A点位于P1M1的1/3处,A点的切矢平行于P0P2,且等于P0P2的1/2,A点的二阶导数矢量为中线矢量P1M1的两倍;M2为P2P3的中点,B点位于P2M2的1/3处,A点的切矢平行于P1P3,且等于P1P3的1/2,B点的二阶导数矢量为中线矢量P2M2的两倍;

正确标出A、B两点、 指出A、B点的切矢、 指出A、B点的二阶导数矢量

以同样的方法画出其它样条曲线。

16、如图,取正方形四个顶点P0,P1,P2,P3作为特征多边形顶点,采用二次B样条曲线绘出光滑封闭曲线的形状示意图。采用三次B样条曲线绘出光滑封闭曲线的形状示意图。

要求:简要说明作图过程,保留作图辅助线,作出(或文字说明)曲线上各特征点的切线矢量。

17、给定四个顶点Q0(10,10),Q1(10,110),Q2(110,110),Q3(110,10),绘出插值该四个顶点的三次B样条曲线的形状示意图。

要求:简要说明作图过程,保留作图辅助线,作出(或文字说明)曲线上各特征点的切线矢量。

18.读下面的程序并找出程序中的错误: #include main() {

int a=150,b;

int driver=DETECT,mode; initgraph(driver,mode,\for(b=10;b<=140;b+=10) ellipse(320,240,0,360,a-b,b); }

19.读下面的程序并说出程序执行结果: #include #include void main() {

int i,c,x=5,y=6;

int driver=DETECT,mode; printf(\scanf(\

initgraph(&driver,&mode,\cleardevice(); setcolor(9); for(i=c;i

rectangle(x,y,x+140,y+140); x=x+70; y=y+50;

setfillstyle(SOLID_FILL,i); floodfill(x,y,i); } getch(); closegraph(); }

20.读下面的程序并说出程序执行结果: #include #include #include void main() {

int i,t,x=300,y=50; int driver=DETECT,mode;

联系客服:779662525#qq.com(#替换为@)