三维图形几何变换算法实验_计算机图形学基础课后答案

本文深入探讨了计算机图形学的基础知识,包括图形的几何要素、交互式技术、基本图形生成算法和二维变换。重点讲解了中点Bresenham算法及其在直线和圆弧绘制中的应用,并介绍了二维和三维变换矩阵,如旋转和平移。同时,文章通过实例详细解释了线段和多边形的裁剪方法,以及三维观察中的正投影变换。
摘要由CSDN通过智能技术生成

第一章 绪论

概念:计算机图形学、图形、图像、点阵法、参数法、

图形的几何要素、非几何要素、数字图像处理;

计算机图形学和计算机视觉的概念及三者之间的关系;

计算机图形系统的功能、计算机图形系统的总体结构。

第二章 图形设备

图形输入设备:有哪些。

图形显示设备:CRT的结构、原理和工作方式。

彩色CRT:结构、原理。

随机扫描和光栅扫描的图形显示器的结构和工作原理。

图形显示子系统:分辨率、像素与帧缓存、颜色查找表等基本概念,分辨率的计算

第三章 交互式技术

什么是输入模式的问题,有哪几种输入模式。

第四章 图形的表示与数据结构

自学,建议至少阅读一遍

第五章 基本图形生成算法

概念:点阵字符和矢量字符;

直线和圆的扫描转换算法;

多边形的扫描转换:有效边表算法;

区域填充:4/8连通的边界/泛填充算法;

内外测试:奇偶规则,非零环绕数规则;

反走样:反走样和走样的概念,过取样和区域取样。

5.1.2 中点 Bresenham 算法(P109)

斜率 K

误差项 d

理想点 Q

取下一个点

d 更新

<1

<0

在中点上

取上点

 d+2△x-2△y

>=0

在中点下

取下点

d-2△y

>1

<0

在中点右

取右点

 d-2△x+2△y

>=0

在中点左

取左点

d-2△x

<0

在中点左

取左点

 d-2△x+2△y

>=0

在中点右

取右点

d-2△x

>-1

<0

在中点下

取下点

 d+2△x-2△y

>=0

在中点上

取上点

d-2△y

5.1.2 改进 Bresenham 算法(P112)

斜率 K

改进误差项 e

理想点 Q

取下一个点

e 更新

<1

<0

在中点上

取上点

 e-2△x

>=0

在中点下

取下点

e+2△y

>1

<0

在中点右

取右点

 e-2△y

>=0

在中点左

取左点

e+2△x

<0

在中点左

取左点

e-2△y

>=0

在中点右

取右点

e+2△x

>-1

<0

在中点下

取下点

 e-2△x

>=0

在中点上

取上点

e+2△y

习题解答

习题5 (P144)

5.3 试用中点Bresenham算法画直线段的原理推导斜率为负且大于1的直线段绘制过程

(要求写清原理、误差函数、递推公式及最终画图过程)。(P111)

解: k<=-1>=1  y为最大位移方向

故有 7baed63cc7cb740feb017213eb3e1323.png

构造判别式: fb69e2bce73bdc9345fd2a1e4221dbf2.png

推导d各种情况的方法(设理想直线与y=yi+1的交点为Q):

