问题
如何求一个三维的正交变换,它把已知向量 (a,b,c)T (a2+b2+c2=1) 变换为 (0,0,1)T?
解答
这样的正交变换不是唯一的。因为有太多种可能。
我比较感兴趣的是两种:旋转 和 反射。
反射
垂直于 OAZ 所在平面,并且等分∠AOZ的平面作为镜面时的反射满足条件。
首先确定这个平面。令为π:px+qy+rz+d=0 记作 (p,q,r,d)T。
不失一般性,不妨假设 p2+q2+r2=1; 因为经过 O:(0,0,0) 点,所以 d=0。即: π=(p,q,r,0)T
另外容易知道: AZ 的中点,以及向量 (0,0,1) 和 (a,b,c) 的叉积也在平面上,从而可以用 a,b,c 表示出平面。
(p,q,r,0)T=1(c?a2+b2+c2??????????√)2+a2+b2?????????????????????????√(a,b,c?a2+b2+c2??????????√,0)T
此时可以从Householder矩阵写出4×4齐次反射矩阵,其前3×3主子矩阵是所要的反射:
????????????1?a2a2+b2+c2?ca2+b2+c2??????????√?aba2+b2+c2?ca2+b2+c2??????????√aa2+b2+c2??????????√?aba2+b2+c2?ca2+b2+c2??????????√1?b2a2+b2+c2?ca2+b2+c2??????????√ba2+b2+c2??????????√aa2+b2+c2??????????√ba2+b2+c2??????????√ca2+b2+c2??????????√????????????
旋转
如果是旋转,它就是,以两个向量 (0,0,1) 和 (a,b,c) 的叉积向量为旋转轴向量的旋转矩阵,旋转角是二者的夹角。然后,直接利用这里的公式即可。应该注意的是,旋转轴向量的符号与旋转角的符号应该匹配,所以,需要验算。
1(a2+b2)a2+b2+c2??????????√????????a2c+b2a2+b2+c2??????????√ab(c?a2+b2+c2??????????√)a(a2+b2)ab(c?a2+b2+c2??????????√)a2a2+b2+c2??????????√+b2cb(a2+b2)?a(a2+b2)?b(a2+b2)(a2+b2)c????????
小结
不论是反射平面经过原点的任意三维反射,还是旋转轴经过原点的任意三维旋转,都是正交矩阵。都可以先求齐次坐标下的一般 4×4 的齐次变换矩阵形式之后,直接截取其前 3×3 主子矩阵而得到欧氏坐标下的对应几何变换矩阵。