在Cesium和其他三维开发中中经常用到矩阵变换。比如将一个物体移动、缩放、平移都可以用变换矩阵来计算。
再比如将三维场景中的物体转换为屏幕上显示的二维图形,需要用到透视投影(perspective projection)矩阵。
变换(tansformation)是一个函数,实现将一个空间坐标映射为另一个空间坐标,矩阵(matrix)是这种计算的一种方式,在三维开发中用途广泛。
一、向量
1.1、向量的基本概念
向量又称为矢量(vector),表示既有大小又有方向的量。在物理学中,力,速度,位移等都可以用向量来表示。
向量通常用一个有向线段表示。
1.2、向量的加法
向量的加法运算符合平行四边形法则。
设向量a(x1,y1,z1)b(x2,y2,z2),则
a+b =(x1+x2,y1+y2,z1+z2)
1.3、向量的长度
向量的大小,也就是向量的长度(magnitude),也称为模,是一个标量。
设向量a(x,y),则向量a的长度记为|a|,公式如下,三维向量的公式同理。
1.4、归一化向量
向量的归一化就是把向量的长度变为1,方向保持不变。公式为:
向量v称为u的归一化(normalization)向量。
1.5、向量的点积和投影
向量的点积(dot product)又称为数量积(scalar product)或内积(inner product)。
向量的点积是一个标量,也就是一个数值。
设向量a,b,向量a和向量b的夹角,0≤θ≤π,则向量的点积公式如下:
设向量a(x1,y1,z1)b(x2,y2,z2),则
a·b=x1*x2+y1*y2+z1*z2
如果a·b=0,则成a和b是正交的。
|OB1| =|b|cosθ ,|OB1| 称为b在向量a 方向上的投影。
投影向量如下,很容易推导。
1.6、向量叉积
向量的叉积(cross product),又称外积(outer product)
设向量a和b的叉积为n,则n与a和b都正交,向量a,b和n构成一个右手坐标系(right-handed coordinate system)
叉积n的长度为:
设向量a(xa,ya,za)b(xb,yb,zb),则
二、矩阵
2.1、矩阵的基本概念
由 m × n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m × n矩阵(引用百度百科)。记作:
这m×n 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列。
(1)矩阵的加法
同型矩阵之间才可以进行相加。减法同理,就是对应元素相减。
(2)单位矩阵
一个矩阵,从左上角到右下角的对角线(称为主对角线)上的元素均为1。除此以外全都为0,称为单位矩阵,通常记为E。
任何矩阵与单位矩阵相乘都等于本身。
(3)矩阵的转置
把矩阵A的行和列互相交换所产生的矩阵称为A的转置矩阵这一过程称为矩阵的转置。
、
(4)逆矩阵
设A是一个n阶矩阵,若存在另一个n阶矩阵B,使得: AB=BA=E ,则称方阵A可逆,并称方阵B是A的逆矩阵,B=A-1
(5)矩阵乘法
两个矩阵相乘在三维变换中极为重要。
两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。
比如一个4×4矩阵和4×1矩阵相乘得到的是一个4×1矩阵。
在三维开发中经常用到矩阵和矢量相乘,点和向量都可以用一个列矩阵来表示。
比如将一个空间中的点P(x,y,z)左乘一个3?3的矩阵得到新的坐标P1(x‘,y‘,z‘)。
2.2、平移变换
平移(translation)变换是把空间中一个点沿着给定的方向移动固定的距离,设位移向量d,点P移动后P1,则 P1=P+d;
如果用齐次坐标(homogeneous coordinate)表示点和向量(齐次坐标的概念请自行查阅资料学习),
设点P(x,y,z,1),点P1(x‘,y‘,z‘,1),向量d=(tx,ty,tz,0),则
x‘=x+tx
y‘=y+ty
z‘=z+tz
表示成矩阵形式如下:
平移变换矩阵即为:
2.3、旋转
计算点p绕着z轴旋转θ角后的p‘的坐标,r为OP的长度。
x=rcosA
y=rsinA
x‘=rcos(A+θ)
y‘=rsin(A+θ)
利用两角和的三角函数公式可得到
x‘=xcosθ - ysinθ
y‘=xsinθ + ycosθ
z‘=z
用矩阵表示,绕Z轴旋转的变换矩阵为:
绕X轴旋转的变换矩阵为:
绕Y轴变换的矩阵
2.4、缩放
假设在X轴,Y轴,Z轴上的缩放因子分别为Sx,Sy,S
2.6、模型视图投影矩阵
这个以后再说
三、Cesium中的坐标系
Cesium中的地球默认采用的是WGS84坐标系。
四、Cesium中的矩阵变换
五、相关示例