文档库 最新最全的文档下载
当前位置:文档库 › Notes_part7

Notes_part7

Chap.5 二维几何变换

?基本几何变换

?变换的矩阵表示和齐次坐标?复合变换?其它变换

(Hearn & Baker, section from 5-1 to 5-8)

2010-4-26

Computer Graphics Dan Xu

2

5.1 基本几何变换

?几何变换改变对象的坐标描述。

?基本几何变换包括:平移(translation)、旋转(rotation)和缩放(scaling)操作。

平移

将对象沿直线路径从一个坐标位置移到另一个坐标位置的重定位。即将每个点的坐标( x, y )加上一个平移量t x , t y 得到新的位置坐标( x’, y’

''x

y

x x t y y t =+=+x

x’

y

y’t y

t x

则二维平移变换可用矩阵表示为:

''x y t x x t y y ??????=+????????????

习惯将点P 的坐标用列向量表示,即x y

??

=??

??

P Or '=+P P T

where

'''x y ??=??

??

P x y t t ??=??

??

T 图元平移变换的实现:

?直线的平移?圆的平移

?多边形的平移?其他图形

将图形的控制点平移,再在新位置重画该图形

也可以将表示图形的所有象素坐标平移并画出。

Not suitable for any transform.

旋转

二维旋转是将物体沿xy 平面内的圆弧路径重定位。

输入:旋转中心( x r , y r )和旋转角θ

0,0,θθ><逆时针旋转顺时针旋转

旋转中心为原点的旋转变换:

'cos sin 'sin cos x x y y x y θθθθ

=?=+(x’, y’)

(x, y)

θ?

r

r

二维旋转的矩阵形式:

其中

为旋转矩阵

cos sin sin cos θθθ

θ???=?

???

R θ

?θ?θ?θ?θ?θ?cos sin sin cos )sin('sin sin cos cos )cos('r r r y r r r x +=+?=?=+?=P

R P ?='

2010-4-26Computer Graphics Dan Xu 5旋转中心为任意点的旋转变换:

如旋转中心为( x r , y r ), 则旋转方程为:

'()cos ()sin '()sin ()cos r r r r r r x x x x y y y y x x y y θθθθ

=+???=+?+?旋转中心移至坐标原点

以原点为中心旋转

(x’, y’)(x, y)

θ

?

r

r

(x r , y r )

旋转中心还原到原坐标

2010-4-26Computer Graphics Dan Xu 6

图元旋转的实现:

?直线的旋转?多边形的旋转?曲线旋转?圆和椭圆的旋转

将图形的控制点旋转,再在新位置重画该图形

刚体(rigid)变化:

不改变物体形状,不发生形变的几何变换。物体上所有点的变化是一样的。包括平移和旋转变换。

缩放

缩放变换改变物体的尺寸。由图形顶点坐标分别乘以x 方向和y 方向的缩放系数s x 和s y 来实现:

矩阵形式:

0'0'x

y s x x s y y ??????=???????????

?

?Or S 称为缩放矩阵

00

x y s s ??=????

s 上述变换以原点为基点,既改变图形尺寸,又重定位

x

y

P

S P ?='y

x s y y s x x ?=?=',

'以固定点为基点的缩放,图形相对于固定点缩放

固定点可以是图形对象的顶点、中点或其它任意位置。

'()'()f f x f f y

x x x x s y y y y s =+?=+?'(1)'(1)

x f x y f y x x s x s y y s y s =?+?=?+?常数

矩阵形式:常数矢量

图元缩放的实现:

?直线和多边形:顶点缩放重画

?其他图形:将缩放变换加到物体定义参数上,例如椭圆的长、短轴半径,再重画。

C P S P +?='以中心为

固定点

x f

y f

2010-4-26

Computer Graphics Dan Xu 95.2 变换的矩阵表示和齐次坐标

二维平移、旋转和缩放变换都可表示成下述的矩阵形式:

其中,M 1是包含乘法系数的2x2矩阵,M 2是包含平移量的列矩阵

缺点:

当完成连续的平移、旋转、或缩放变换时,必须每次一步地计算变换坐标,效率低,产生不必要的中间结果;求逆需要多个步骤。

能否将变换组合起来,使最后的坐标位置直接从初始坐标得到

x

y

2

1M P M P +?='2010-4-26Computer Graphics Dan Xu 10

齐次坐标

所谓齐次坐标就是将一个原本是n 维的向量用一个n+1维向量来表示。

笛卡儿坐标( x, y )的齐次坐标表示为( x h , y h , h ),h 为任意实数,并且

,h

h x y x y h

h

=

=

( x, y )的齐次坐标表示为( hx, hy, h )( x, y )可以有无穷多个等价齐次坐标表示如果h = 1, 则二维位置的齐次坐标为( x, y, 1)h = 0 表示二维空间的无穷远点

利用齐次坐标可以将所有几何变换表示成为矩阵乘法,坐标表示为三维列向量

Z=1平面上的点

平移

称T( t x , t y )为平移矩阵,其逆矩阵T -1= T(-t x , -t y )绕原点旋转变换

称为旋转矩阵,逆矩阵为关于原点的缩放变换

称为缩放矩阵,逆矩阵S -1=S(1/s x , 1/s y )

(,)

x y s s S ()

θR 1

()()

R

R θθ?=?'(,)x y t t =?P T P

'()θ=?P R P

'(,)x y s s =?P S P

5.3 复合变换

将多个变换矩阵相乘成为一个变换,称为变换矩阵的合并(Concatenation)或复合(Composition), 最终形成的变换为复合变换。

平移

考虑两个平移变换作用于坐标点P ,最后的变换位置P’可计算为:

?如果坐标点用列向量表示,则按从右到左的顺序进行矩阵合并,即后面的变换左乘以前面的变换;

?如果坐标点用行向量表示,则按从左到右的顺序进行矩阵合并,即后面的变换右乘以前面的变换;

P

T T P T T ??=??=)},(),({}),({),('11221122y x y x y x y x t t t t t t t t P

2010-4-26

Computer Graphics Dan Xu

13复合变换为:

连续平移是相加的!

22111212(,)(,)(,)

x y x y x x y y t t t t t t t t ?=++T T T 旋转

作用于点P 的两个连续旋转产生的变换位置为:

连续旋转是相加的!

2112()()()

θθθθ?=+R R R 12'()θθ=+?P R P

复合变换为:P

R R P R R P ??=??=)}()({})({)('1212θθθθ2010-4-26Computer Graphics Dan Xu 14

缩放

连续缩放变换是相乘的!

复合变换为:

P

P ??=??=)},(),({}),({),('11221122y x y x y x y x s s S s s S s s S s s S P )

,(),(),(21211122y y x x y x y x s s s s S s s S s s S ??=?任意旋转中心的旋转

1.平移:将旋转中心位置移到坐标原点;

2.旋转:绕坐标原点旋转;

3.

平移:恢复旋转中心的位置。

步骤

复合矩阵为:绕( x f , y f )的旋转变换

通用固定点的缩放

1.平移:将固定点位置移到坐标原点;

2.缩放:关于坐标原点缩放;

3.

平移:恢复固定点的位置。

步骤

复合矩阵为:

通用定点缩放

112()(,)()

R S s s R θθ???

2010-4-26Computer Graphics Dan Xu 17

合并特性

?矩阵复合满足结合律:

?矩阵复合不满足交换律:因此,变换矩阵合并时,不可以改变次序,但可以组合。

?≠?A B B A

A ·

B ·

C =(A ·B)·C =A ·(B ·C )

2010-4-26

Computer Graphics Dan Xu

18

通用复合变换

''10

11xx xy

x yx yy y x rs rs trs x y rs rs trs y ??????

??????=???????????????????

ij

rs 包含多重旋转和缩放变换中的系数;

x y

trs trs 和 包含平移、旋转中心和固定点坐标,以及旋转角和缩放

参数组合的平移项

例如:一个物体绕其中心坐标( x c , y c )缩放、旋转并平移,则复合变换矩阵为:

(,)(,,)(,,,)

cos sin (1cos )sin sin cos (1cos )sin 0

1x y c c c c x y x y c x c y x x y c y c x y T t t R x y S x y s s s s x s y s t s s y s x s t θθθ

θθθθθθ????++????=?++??

????

一旦复合变换矩阵计算出来,任何变换序列所需的最大计算量就是四次乘法和四次加法:

变换操作的有效实现是:先形成变换矩阵,然后合并所有变换序

列,最后再作用于坐标点。

''xx xy x yx yy y

x x rs y rs trs y x rs y rs trs =?+?+=?+?+#include #include "graphics.h"typedef float Matrix3x3[3][3];Matrix3x3 theMatrix;

void matrix3x3SetIdentity (Matrix3x3 m){

int i,j;

for (i=0; i<3; i++) for (j=0; j<3; j++) m[i][j] = (i = = j);}

Read and run the program :

prog5CompositeTransformation2D.txt

2010-4-26Computer Graphics Dan Xu

21

/* Multiplies matrix a times b, putting result in b */void matrix3x3PreMultiply (Matrix3x3 a, Matrix3x3 b){

int r,c;

Matrix3x3 tmp;

for (r = 0; r < 3; r++)for (c = 0; c < 3; c++)tmp[r][c] =

a[r][0]*b[0][c] + a[r][1]*b[1][c] + a[r][2]*b[2][c];for (r = 0; r < 3; r++)for (c = 0; c < 3; c++)b[r][c] = tmp[r][c]; }

2010-4-26

Computer Graphics Dan Xu

22

void translate2 (int tx, int ty){

Matrix3x3 m;

matrix3x3SetIdentity (m);m[0][2] = tx;m[1][2] = ty;

matrix3x3PreMultiply (m, theMatrix);}

void scale2 (float sx, float sy, wcPt2 refpt){

Matrix3x3 m;

matrix3x3SetIdentity (m);m[0][0] = sx;

m[0][2] = (1 -sx) * refpt.x;m[1][1] = sy;

m[1][2] = (1 -sy) * refpt.y;

matrix3x3PreMultiply (m, theMatrix);}

void rotate2 (float a, wcPt2 refPt){

Matrix3x3 m;

matrix3x3SetIdentity (m);a = pToRadians (a);m[0][0] = cosf (a);m[0][1] = -sinf (a);

m[0][2] = refPt.x * (1 -cosf (a)) + refPt.y * sinf (a);m[1][0] = sinf (a);m[1][1] = cosf (a);

m[1][2] = refPt.y * (1 -cosf (a)) -refPt.x * sinf (a);matrix3x3PreMultiply (m, theMatrix);}

void transformPoints2 (int npts, wcPt2 *pts){

int k;float tmp;

for (k = 0; k < npts; k++) {

tmp = theMatrix[0][0] * pts[k].x + theMatrix[0][1] * pts[k].y + theMatrix[0][2];

pts[k].y = theMatrix[1][0] * pts[k].x + theMatrix[1][1] * pts[k].y + theMatrix[1][2];pts[k].x = tmp;}}

2010-4-26Computer Graphics Dan Xu 25void main (int argc, char ** argv){

wcPt2 pts[3] = { 50.0, 50.0, 150.0, 50.0, 100.0, 150.0};wcPt2 refPt = {100.0, 100.0};

long windowID = openGraphics (*argv, 200, 350);setBackground (WHITE);setColor (BLUE);pFillArea (3, pts);

matrix3x3SetIdentity (theMatrix);scale2 (0.5, 0.5, refPt);rotate2 (90.0, refPt);translate2 (0, 150);

transformPoints2 (3, pts);pFillArea (3,pts);sleep (10);

closeGraphics (windowID);}

2010-4-26Computer Graphics Dan Xu 26

5.4 其它变换

反射(或对称变换)

对称变换其实只是a 、b 、d 、e 取0、1等特殊值产生的一些特殊效果。

A.当b=d=0,a=-1,e=1时有x /=-x ,y /=y ,产生与y 轴对称的图形。

B.当b=d=0,a=1,e=-1时有x /=x ,y /=-y ,产生与x 轴对称的图形。

C.当b=d=0,a=e=-1时有x /=-x,y /=-y,产生与原点对称的图形。

D.当b=d=1,a=e=0时有x /=y,y /=x,产生与直线y=x对称的图形。

E.当b=d=-1,a=e=0时有x /=-y,y /=-x,产生与直线y=-x对称的图形。

错切变换

A.当d=0时,x /=x +by,y /=y ,此时,图形的y 坐标不变,x 坐标随

初值(x,y)及变换系数b 作线性变化。B.当b=0时,x /=x ,y /=dx+y ,此时,图形的x 坐标不变,y 坐标随

初值(x,y)及变换系数d 作线性变化。

相关文档