图形变换之基本矩阵变换

1)平移变换

从一个位置到另一个位置的变换可以用平移矩阵T表示,该矩阵通过向量t=(tx,ty,tz)对实体进行平移操作。

其实还有另外一种形式(以左手坐标系为基准):

第一种形式(以右手坐标系为基准的)进行变换时将T与需要变换的点或向量A(列向量)相乘,即TA。第二种形式(以左手坐标系为基准)将需要变换的点或向量(行向量)与T相乘,即AT。

平移矩阵的逆矩阵为T-1(t)= T(-t),也就是对向量t进行了置负操作。

2)旋转变换

旋转矩阵 Rx(Θ)、Ry(Θ)、Rz(Θ)分别表示将物体绕x,y,z轴进行旋转。

注意,旋转矩阵表示物体是绕着指定轴(轴的指向朝外面)按顺时针方向旋转的,但这个形式的旋转矩阵是以右手坐标系为基准的。

左手坐标系的为:

旋转矩阵的推导可以看这里:http://blog.csdn.net/zsq306650083/article/details/8773996

任意轴旋转任意角度矩阵:

对于这个3x3矩阵来说,其对角元素之和是一个与坐标轴无关的常数,称其为迹(Trace):tr(R) = 1+2cosΘ

矩阵R的逆矩阵就是其转置矩阵,还有其他获取其逆矩阵的方法,即将Θ取负(绕着同一 坐标轴朝相反方向旋转)。旋转矩阵的行列式总是等于1.

3)缩放矩阵

    sx,sy,sz分别表示沿着XYZ轴进行缩放的缩放比例。S矩阵的逆矩阵为S-1(s) = S(1/sx,1/sy,1/sz)。

如果对缩放矩阵s的一个或者三个分量置负,就会产生一个反射矩阵(镜像矩阵),如果其中两个缩放因子为-1,那么将旋转180度,当发现变换矩阵是反射矩阵时,需要进行特殊处理,例如,一个三角形的顶点序列以逆时针方向排列时,在经过反射矩阵变换后,对得到一个顺时针方向排列的三角形顶点序列,这将导致不正确的光照效果和背面裁减。判断给点矩阵是否为反射形式,需要计算该矩阵左上部3x3矩阵行列式的值,如果为负,那么该矩阵就为反射矩阵。


4)错切变换

错切矩阵有6种基本形式,分别表示为Hxy(s)、Hxz(s)、Hyx(s)、Hyz(s)、Hzx(s)、Hzy(s). 第一个下标表示由错切矩阵改变的坐标,第二个下标表示进行错切操作的坐标。

  通过下标可以找到参数s所在的位置。如本例中x=0,z=2。

    错切矩阵的逆矩阵可以通过取负来取得 (Hij)-1(s)= Hij(-s)

5) 刚体变换

刚体变换用于刚性物体的变换,只改变物体的方向和位置,不改变形状。可以将刚体矩阵X写成一个平移矩阵和一个旋转矩阵的级联:

X的逆矩阵可以这样求得:X-1=(T(t)R)-1=R-1T(t)-1=RTT(-t).

6) 法线变换

注意,法线必须通过用变换几何图形的矩阵的逆矩阵的转置矩阵进行变换 N=(M-1)T

实际应用中,如果变换矩阵是正交的(如旋转矩阵),就没必要计算它的逆矩阵,因为正交矩阵的逆矩阵就是转置矩阵,两个转置矩阵相互抵消,相乘的结果还是原来的旋转矩阵。此外,还有平移矩阵,由于平移不改变向量的方向,所以可以进行任意次数的平移而不对法线产生任何影响。另外,如果使用一个或多个一致性缩放矩阵进行变换,也不需要计算相应的逆矩阵,因为这种缩放只改变法线长度,不影响其方向。这种矩阵进行变换之后需要对法线进行归一化(规范化)。

时间: 2024-09-28 20:54:46

图形变换之基本矩阵变换的相关文章

浅谈android中图片处理之图形变换特效Matrix(四)

今天,我们就来谈下android中图片的变形的特效,在上讲博客中我们谈到android中图片中的色彩特效来实现的.改变它的颜色主要通过ColorMatrix类来实现. 现在今天所讲的图片变形的特效主要就是通过Matrix类来实现,我们通过上篇博客知道,改变色彩特效,主要是通过ColorMatrxi矩阵的系数,以及每个像素点上所对应的颜色偏移量.而今天的图形变换与那个也是非常的类似.它是一个3*3矩阵,而颜色矩阵则是一个4*5的矩阵.在这个3*3矩阵中则表述出了每个像素点的XY坐标信息.然后通过修

