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
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 作线性变化。