线性代数及三维立体空间旋转矩阵(与3D和WebGL相关)
WebGL中使用三维/正交/右手坐标系
三维:三个坐标轴(x轴/y轴/z轴)
正交:两两垂直
右手:x轴拇指正方向/y轴食指正方向/z轴无名指正方向
3D坐标系中原点的位置:(Vx, Vy, Vz)=(0, 0, 0)
标量:有大小无方向(如:温度/质量/能量)
矢量:有大小有方向(如:力/加速度/速度)
矢量相加/矢量相减
矢量乘以标量等于一个新的矢量:KV = (KVx + KVy + KVz)
V = (Vx, Vy, Vz)
如果K为-1,则得到一个与原矢量大小相等/方向相反的新矢量
3D空间中两个矢量相乘有两种方式:
点积/标积(scalar product)
叉积(cross product)
点积
定义: u.v = |u||v|cos@
代数形式: U.V = UxVx + UyVy + UzVz (x/y/z两两相乘之和)
叉积
定义: W = U x V
代数定义: W = U x V = (UyVz - UzVy, UzVx - UxVz, UxVy - UyVx)
叉乘的结果是一个新矢量,这个新矢量具有以下属性:
|w| = |u||v|sin@
w正交与u和v
w与u和v符合右手定则
叉积不满足交换律,但有以下关系:
U x V = -V x U
2.齐次坐标:
齐次坐标:P = (Px, Py, Pz, Pw)
对于矢量,w = 0;当w # 0时,则齐次坐标指定一个点。
引进齐次坐标有什么必要,它有什么优点呢?
答:许多图形应用涉及到几何变换,主要包括平移、旋转、缩放。
以矩阵表达式来计算这些变换时,平移是矩阵相加,旋转和缩放则是矩阵相乘。
综合起来可以表示为p' = p*m1 + m2(m1旋转缩放矩阵, m2为平移矩阵, p为原向量 ,p'为变换后的向量)。
引入齐次坐标的目的主要是合并矩阵运算中的乘法和加法,表示为p' = p*M的形式。
即它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法。
3.矩阵:
在WebGL中,最常用的是4x4的矩阵:
只有一个列的矩阵叫列矢量:
只有一个行的矩阵叫行矢量:
行数和列数都相等的两个矩阵才可以相加或相减(两个m×n矩阵A和B的和,标记为A+B,一样是个m×n矩阵,其内的各元素为其相对应元素相加后的值。)
只有当矩阵A的列数等于矩阵B的行数时,矩阵A才可以乘以矩阵B:
[M x P][P x N] = [M x N]
方阵:列数和行数相等的矩阵称为方阵
单位矩阵:对角位置的元素为1,其他位置的元素为0,这样的方阵称为单位矩阵(通常用I表示,与标量1相对应)
矩阵M乘以它的逆矩阵,结果为单位矩阵
只有方阵才有逆矩阵,但不是所有的方阵都有逆矩阵