所以有: yQ-kxQ-b=0  且yM=yQ

     d=f(xM-kxM-b-(yQ-kxQ-b)=k(xQ-xM)

所以,当k<0,

d>0时,M点在Q点右侧(Q在M左),取左点  Pl(xi-1,yi+1)。

d<0时,M点在Q点左侧(Q在M右),取右点  Pr(xi,yi+1)。

d=0时,M点与Q点重合(Q在M点),约定取右点 Pr(xi,yi+1) 。

所以有f6d7e0681ccde4f752c38ac13313a58c.png

递推公式的推导:

   d2=f(xi-1.5,yi+2)

当d>0时,

   d2=yi+2-k(xi-1.5)-b  增量为1+k

     =d1+1+k

当d<0时, 

   d2=yi+2-k(xi-0.5)-b  增量为1

     =d1+1

当d=0时,

       12106980c4fb90552924f6263b3376b3.png

5.7 利用中点 Bresenham 画圆算法的原理,

 推导第一象限y=0到y=x圆弧段的扫描转换算法

(要求写清原理、误差函数、递推公式及最终画图过程)。(P115)

35bcf6592cc844cc3ae72695170a5cb2.png

y坐标

圆心角 α

误差项 d

理想点 Q

取下一个点

d 更新

y=0
y=x

0°<=α<=45°

<0

在中点右

取右点

 d+2y+3

>=0

在中点左

取左点

d-2(y-x)+5

y=x
y=1

45°<=α<=90°

<0

在中点上

取上点

 d+2x+3

>=0

在中点下

取下点

d-2(x-y)+5

解:在x=y到y=0的圆弧中,(R,0)点比在圆弧上,算法从该点开始。

最大位移方向为y,由(R,0)点开始,y渐增,x渐减,每次y方向加1,x方向减1或减0。

设P点坐标(xi,yi),下一个候选点为右点Pr(xi,yi+1)和左点Pl(xi-1,yi+1),

取Pl和Pr的中点M(xi-0.5,yi+1),设理想圆与y=yi+1的交点Q,

构造判别式:

     d=f(xM,yM)=(x-0.5)2+(yi+1)2+R2

当d<0时,M在Q点左方(Q在M右),取右点Pr(xi,yi+1)

当d>0时,M在Q点右方(Q在M左),取左点Pl(xi-1,yi+1)

当d=0时,M与Q点重合,约定取左点Pl(xi-1,yi+1)

所以有:be77f1de95b65bf13d982e1e391b55ea.png

推导判别式:

d>=0时,取左点Pl(xi-1,yi+1),下一点为(xi-1,yi+2)和(xi-2,yi+2)

                      64c71b9a2c9e4ff15ddbb911ad923731.png

d<0时,取右点Pr(xi,yi+1),下一点为(xi,yi+2)和(xi-1,yi+2)

                       92ddff2009962e2bb5279c028a17556d.png

     d0=f(R-0.,1)=R2-R+0.25+1-R2=1.25-R

5.11 如图5-59所示多边形,若采用扫描转换算法(ET边表算法)进行填充,

试写出该多边形的边表ET和当扫描线Y=4时的有效边表AET(活性边表)。(P125)

38d7087507d405070656ec5e40f8a22c.png

解:

 1)边表ET表 

x|ymin

ymax

1/k

next

c12c4b552ee182a776960b9c3b48d84d.png

 2)y=4时的有效边表AET

x

ymax

1/k

next

609be4141d28ca28f9efdeab1bf1d85f.png

注意:水平线不用计算。

5.22 构造两个例子,一个是4-连通图,其边界是8-连通的,

另一个是8-连通图,其边界是4-连通的。(P132)

解:

4-连通区域          8-连通区域

4d2a9ded57f24eeff67932d75869951b.png                       414aeefdb1b4733901858e1e6a91d5ce.png

第六章 二维变换及二维观察

概念:齐次坐标,窗口,视区,二维观察流程,

字符裁减的三种策略,外部裁减

计算:二维几何变换

直线裁减:区域编码法和梁友栋算法

多边形裁减:逐边裁减法和双边裁减法

6.1.3 二维变换矩阵(P147)

3阶二维变换矩阵

子矩阵功能

a b p

c d q

l m s

abcd 比例旋转 pq 投影变换

lm   平移变换 s 整体比例

6.2.3 旋转变换(P149)

逆时针变换矩阵

顺时针变换矩阵

 cosθ sinθ   0

-sinθ cosθ  0

    0       0       1

cosθ -sinθ    0

sinθ   cosθ  0

   0         0       1

6.2.5 相对任一参考点的二维几何变换(P155)

例如:相对(xf,yf)点的旋转变换

平移到
坐标原点

旋转角度θ

反平移回
原来位置

1  0  0

0  1  0

-xf -yf 1

 cosθ sinθ 0

-sinθ cosθ 0

   0    0   1

1   0   0

0   1   0

xf  yf 1

习题6 (P177)

6.7 求四边形 ABCD 绕 P(5,4)旋转45度的变换矩阵和端点坐标,

画出变换后的图形。(P147 P148 P155)

