2016-08-02 711 views
0

我目前正在实现一个用于三维点云过滤的算法,遵循科学论文。旋转矩阵,规范化,行列式-1

我在计算特定值的旋转矩阵时遇到了一些问题。目标是将点旋转到由法向量(Z轴)的方向定义的坐标系中。由于以下查询在X,Y轴上旋转对称,因此这些轴的方向无关紧要。 R定义如下:Rotationmatrix

[1  1 -(nx+ny)/nz] 
R = [ (row1 x row3)'  ] 
    [nx  ny  nz ] 

n是归一化的。当n_z变得非常小或为零时,问题就会发生。因此,我考虑在计算行2的交叉产品之前对行1进行归一化。

然而,行列式变为-1。 rotationmatrix门槛会导致正确的结果? R是正交的,但det | R |不是+1

感谢您的任何建议

回答

1

你总是拿到

det(a, a×b, b) = - det(a, b, a×b) 
= - dot(a×b, a×b) 

总是负。因此,您需要通过否定它或重新排列行的总体顺序来更改第二行。

+0

thx,发现,下面的文件我得到一个反射矩阵。因为z轴的方向并不重要,所以对结果没有影响。 – andysfd

+0

为了他人的利益,在许多情况下,使用包含反射的转换时,这不是有意的*是有问题的。除非有意识,否则我否定其中一个矢量来保存右手坐标。 – sage

0

你对任意轴周围的旋转点感兴趣吗?如果是的话,也许quaternions是很好的解决方案。 如果要在实际使用它之前将四元数转换为矩阵,则可以检查this