WebGL简易教程(五):图形变换(模型、视图、投影变换)

目录 1. 概述 2. 详论 1) 模型变换 (1) 平移变换 (2) 缩放变换 (3) 旋转变换 (4) 组合变换 2) 视图变换 (1) 原理 (2) 推导 3) 投影变换 (1) 透视投影 (2) 正射投影 3. 综合运用 4. 参考 1. 概述 通过之前的教程,对WebGL中可编程渲染管线的流程有了一定的认识.但是只有前面的知识还不足以绘制真正的三维场景,可以发现之前我们绘制的点.三角形的坐标都是[-1,1]之间,Z值的坐标都是采用的默认0值,而一般的三维场景都是很复杂的三维坐标.为了在

触摸手势以及图形变换(UIGestureRecognizer, CGAffineTransform)

概要 本章主要学习了IOS开发中的触摸手势以及图形变换的知识,其中手势包括单击.双击.长按.拖动.滑动.缩放.旋转,图形变化主要使用放射矩阵的平移.缩放和旋转. 使用手势时应该注意手势是指定到特定的视图(UIView)上的,因此一个手势只能对应一个视图(手势里面的view属性可获取其所所对应的视图),而一个View可以添加多个手势.同时,因为有的手势之间有冲突的,比如单击和双击,滑动和拖动.针对这种情形需要使用手势的依赖性特性做出区分,改特性要求特定手势失败后才触发该手势. 仿射矩阵变化应该注意

二维图形变换

5.1二维图形变化 一.向量 是具有长度和方向的实体 二.特殊的线性组合 (1)仿射组合 (2)凸组合(对仿射组合加以更多的限制) 三.向量的点积和叉积 (1)点积 两个向量夹角的余弦值等于两个单位向量的点积 (2)叉积 两个向量的叉积是另一个三维向量,且与两个向量均正交 利用叉积求平面的法向量,三点可确定一个平面 5.2 图形坐标系 1.世界坐标系 是一个公共坐标系,是现实中物体或场景的统一参考系 2.建模坐标系 又称局部坐标系,每个物体有自己的局部中心和坐标系 3.观察坐标系 从观察者的角度

图形变换

以前小的时候学习图形变换采用的是比较笨的方法,如图形对直线采用对称变换,先要算出各个点到直线的垂线长度,然后做对称,一个个的点算一遍.但是在计算机图形学中采用了线性代数的方法,基于齐次坐标.矢量运算等,学完我简直震惊了,实在是太有用了! 一些小先修: 1. 齐次坐标:用n+1维的向量表示一个n维向量,可用矩阵运算来实现坐标变换,也可以表示无穷远的点(第n维为0) 2. 各种变换方法,但得注意的是这些变换都得基于标准形式,如旋转是关于原点旋转,以下PPT截图来自北京化工大学李辉老师 3. 对于如下

Core Graphics图形变换

简单的坐标变换: Quarzd 2D提供了三个API进行坐标变换: //1.位移变换 CGContextTranslateCTM(CGContextRef c, CGFloat tx, CGFloat ty); 对于变换后的坐标系而言,原点位于原坐标系的(tx,ty)处.也相当于在原有坐标系下,所有点的横纵坐标分别增加tx和ty. //2.旋转变换 CGContextRotateCTM(CGContextRef c, CGFloat angle); 假设点A1经过坐标变换变到了A2,记坐标原点为

CGAffineTransform 放射变换解析 即矩阵变换

转载自;http://www.cocoachina.com/bbs/3g/read.php?tid=151136 矩阵乘法A B相乘要A的列数等于B的行数才有定义,结果是一个 A行B列的矩阵C,C的每个元素值为A对应的行与B对应的列的元素乘积的和具体看这里原理CGAffineTransformCGAffineTransform 的结构如下struct CGAffineTransform {   CGFloat a;   CGFloat b;   CGFloat c;   CGFloat d; 

三维图形变换

是在二维方法基础上增加了对z坐标的考虑得到的.与二维变换类似,引入齐次坐标表示,即:三维空间中某点的变换可以表示成点的齐次坐标与四阶的三维变换矩阵相乘. 一.平移变换 二.比例变换 例如:对长方体进行比例变换,           三.旋转变换 跟二维的相同 四.对称变换 有关于坐标平面.坐标轴的对称变换 (1)关于坐标平面的对称 绕哪个面变换,那个面不变 变换矩阵为: 其它均类似 (2)关于坐标轴变换 6.2 投影变换 投影变换就是把三维物体投射到投影面上得到二维平面图形 两种投影法的本质区别

5.26 图形变换练习

源代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Cont