【转】【矩阵】坐标的矩阵变换

2.3.3 基本二维变换

  基本二维变换有比例变换(Scaling)、旋转变换(Rotating)、错切变换(Shearing)和平移变换(Translating)。

1)比例变换

   比例变换就是将平面上任意一点的横坐标放大或缩小S11倍,纵坐标放大或缩小S22倍,即

其中S称为比例变换矩阵。图2.24是比例变换的几个例子。图中(b)是S11=S22的情况,(C)是S11≠S21的情况

2)旋转变换

  旋转变换就是将平面上任意一点绕原点旋转θ角,一般规定逆时针方向为正,顺时针方向为负。从图2.25可推出变换公式:

3)错切变换

  在旋转变换矩阵中,非对角线元素有何几何意义?观察图2.26中的例子。变换矩阵中元素S21起作把图形沿X方向“错切”的作用,Y值越小,错切量越小。S12则有将图形向Y方向“错切”的作用,同样其作用的大小与X值成正比。

4)平移变换

  平移交换指的是将平面上任意一点沿X方向移动C。,沿Y方向移动ty(图2.27),其变换公式为

由上式可见,平移交换不能直接用2X2矩阵来表示。下述齐次坐标变换矩阵则可解决这个问题。

注意:这句话关键(疑问点在于为什么二位转换需要3x3的矩阵)