解:变换的过程包括:

 1)平移:将点P(5,4)平移至原点(0,0),

 2)旋转:图形绕原点(0点)旋转45度,

 3)反平移:将P点移回原处(5,4),

 4)变换矩阵:平移—旋转—反平移

22e4e16bc8dbe01e5bd23ed661a19483.png

 5)变换过程:四边形 ABCD 的规范化齐次坐标(x,y,1) * 3阶二维变换矩阵

ea775c4af8cdeea2235ad137ef5dfe16.png

    由旋转后四边形 ABCD 的规范化齐次坐标(x',y',1)可写出顶点坐标:

  A'(6.4,1.2) B'(7.1,4.7) C'(4.3,8.5) D'(2.2,1.2)

6.15 用梁友栋算法裁减线段AB,B点的坐标改为(-2,-1)(P170)

解:以A(3,3)为起点,B(-2,-1)为终点

所以有x1=3,y1=3,x2=-2,y2=-1,wxl=0,wxr=2,wyb=0,wyt=2

构造直线参数方程:

x=x1+u(x2-x1)

0

x1

x

x2

y

A(3,3)

3

  C(7

/4,2)

2

D(

0,3/

5) 1

-2

 -1

0

1

2

   3

x

B(-2,-1)

 -1

  x=x1+u(x2-x1)     (0<=u<=1)< span="">

  y=y1+u(y2-y1)

 把 x1=3,y1=3,x2=-2,y2=-1 代入得

  x=3-5u

  y=3-4u

计算各个p和q值有:

  p1=x1-x2=5    q1=x1-wxl=3

  p2=x2-x1=-5   q2=wxr-x1=-1

  p3=y1-y2=4    q3=y1-wyb=3

  p4=y2-y1=-4   q4=wyt-y1=-1

根据,uk=qk/pk 算出

   pk<0时:< sub="">u2=1/5 u4=1/4

   pk>0时:u1=3/5 u3=3/4

  umax=MAX(0,u2,u4)=MAX(0,1/5,1/4)=1/4   (取最大值)

  umin=MIN(u1,u3,1)=MIN(3/5,3/4,1)=3/5   (取最小值)

由于 umaxmin ,故此直线AB有一部分在裁减窗口内,

 pk<0时,< sub="">将 umax=1/4 代入直线参数方程

    x=x1+u(x2-x1)

  x=3+1/4*(-5)=3-5/4=7/4

   y=y1+u(y2-y1)

  y=3+1/4*(-4)=2

求出直线在窗口内部分的端点C(7/4,2)

 pk>0时,将 umin=3/5代入直线参数方程

    x=x1+u(x2-x1)

  x=3+3/5*(-5)=0

    y=y1+u(y2-y1)

  y=3+3/5*(-4)=3/5

求出直线在窗口内部分的端点D(0,3/5)。

所以,直线在窗口内部分的端点为C(7/4,2),D(0,3/5)。

第七章 三维变换及三维观察

概念:几何变换、投影变换、透视投影、平行投影、灭点

平面几何投影的分类以及分类原则

计算:三维几何变换、三视图

7.2 三维几何变换(P180)

4阶三维变换矩阵

子矩阵功能

a b c p

d e f q

g h i r

l m n s

abcdefghi 比例旋转 pqr 透视投影

    lmn  平移变换  s  整体比例

    整体比例变换(P182)

    s>1 时,整体缩小,如 2 表示2:1缩小。

    s<1 时,整体放大,如 1/2 表示1:2放大。

7.3.1 正投影

 1.主视图 V(P191)

   4阶三维变换矩阵

y 轴方向投影

1    0     0    0

0    0   0    0

0    0    1     0

0    0    0     1

 2.俯视图 H

4阶三维变换矩阵

1   0     0     0

0   0   -1     0

0   0    0      0

0   0  -z0   1

z 轴方向投影

绕 x 轴旋转-90度

z 轴方向平移-1

1    0   0    0

0    1    0    0

0    0    0    0

0    0    0    1

1            0            0            0

0  cos(-90°) sin(-90°) 0

0 -sin(-90°) cos(-90°)0

0            0             0             1

1    0    0     0

0   1    0     0

