坐标系约定
约定当前坐标系是标准正交的右手系(x^,y^,z^ 为单位正交基),且两个坐标系的原点重合。设当前坐标系的三个基向量为 x^,y^,z^,新坐标系的三个基向量为 r,u,f。
则,对于当前坐标系而言,当然有:
x^=100,y^=010,z^=001
对新坐标系的唯一约束是:r,u,f 线性无关(三者不共面),可以构成一组基底。
这里不要求它们是单位向量,也不要求两两垂直。
目标
找到一个矩阵 A,使得对当前坐标系下的任意一点 p=(a,b,c)T 满足:Ap 就是新坐标系下的 (a,b,c)T 在当前坐标系下的坐标。
简言之,要找一个 A,使得
Ap=ar+bu+cf
矩阵 A 的作用是:把"新坐标系下的坐标"翻译成"当前坐标系下的坐标"。
推导步骤
将 p 拆分为沿 x^、y^、z^ 三个方向的分量 a、b、c:
p=abc=a00+0b0+00c=ax^+by^+cz^
只考虑沿 x^ 轴的分量,假设 3×3 矩阵的第一列是 r(即 r 在当前坐标系下的坐标为 (xr,yr,zr)T,其中 xr、yr、zr 是它的三个分量,都是标量),则有:
xryrzr??????a00=xrayrazra=ar
后者与 r 共线(a>0 时同向,a<0 时反向),长度是 ∣a∣⋅∥r∥。也就是说,这一步得到了 ar 在当前坐标系下的坐标。
注:这里并不是"投影"。把 ax^ 投影到 r 方向上得到的是 ∥r∥2ax^⋅rr,一般并不等于 ar;真正的"求坐标、求投影"是反方向的变换 A−1 在做的事。
类似地,如果矩阵的第二列、第三列分别是 u、f,可以得到 bu 在当前坐标系下的坐标、cf 在当前坐标系下的坐标。
xryrzrxuyuzuxfyfzf0b0=xubyubzub=bu
xryrzrxuyuzuxfyfzf00c=xfcyfczfc=cf
矩阵乘法对向量是线性的,把三个分量加起来,就得到这个矩阵对 p 的完整作用:
Ap=xryrzrxuyuzuxfyfzfabc=ar+bu+cf
其中 A 的每一列既是新基向量在当前坐标系下的坐标,也是旧基向量在 A 作用下的像:
Ax^=r,Ay^=u,Az^=f
所以 A 是把「新坐标系下的坐标」翻译成「当前坐标系下的坐标」的基变换矩阵(两个坐标系原点重合,因此它只有线性部分,不含平移)。
它是否退化成旋转矩阵取决于 r,u,f 的性质:只有当新基是标准正交基、且新坐标系同为右手系时,A 才是纯旋转。
注意事项
-
A 一般不是 正交矩阵。A 的列就是 r,u,f,新基的性质直接表示在矩阵里:
- 列的模长就是各轴的缩放因子,列与列不垂直就带来剪切
- 只要三者不全为单位向量、或者不两两垂直,就有 ATA=I、A−1=AT
- 若 r,u,f 两两正交但长度不为 1,可按 A=RS 拆开,其中 S=diag(∥r∥,∥u∥,∥f∥) 是各轴的缩放、R 是把三列单位化后得到的旋转矩阵,于是 A−1=S−1RT;
- 若三者连正交都不满足(含剪切),则要用极分解 A=RU
-
A 是 正交矩阵 的充要条件是 r,u,f 两两正交且都是单位向量(即标准正交基)。
-
若还要求 A 是纯旋转(不叠加镜像),需要 detA=r⋅(u×f)=+1,即新坐标系同样是右手系
- detA=−1 则是旋转叠加一次镜像
- ∣detA∣ 等于 r、u、f 张成的平行六面体体积