2.3.4 齐次坐标

  如把平面上的点P=[Xy]放到空间去表示为[X Y H],使得x= X/H, y=Y/H 则称[X Y H」是点 P的齐次坐标。如规定齐次坐标的第三个分量H必须是 1,则称为规范齐次坐标。P=[xy」的规范齐次坐标是[x y 1]。显然,二维空间中描述的点与齐次坐标空间描述的点是一对多的关系。使用齐次坐标之后,平移交换可用矩阵乘法表示如下:

注意:现在可以看到平移的时候x1=x*1+x*0+x*tx,y1=y*0+y*1+y*ty即等于相加的做法,现在所有的转换都可以使用矩阵乘法了

2.3.5 复合变换     

实际问题中常遇到的是较为复杂的变换,但这些均可通过一系列的基本变换复合而成。下面举例说明。    例1 绕任意点C=[Cx Cy]的旋转变换。图2.28总的变换可通过三个基本变换复合而成。先进行平移交换,平移量为-Cx和-Cy,然后绕原点旋转θ角,最后再进行平移量为Cx和Cy的平移变换。因此,任一点P经过逐次变换后的齐次坐标为

变换矩阵称为复合变换矩阵。

例 2相对于任意点 C=[Cx Cy]的比例变换

与例1其复合变换阵三个变换复合而成。即为

由上述计算过程知,一个简单比例变换需要有三个计算步骤。对第一次平移,可看成是将变换物移动到坐标系的原点,第二次平移则可看成将变换物移回原位。

例3 相对于直线 ax+by+c=0 进行对称变换

此例可由五个基本变换复合而成,复合变换矩阵可按下式进行计算

2.3.6 三维变换    

  对三维空间的点P=[X Y Z],采用规范齐次坐标则与二维情况类似,其平移交换和比例变换的变换矩阵分别为:

其中tx,ty,tz分别是沿x、y、z方向的平移量S11、S22和S33分别是在x、y、z方向上相对于原点的比例因子。三维旋转变换稍微复杂,采用右手坐标系,从规定的坐标轴正方向向原点看,绕该轴逆时针方向为正,顺时针方向为负。绕Z轴、X轴和Y轴旋转θ角的变换矩阵分别为:

数学上可证明,旋转变换中前三行和前三列组成的3X3子矩阵是一正交矩阵,即三个列(行)向量均为单位向量,互相正交,而且三个列向量经过该旋转变换后,分别与X轴、Y轴和Z轴重合。利用这个性质有时可很容易确定旋转变换矩阵。

   三维几何变换与二维变换一样,也都是由一系列基本变换构成的复合变换。在进行变换过程中同样要注意变换矩阵的次序。虽然,有些变换矩阵与其次序无关,但从程序设计及计算的角度出发,建议读者一律采取按次序进行矩阵运算。三维变换矩阵中的大多数元素的作用读者已经了解,但其最后一列的元素在变换中起什么作用?这将在透视变换一节中得到解答。

2.3.7 三维透视变换    

  三维齐次几何变换矩阵中第四列元素组成的3x1子矩阵与透视交换有关,其中的元素称为透视参数。对空间任意点的透视变换为

上式中分母px+qy+rz+l是一个变量,故经透视变换后图形产生了变形。参数p、q、r如何对图形产生透视变换的呢?为简化问题,先设p=0、q=0,则这时的变换矩阵对空间点所进行的变换为

由上式,当 Z=0时,X=x,Y=y,说明z=0这个平面是此变换中的不变动平面,即变换后,x、y值均无变化;当 z→ ac时,则 Z→l/r,表示无限远点经透视变换后对应于有限点,也就是平行Z轴的直线变换后汇交于Z轴上的一点1/r;当Z→l/r时, Z→∞说明有限远点-l/r经透视变换后又对应无限远点,原来交于轴上的一点-l/r的直线变换后平行于Z轴。当r>0时,这种变换的几何意义如图2.31所示。同理可推论,当r≠0,P≠0时,则X轴上也有一个有限点x=l/P对应于x=∞的点。这时,经透视变图2.31透视交换的几何意义换后,平行于Z轴的直线汇交于Z轴上的一点1/r,而平行于X轴的直线则汇交于X轴上的点1/p处。当透视参数p、q、r都不等于零时,则透视变换将。x=∞, y=∞, z=∞处的点分别映射成 X= l/P, Y=l/q和 Z=1/r。这时,平行于三坐标轴的直线经变换后就分别汇交于X、Y、Z轴上的一固定点。

2.3.8 三维变换应用    

1)多面视图

  在工程制图中,绘制立体多面视图时是用正投影方法将立体投影到投影面上,然后将多个投影面连同已得到的投影图按一定规则展平在同一平面上,从而得到立体的多面视图。这个投影过程如果用矩阵来表示的话,就是将立体向投影面作正投影,再将投影面绕相应的坐标轴旋转,并使图形沿投影轴平移以保持视图间一定的距离,这三个步骤可分别用矩阵表示,而将这三个矩阵级联起来就得到了最后结果。为推导三视图的变换矩阵,现以X—Y平面作为正面投影面(即V面),主视图就是画在这个投影面上的。    (1)主视图:当立体向XY平面作正投影,在投影面展开时,XY平面保持不动,因而,x,y坐标不变,而z坐标为零,所以,主视图的变换矩阵是

(2)俯视图:俯视图是向XZ平面(即H面)投影,然后XZ平面连同所得的投影绕X轴正转出Y角,使与X Y平面重合,并沿Y轴反向平移一段距离所得的视图。这时,x,y坐标不变,Y=0。因此,俯视图的变换矩阵是

(3)侧视图:侧视图是先向Y z平面(即W面)投影,从而使y、z坐标不变,X=0,再绕Y轴正转90角,与XY平面重合,并沿X轴平移所得的视图,因此俯视图的变换矩阵是

立体的三视图也可以这样得到,即将立体向XY平面投影而得到主视图。为也得到俯视图,可把立体先绕X轴正转90度,然后向XY面投影,再沿X轴平移,就得到了侧视图。这种变换与上述变换结果是一样的。

原文地址:http://www.cnblogs.com/Clingingboy/archive/2010/10/17/1853559.html

【转】【矩阵】坐标的矩阵变换

时间: 2024-10-03 03:34:45

【转】【矩阵】坐标的矩阵变换的相关文章

HDU 4365 正方形格子涂色中心对称轴对称的涂法有多少种-思维-(矩阵坐标关系&快速幂取模)

题意:n*n的格子,涂色,有k种颜料,必须满足旋转任意个90度和翻转之后图片的样子不变,现在已经有m个格子涂过色了,问还有多少种涂法满足上述条件. 分析: 满足上述对称条件,那么涂色的种类问题我们可以放在正方形的一个角来做,因为一个角确定了其他角的颜色也就确定了. 以左上角的下半角为例.共有1+2+....+(n+1)/2个格子,然后记录涂过色的格子对应到这个三角形里的格子数目,用tot来记录,即每输入一个涂过色的格子的坐标我们就在这个三角形里找与之对应的坐标,用vis[][]数组标记是否已经计

现代OpenGL教程 03 - 矩阵,深度缓冲,动画

http://huangwei.pro/2015-08/modern-opengl3/ 本文中,我会将不会动的2D三角形替换为旋转的3D立方体.你会看到这样的效果: 现在我们终于能在屏幕上搞点有趣的东西了,我放了更多的动图在这里:http://imgur.com/a/x8q7R 为了生成旋转立方体,我们需要学些关于矩阵的数学,用于创建透视投影,旋转,平移和"相机"概念.我们还有必要学习些深度缓冲,和典型的随时间改变的3D应用,比如动画. 获取代码 所有例子代码的zip打包可以从这里获取

Matlab随笔之矩阵入门知识

直接输入法创建矩阵 – 矩阵的所有元素必须放在方括号“[ ]”内: – 矩阵列元素之间必须用逗号“,”或空格隔开,每行必须用“;”隔开 – 矩阵元素可以是任何不含未定义变量的表达式.可以是实数,或者是复数. – 例a=[1,2;3,4] 或 a=[2 1+3j;sqrt(4) 5] 创建基本矩阵的函数 – 空阵 [ ] — matlab允许输入空阵,当一项操作无结果时,返回空阵 – ones(N,M) —全部元素都为1的矩阵 – zeros(N,M) —全部元素都为0的矩阵 – rand(N,M

求螺旋矩阵指定坐标的值

螺旋矩阵定义:螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环. 坐标(4,3)对应的数字为34. 请定义一个函数,输入n,x,y(n为螺旋矩阵的阶数,x,y分别x轴.y轴坐标),返回n阶螺旋矩阵坐标(x,y)对应的数字. #include<stdio.h> #include<assert.h> #define MIN(x, y) ({          typeof(x) _min1 = (x);        typeo

ACM_蛇形矩阵

蛇行矩阵 Time Limit: 4000/2000ms (Java/Others) Problem Description: 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. Input: 本题有多组数据,每组数据由一个正整数N组成.(N不大于100) Output: 对于每一组数据,输出一个N行的蛇形矩阵.两组输出之间不要额外的空行.矩阵三角中同一行的数字用一个空格分开.行尾不要多余的空格. Sample Input: 5 Sample Output: 1 3 6 10 15 2 5

noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T11——T20

T11 图像旋转 描述 输入一个n行m列的黑白图像,将它顺时针旋转90度后输出. 输入 第一行包含两个整数n和m,表示图像包含像素点的行数和列数.1 <= n <= 100,1 <= m <= 100.接下来n行,每行m个整数,表示图像的每个像素点灰度.相邻两个整数之间用单个空格隔开,每个元素均在0~255之间. 输出 m行,每行n个整数,为顺时针旋转90度后的图像.相邻两个整数之间用单个空格隔开. 样例输入 3 3 1 2 3 4 5 6 7 8 9 样例输出 7 4 1 8 5

css3中变形与动画(一)

css3制作动画的几个属性:变形(transform),过渡(transition)和动画(animation). 首先介绍transform变形. transform英文意思:改变,变形. css3中transform注意包括以下几种:旋转(rotate),扭曲(skew),缩放(scale).移动(translate)和矩阵变形matrix. 语法: transform : none | <transform-function> [ <transform-function> ]

OpenGL阴影,Shadow Mapping(附源程序)

实验平台:Win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): 本文描述图形学的两个最常用的阴影技术之一,Shadow Mapping方法(另一种是Shadow Volumes方法).在讲解Shadow Mapping基本原理及其基本算法的OpenGL实现之后,将继续深入分析解决几个实际问题,包括如何处理全方向点光源.多个光源.平行光.最近还有可能写一篇Shadow Volumes的博文(目前已经将基本理论弄清楚了),在那里,将对Shadow Ma

WebGL入门教程第1篇——六色立方

WebGL入门教程第1篇——六色立方 WebGL,一项允许开发人员在浏览器里操纵GPU来显示图形的技术.让我们一起走进WebGL的世界. 读者对象 本系列适合具有基础JavaScript知识的开发人员. 准备工作 我们应该在本地搭建好web服务器,或者安装了具有预览功能的IDE.如果你安装了Visual Studio,Nivk童鞋为我们开发了WebGL代码提示功能,你可以通过以下步骤使Visual Studio支持WebGL代码提示:打开Visual Studio——点击工具——点击选项——展开