0   0    1     0

0    0  -z0  1

3.侧视图 W(P192)

4阶三维变换矩阵

   0      0    0    0

 -1      0    0    0

   0      0   1    0

-x0  0  0     1

x 轴方向投影

绕 z 轴旋转90度

x 轴方向平移-1

0   0   0   0

0    1   0   0

0   0    1   0

0   0    0    1

0    cos90° sin90° 0

0 -sin90° cos90° 0

0          0         1     0

0          0        0      1

 1      0     0     0

 0      1     0     0

 0      0     1     0

-x0 0     0      1

习题7 (P213)

7.5 求空间四面体关于点 P(2,-2,2)整体放大2倍的变换矩阵,

    画出变换后的图形。(P182)

解:关于点 P(2,-2,2)整体放大两倍,

变换矩阵:点 P(2,-2,2)平移至原点--比例变换放大两倍--反平移回点 P(2,-2,2)。

d5d3891a3c331de83a2e37e704b9296c.png

变换过程:空间四面体 ABCD 的规范化齐次坐标(x,y,z,1) * 4阶三维比例变换矩阵

ce281dc91b7946a53c3681340cdc305d.png

  空间四面体 ABCD 的齐次坐标(x',y',z',1/2)转换成规范化齐次坐标

顶点

 x  y   z  1

A

B

C

D

 2,2,-2,1

 2,6,-2,1

-2,6,-2,1

 2,6, 2,1

    由比例变换后规范化齐次坐标(x',y',z',1)可写出顶点坐标:

  A'(2,2,-2) B'(2,6,-2) C'(-2,6,-2) D'(2,6,2)

7.7 求空间四面体 ABCD 三视图的变换矩阵(平移矢量均为1),并作出三视图。(P180)

解:

 1)主视图V(P191)

   空间四面体 ABCD 的规范化齐次坐标矩阵 * Y轴方向投影矩阵(不需要平移)

736610bb17ea675d093165ea25f76fc0.png

 2)俯视图H(P191)

  Z轴方向投影矩阵 * 绕X轴旋转-90度矩阵 * Z轴方向平移-1矩阵

e0b7bb00d279472723f2324413e4453f.png

  空间四面体 ABCD 的规范化齐次坐标矩阵 * 投影变换矩阵(可以直接写出)

933d014e2356fda7fa8421992a44d367.png

 3)侧视图W(P192)

  X轴方向投影矩阵 * 绕Z轴旋转90度矩阵 * X轴方向平移-1矩阵

00ecba7b5734e21fd1d164b307e33be6.png

  空间四面体 ABCD 的规范化齐次坐标矩阵 * 投影变换矩阵(可以直接写出)

6eae0b17d257612dd2fd458fd1eafb0e.png

 4)画图注意:三个图画在同一坐标系中,点与点的连接关系以及直线的可见性问题。

试题分析

《计算机图形学》考试试题

一、填空

2.帧缓存(P42):(1024*768*8/8)/1024=768kB

  颜色位面数(P43):24

  总颜色数:(2^8)^3=2^24=(2^4)*(2^20)=16MB

二、名词解释

三、简答与计算

3.边标志算法(P128)

解:打标记:x1,x2,x3,x4

     填充:x1与x2,x3与x4扫描线区间的像素点。

5.正则集合运算(P88)

解:通常意义下的集合求交运算:C=A∩B   有一条弧立边

     正则集合运算:C=A∩*B   无弧立边

四、计算作图题

1.中点 Bresenham 算法(P109)

斜率 K

误差项 d

理想点 Q

取下一个点

d 更新

<1

<0

在中点上

取上点

 d+2△x-2△y

>=0

在中点下

取下点

d-2△y

解:直线斜率:k=(6-1)/(9-1)=5/8  0

    计算初值:△x=9-1=8 △y=6-1=5 d=△x-2△y=8-2*5=-2

  取上点:2△x-2△y=2*8-2*5=6  d+2△x-2△y=-2+6=4

  取下点:2△y=2*5=10  d-2△y=4-10=-6

x

y

误差项 d

取下一个点

d 更新

1

1

<0

取上点

 d+2△x-2△y=4

2

