Matrix 特征:将旋转矩阵转换为四元数,然后返回得到完全不同的矩阵
有人能帮我解决艾根的问题吗?我试着把四元数转换成矩阵,然后再转换回来,得到了完全不同的矩阵。在理解这个问题之前,我不能相信四元数。 代码如下:Matrix 特征:将旋转矩阵转换为四元数,然后返回得到完全不同的矩阵,matrix,rotation,quaternions,rotational-matrices,Matrix,Rotation,Quaternions,Rotational Matrices,有人能帮我解决艾根的问题吗?我试着把四元数转换成矩阵,然后再转换回来,得到了完全不同的矩阵。在理解这个问题之前,我不能相信四元数。 代码如下: #include <Eigen/Geometry> #include <iostream> void Print_Quaternion(Eigen::Quaterniond &q){ std::cout<<"["<<q.w()<<" "<<q.x()<<
#include <Eigen/Geometry>
#include <iostream>
void Print_Quaternion(Eigen::Quaterniond &q){
std::cout<<"["<<q.w()<<" "<<q.x()<<" "<<q.y()<<" "<<q.z()<<"]"<<std::endl;
}
void Verify_Orthogonal_Matrix(Eigen::Matrix3d &m)
{
std::cout<<"|c0|="<<m.col(0).norm()<<",|c1|="<<m.col(1).norm()<<",|c2|="<<m.col(2).norm()<<std::endl;
std::cout<<"c0c1="<<m.col(0).dot(m.col(1))<<",c1c2="<<m.col(1).dot(m.col(2))<<",c0c2="<<m.col(0).dot(m.col(2))<<std::endl;
}
int main()
{
Eigen::Matrix3d m; m<<0.991601,0.102421,-0.078975,0.125398,-0.611876,0.78095,-0.0316631,0.784294,0.619581;
std::cout<<"Input matrix:"<<std::endl<<m<<std::endl;
std::cout<<"Verify_Orthogonal_Matrix:"<<std::endl;
Verify_Orthogonal_Matrix(m);
std::cout<<"Convert to quaternion q:"<<std::endl;
Eigen::Quaterniond q(m);
Print_Quaternion(q);
std::cout<<"Convert back to rotation matrix m1="<<std::endl;
Eigen::Matrix3d m1=q.normalized().toRotationMatrix();
std::cout<<m1<<std::endl;
std::cout<<"Verify_Orthogonal_Matrix:"<<std::endl;
Verify_Orthogonal_Matrix(m1);
std::cout<<"Convert again to quaternion q1="<<std::endl;
Eigen::Quaterniond q1(m1);
Print_Quaternion(q1);
}
我做错什么了吗?我觉得这应该是一个众所周知的问题,但我被困在这里。有人能帮我吗?输入矩阵不是旋转矩阵,它包含镜像。它的行列式==-1,但旋转应该有+1。 检查正交化代码,并查看最后一列的符号
m.col(0).normalize();
m.col(1).normalize();
m.col(2) = m.col(0).cross(m.col(1));
m.col(2).normalize();
m.col(0) = m.col(1).cross(m.col(2));
m.col(0).normalize();
std::cout << "orthogonal matrix:" << std::endl << m << std::endl;
Input matrix:
0.991601 0.102421 -0.078975
0.125398 -0.611876 0.78095
-0.0316631 0.784294 0.619581
orthogonal matrix:
0.991601 0.102421 0.078975
0.125398 -0.611876 -0.78095
-0.0316628 0.784294 -0.619581
m.col(0).normalize();
m、 col(1).规范化();
m、 列(2)=m.col(0)。交叉(m.col(1));
m、 col(2),normalize();
m、 列(0)=m.col(1)。交叉(m.col(2));
m、 col(0)。normalize();
标准::cout
m.col(0).normalize();
m.col(1).normalize();
m.col(2) = m.col(0).cross(m.col(1));
m.col(2).normalize();
m.col(0) = m.col(1).cross(m.col(2));
m.col(0).normalize();
std::cout << "orthogonal matrix:" << std::endl << m << std::endl;
Input matrix:
0.991601 0.102421 -0.078975
0.125398 -0.611876 0.78095
-0.0316631 0.784294 0.619581
orthogonal matrix:
0.991601 0.102421 0.078975
0.125398 -0.611876 -0.78095
-0.0316628 0.784294 -0.619581