笛卡尔坐标系
简介
推广
产生
此类变换可以用一个3×3的矩阵来表示,其最后一行为(0, 0, 1)。该变换矩阵将原坐标(x, y)变换为新坐标(x', y'),这里原坐标和新坐标皆视为最末一行为(1)的三维列向量,原列向量左乘变换矩阵得到新的列向量:
[x']
[y'] = [m10 m11 m12] [y] = [m10*x+m11*y+m12]
[1 ]
用代数式表示如下:
x’ = m00*x+m01*y+m02;
如果将它写成按旋转、缩放、平移三个分量的复合形式,则其代数式如下:
X= (x-x0)cosθ+(y-y0)sinθ+x0
Y=-(x-x0)sinθ+(y-y0)cosθ+y0
几种典型的仿射变换:
1.public static AffineTransform getTranslateInstance(double tx, double ty)
平移变换,将每一点移动到(x+tx, y+ty),变换矩阵为:
[
[
[
(译注:平移变换是一种“刚体变换”,rigid-body transformation,中学学过的物理,都知道啥叫“刚体”吧,就是不会产生形变的理想物体,平移当然不会改变二维图形的形状。同理,下面的“旋转变换”也是刚体变换,而“缩放”、“错切”都是会改变图形形状的。)
2.public static AffineTransform getScaleInstance(double sx, double sy)
缩放变换,将每一点的横坐标放大(缩小)至sx倍,纵坐标放大(缩小)至sy倍,变换矩阵为:
[
[
[
3.public static AffineTransform getShearInstance(double shx, double shy)
剪切变换,变换矩阵为:
[
[
[
相当于一个横向剪切与一个纵向剪切的复合
[
[
[
(译注:“剪切变换”又称“错切变换”,指的是类似于四边形不稳定性那种性质,街边小商店那种铁拉门都见过吧?想象一下上面铁条构成的菱形拉动的过程,那就是“错切”的过程。)
4.public static AffineTransform getRotateInstance(double theta)
旋转变换,目标图形围绕原点顺时针旋转theta弧度,变换矩阵为:
[
[
[
5.public static AffineTransform getRotateInstance(double theta, double x, double y)
旋转变换,目标图形以(x, y)为轴心顺时针旋转theta弧度,变换矩阵为:
[
[
[
相当于两次平移变换与一次原点旋转变换的复合:
[1
[0
[0
三、仿射变换四参数求解
A、C#自定义函数实现求解:
///
四、空间对象转换
求出参数后,再利用公式对相应坐标点进行转换是一件相对简单的事件了。
示例代码:
在有限维的情况,每个仿射变换可以由一个矩阵A和一个向量
b给出,它可以写作A和一个附加的列b。一个仿射变换对应于一个矩阵和一个向量的乘法,而仿射变换的复合对应于普通的矩阵乘法,只要加入一个额外的行到矩阵的底下,这一行全部是0除了最右边是一个1,而列向量的底下要加上一个1。
AffineTransform类描述了一种二维仿射变换的功能,它是一种二维坐标到二维坐标之间的线性变换,保持二维图形的“平直性”(译注: straightness,即变换后直线还是直线不会打弯,圆弧还是圆弧)和“平行性”(译注:parallelness,其实是指保二维图形间的相对位置关系不变,平行线还是平行线,相交直线的交角不变。大二学过的复变,“保形变换/保角变换”都还记得吧,数学就是王道啊!)。仿射变换可以通过一系列的原子变换的复合来实现,包括:平移(Translation)、缩放(Scale)、翻转(Flip)、旋转(Rotation)和错切(Shear)。 此类变换可以用一个3×3的矩阵来表示,其最后一行为(0, 0, 1)。该变换矩阵将原坐标(x, y)变换为新坐标(x', y'),这里原坐标和新坐标皆视为最末一行为(1)的三维列向量,原列向量左乘变换矩阵得到新的列向
量: [x'] [m00 m01 m02] [x] [m00*x+m01*y+m02] [y'] = [m10 m11 m12] [y] = [m10*x+m11*y+m12] [1 ] [0 0 1 ] [1] [ 1 ]
示例
几种典型的仿射变换: public static AffineTransform getTranslateInstance(doubl
e tx, double ty) 平移变换,将每一点移动到(x+tx, y+ty),变换矩阵为: [ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ] (译注:平移变换是一种“刚体变换”,rigid-body transformation,中学学过的物理,都知道啥叫“刚体”吧,就是不会产生形变的理想物体,平移当然不会改变二维图形的形状。同理,下面的“旋转变换”也是刚体变换,而“缩放”、“错切”都是会改变图形形状的。) public static AffineTransform getScaleInstance(double sx, double sy) 缩放变换,将每一点的横坐标放大(缩小)至sx倍,纵坐标放大(缩小)至sy倍,变换矩阵为: [ sx 0 0 ] [ 0 sy 0 ] [ 0 0 1 ] 当sx=sy时,称为尺度缩放,sx不等于sy时,这就是我们平时所说的拉伸变换。 public static AffineTransform getShearInstance(double shx, double shy) 剪切变换,变换矩阵为: [ 1 shx 0 ] [ shy 1 0 ] [ 0 0 1 ] 相当于一个横向剪切与一个纵向剪切的复合 [ 1 0 0 ][ 1 shx 0 ] [ shy 1 0 ][ 0 1 0 ] [ 0 0 1 ][ 0 0 1 ] (译注:“剪切变换”又称“错切变换”,指的是类似于四边形不稳定性那种性质,街边小商店那种铁拉门都见过吧?想象一下上面铁条构成的菱形拉动的过程,那就是“错切”的过程。) public static AffineTransform getRotateInstance(double theta)
旋转变换1,目标图形围绕原点顺时针旋转theta弧度,变换矩阵为: [ cos(theta) -sin(theta) 0 ] [ sin(theta) cos(theta) 0 ] [ 0 0 1 ] public static AffineTransform getRotateInstance(double theta, double x, double y) 旋转变换2,目标图形以(x, y)为轴心顺时针旋转theta弧度,变换矩阵为: [ cos(theta) -sin(theta) x-x*cos+y*sin] [ sin(theta) cos(theta) y-x*sin-y*cos ] [ 0 0 1 ] 相当于两次平移变换与一次原点旋转变换的复合: [1 0 x][cos(theta) -sin(theta) 0][1 0- x] [0 1 y][sin(theta) cos(theta) 0][0 1 -y] [0 0 1 ][ 0 0 1 ][0 0 1] 这里是以空间任一点为圆心旋转的情况。
仿射几何学
研究图形在仿射变换下不变性质的几何学分支学科。设V是一个 n维向量空间,A是一个集合,其中元素称为点。如果对A中每两个点P、Q都惟一对应着V中的一个向量并且这种对应规则还满足:(1)(V中零向量),(2)任给P点和V中向量a,总惟一存在点Q使,(3)对A中任意三点P、Q、M ,成立则称A为一个n维仿射空间。n=2时,称为仿射平面。
仿射几何学
研究图形在仿射变换下不变性质的几何学分支学科。设V是一个 n维向量空间,A是一个集合,其中元素称为点。如果对A中每两个点P、Q都惟一对应着V中的一个向量并且这种对应规则还满足:(1)(V中零向量),(2)任给P点和V中向量a,总惟一存在点Q使,(3)对A中任意三点P、Q、M ,成立则称A为一个n维仿射空间。n=2时,称为仿射平面。
在仿射空间中取定一点O,那么任意一点P就惟一地与V中的向量对应,称为P点关于点O的位置向量。点O也常称为原点。因此,取定原点后,仿射空间A就与向量空间V建立起双方一一的对应。由此,就可以建立起仿射空间中的仿射坐标系(见坐标系)。
对于向量空间V的k维子空间 Vk(0<k≤n)和A中点P,集合称为A的仿射子空间,它是过点P的一个k维仿射空间。如果A的子集是仿射空间,必能表为上面形式。特别当k=1时,A称为过P的直线;k=2时,称为平面;k=n-1时,称为超平面。
仿射空间中最重要的变换是仿射变换,它的特征是将共线的三点变为共线的三点。给定仿射坐标系后,仿射变换有明确的代数表示。仿射变换全体构成的变换群称为仿射变换群。仿射变换下重要的不变性质和不变量有:共线性、平行性、平行线段的长度比等。
如果在仿射平面(或空间)中引入无穷远点,并且将它们与原有点不加区别,则就成为射影平面(或空间)。在射影平面(或空间)中指定一条(或一个)直线l(或超平面π),那么射影变换群中保持l(或π)不动的变换就构成一个与仿射变换群同构的变换子群。从这个意义上讲,仿射变换群就是射影变换群的子群,而仿射几何也就成为射影几何的子几何(见射影几何学)。
参考书目
苏步青编:《高等几何讲义》,上海科学技术出版社,上海,1964。
方德植,陈奕培编:《射影几何》,高等教育出版社,北京,1983。
对于向量空间V的k维子空间 Vk(0<k≤n)和A中点P,集合称为A的仿射子空间,它是过点P的一个k维仿射空间。如果A的子集是仿射空间,必能表为上面形式。特别当k=1时,A称为过P的直线;k=2时,称为平面;k=n-1时,称为超平面。
仿射空间中最重要的变换是 仿射变换 ,它的特征是将共线的三点变为共线的三点。给定仿射坐标系后,仿射变换有明确的代数表示。仿射变换全体构成的变换群称为仿射变换群。仿射变换下重要的不变性质和不变量有:共线性、平行性、平行线段的长度比等。
如果在仿射平面(或空间)中引入无穷远点,并且将它们与原有点不加区别,则就成为射影平面(或空间)。在射影平面(或空间)中指定一条(或一个)直线l(或超平面π),那么射影变换群中保持l(或π)不动的变换就构成一个与仿射变换群同构的变换子群。从这个意义上讲,仿射变换群就是射影变换群的子群,而仿射几何也就成为射影几何的子几何(见 射影几何学 )。
参考书目
苏步青编:《高等几何讲义》,上海科学技术出版社,上海,1964。
方德植,陈奕培编:《射影几何》,高等教育出版社,北京,1983。
仿射变换
仿射平面(或空间)到自身的一类变换,最重要的性质是保持点的共线性(或共面性)以及保持直线的平行性。作为最常见的例子,首先引进两平面间的平行投影,设已知两平面π与π┡,d是与两平面都不平行的向量,过平面 π上各点A、B、C、…分别作与d平行的直线交π┡于A┡、B┡、C┡、…,于是π与π┡各点间存在着一一对应的关系,这项对应关系叫做π 到π┡的平行投影。A与A┡,B与B┡,C与C┡…为平行投影下的对应点,显见平行投影与 d有关。两平面间的平行投影具有以下重要性质:点变点;直线变直线;点与直线的结合关系不变。共线三点的简比不变,即其中A┡、B┡、C┡分别是共线三点A、B、C的对应点,平面π上的两条平行线,对应着平面π┡上的两条直线,也是平行的(图1)。当把π经过一系列平行投影,最后仍变到π本身的一一变换,就是一个仿影变换。在此情况下,上述性质也是保留的。将平行投影的概念加以推广,即得到下面的重要概念。
两平面间的一一对应,如满足共线三点的对应点仍是共线三点;则此一一对应,叫仿射对应。如果两平面重合,就叫平面到它本身的仿射变换。因为仿射变换之积,仍是仿射变换;任一个仿射变换的逆,仍是仿射变换,故平面内所有仿射变换的集合成群(见变换群),叫做仿射变换群。它是射影变换群的子群。类似地可定义空间的仿射变换及仿射变换群。
仿射性质与仿射不变量 按照依变换群将几何学分类的观点,图形在仿射变换群下的不变性质和不变的量叫做仿射性质和仿射不变量。研究图形仿射性质的几何分支就称为仿射几何学。例如同素性(点变成点,直线变成直线)、结合性(点在线上或直线通过点)都是基本的仿射不变性,简比则是基本的仿射不变量。而且还可推出,二直线的平行性、平行线段的比、封闭图形面积的比等,都是在仿射变换下不变的。又如关于二次曲线的中心、直径及共轭径等,都是平面仿射几何的研究对象,因为它们都是仿射性质。
仿射坐标系 见坐标系。
仿射变换的代数表示 设给定平面上一个仿射坐标系{O;e1,e2},仿射变换将点P变为点P┡,并将坐标系{O;e1,e2}变为坐标系{O┡;e姈,e娦} (图2)。若令则e1,e2;e姈,e娦分别为新旧两坐标轴上的坐标向量。设P,P┡,e姈,e娦,O┡在{O;e1,e2}下的坐标,分别是P(x,y),P┡(x┡,y′),e姈(α11,α21),e娦(α12,α22),O┡(α13,α23),如果要求出P与P┡坐标间的关系。由于仿射变换保持平行性,故O┡PP┡P仍为平行四边形,又由于仿射变换保持简比不变,所以P┡在{O┡;e姈,e娦}下的坐标仍为(x,y)。根据向量的加法及向量的坐标表达,则有:
(1)
由于e姈,e娦不平行,故又有(2)
满足(2)的(1)式,就是仿射变换的代数表示式。利用仿射变换的代数表示,对问题的解决将有很大的方便,同时也便于将它推广到高维空间。