2

>0

取下点

d-2△y=-6

3

2

<0

取上点

d+2△x-2△y=0

4

3

=0

取下点

d-2△y=-10

5

3

<0

取上点

d+2△x-2△y=-4

6

4

<0

取上点

d+2△x-2△y=2

7

5

>0

取下点

d-2△y=-8

8

5

<0

取上点

d+2△x-2△y=-2

9

6

2.改进的有效边表算法(P125)

解:1)边表 ET:交点x(最小y坐标 ymin)

x|ymin

ymax

1/k

next

x坐标

1

CB边

CA边

2

6

5

-4/3

6

9

-2/7

/

3

4

BA边

5

2

9

-1/2

/

6
7
8
9

   2)y=4的有效边表 AET:交点x

x

ymax

1/k

next

y=4

|

与CB边相交

3.3

5

-4/3

—————————

|

与CA边相交

5.4

9

-1/2

 /

  3)y=4时的填充交点对:(3.3,4) (5.4,4)

3.求三角形绕B点(2,5)旋转 θ 的变换矩阵。

  求三角形绕B点顺时针旋转90度后各端点坐标。(P125)

解:1)三角形绕B点(2,5)旋转 θ 的变换矩阵

      T=Tt * TR * Tt-1

平移到
坐标原点

旋转角度θ

反平移回
原来位置

 1  0  0

 0  1  0

-2 -5  1

 cosθ sinθ 0

-sinθ cosθ 0

   0    0   1

1  0  0

0  1  0

2  5  1

   2)三角形绕B点顺时针旋转90度的变换矩阵,θ=-90°

     T=Tt * TR * Tt-1

平移到
坐标原点

旋转角度θ

反平移回
原来位置

 1  0  0

 0  1  0

-2 -5  1

cos90°  -sin90°  0

sin90°   cos90°  0

   0      0     1

1  0  0

0  1  0

2  5  1

         变换过程:三角形 ABC 的规范化齐次坐标(x,y,1) * 3阶二维变换矩阵

     P=P * T

      得到三角形 ABC 变换后的规范化齐次坐标(x',y',1)

顶点

 x  y  1

A

B

C

 4.6  2  1

  2   5  1

  0  -1  1

        可以写出顶点坐标:A'(4.6,2) B'(2,5) C'(0,-1) 

4.用编码裁剪算法裁剪线段P1(0,2)P2(3,3)。要求写出:(164)

  1)窗口边界划分的9个区间的编码原则;

  2)线段端点的编码;

  3)裁剪的主要步骤;

  4)裁剪的输出结果。

解:线段P1(0,2)P2(3,3)的编码裁剪

y

1001

1000

1010

4

0001

P2(3,3)

0000

S

 0010

3

P1(0,2) 2

1

0101

0100

0110

0

  1

  2

     3

  4

     x

  1)窗口边界划分的9个区间的编码原则;

编码

D3

D2

D1

D0

窗口外

上边top

下边bottom

右边right

左边left

条件

y>wyt

wyt=4

y

wyb=1

x>wxr

wxr=4

x

wxl=1

取值

D3=1

D2=1

D1=1

D0=1

  2)线段端点的编码;

    P1 code1=0001,  P2 code2=0000

  3)裁剪的主要步骤;

    输入 P1(0,2), P2(3,3), wyt=4, wyb=1, wxr=4, wxl=1;

    P1 code1=0001,  P2 code2=0000;

    code1|code2≠0 不能简取;code1&code2=0 不能简弃;

  求线段 P1(0,2)P2(3,3)和 窗口左界wxl=1 的交点,

  把 wxl=1 代入直线方程求出 y=kx+b=(1/3)*x+2=2.3

    交点坐标S(1,2.3)替换端点坐标P1(0,2),使P1坐标为(1,2.3);

  去掉P1S线段,输出线段P1P2

  4)裁剪的输出结果:P1(1,2.3)P2(3,3)。

5.用改进 Bresenham 算法画直线段的原理,

   推导斜率 K>1 的直线段的扫描转换算法。(P112)

斜率 K

改进误差项 e

理想点 Q

取下一个点

e 更新

>1

<0

在中点右

取右点

 e-2△y

>=0

在中点左

取左点

e+2△x

解: k>1  y为最大位移方向

  故有

yi+1=

yi+1

xi+1=

xi+1 (d>0.5  取右点Pr)

xi   (d<=0.5 取左点Pl)

  误差项 d 的初值为0  d=d+1/k

  当 x 方向走一步 d-1

  令 e=d-0.5

yi+1=

yi+1

xi+1=

xi+1 (e>0  取右点Pr)

xi   (e<=0 取左点Pl)

  改进误差项 e 的初值为 e=d-0.5=0-0.5=-0.5;

  避免计算小数和除法,改进误差项 e 用2e△y。

  算法步骤:

  1)输入:Po(xo,yo)  P1(x1,y1)

  2)计算初值:△x,△y, e=2e△y=2*(-0.5)△y=-△y, x=xo, y=yo

  3)画点:P(x,y)

  4)改进误差项 e 更新:

斜率 K

改进误差项 e

理想点 Q

取下一个点

e 更新

>1

<0

在中点右

取右点

 e-2△y

>=0

在中点左

取左点

e+2△x

### 回答1: 计算机图形学基于MFC三维图开发课后习题的答案可以有很多不同的方案,具体的答案取决于习题的要求和难度。这里给出一种可能的答案: 1、基于MFC的三维图开发可以使用MFC的类库提供的函数来创建窗口和图对象。通过重写窗口的消息处理函数,可以实现对鼠标、键盘等各种输入事件的响应。 2、在三维图开发中,常常需要使用3D模型进行渲染。可以使用第三方的3D建模软件,如Blender或Maya,创建模型,并将其导出为常见的文件格式,如.obj或.stl。 3、为了实现三维场景的渲染,通常需要使用图学的基本概念和算法,如光栅化、投影变换等。可以使用OpenGL或DirectX等图库来实现这些算法,并将结果绘制到MFC窗口上。 4、在MFC的三维图开发中,可以使用相机模型来模拟视角。根据相机的位置和方向,将3D模型投影到屏幕上。可以通过修改相机的位置和方向来改变视角,实现场景漫游等功能。 5、为了提高渲染效果,可以使用几何变换、光照模型等技术。几何变换可以对模型进行平移、旋转和缩放等操作,光照模型可以模拟光线在物体表面的反射和折射,产生逼真的光影效果。 6、在MFC的三维图开发中,还可以实现一些交互功能,如鼠标选择、对象拖拽等。可以通过捕捉鼠标事件和在3D场景中检测鼠标射线与对象的相交关系来实现这些功能。 综上所述,基于MFC的三维图开发涉及到多个方面,包括MFC的窗口和消息处理、3D模型的创建和渲染、图学基本概念和算法的应用、相机模型的使用、几何变换和光照模型的实现以及交互功能的添加。希望以上回答能够对你有所帮助。 ### 回答2: 计算机图形学基于MFC三维图开发课后习题答案由于题目的具体要求和内容没有给出,无法提供具体的题目答案计算机图形学基于MFC三维图开发的课程主要涉及三维图的建模、渲染和动画等方面的知识。学生在课后的习题中可能会遇到如下的问题和对应的解答方法: 1. 如何在MFC中创建一个三维场景? 答:可以使用MFC的视图类派生自CDocument类,重写onDraw函数来绘制三维场景。可以通过OpenGL或DirectX来实现三维图的渲染。 2. 如何实现三维图的旋转和缩放? 答:可以通过修改场景的观察矩阵和投影矩阵来实现三维图的旋转和缩放。可以使用OpenGL或DirectX提供的函数进行矩阵变换操作。 3. 如何实现光照效果? 答:可以通过设置光源的位置、光照强度和材质属性来实现三维图的光照效果。可以使用OpenGL或DirectX提供的光照相关函数来设置光照效果。 4. 如何实现三维图的动画效果? 答:可以通过修改场景中的对象的位置、旋转角度和缩放比例来实现三维图的动画效果。可以使用定时器或线程来控制动画的更新。 上述只是一些可能遇到的问题和相应的解答方法,具体的题目和答案需要根据实际情况来确定。希望以上回答能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值