向量转四元数

请举一例例如(1,-1,0)如何转变为四元数,最好给出通用式

第1个回答  2015-11-25
四元数应该是给出一个四维向量才可以转换的。
基底是1,i,j,k。这之间有运算i^2=j^2=k^2=-1,ij=k,ji=-k。
用矩阵的语言来说,i、j、k各自对应一个复矩阵。从而一个四元数对应一个SU(2)群元素。本回答被网友采纳
第2个回答  2023-06-26
Eigen::Quaterniond vector_quaterniond(Eigen::Vector3d input_vector) {
double roll, pitch, yaw;
if (fabs(input_vector[1]) > 0.000001) {
roll = atan(input_vector[2] / input_vector[1]);
} else {
roll = M_PI / 2.0;
}
if (fabs(input_vector[2]) > 0.000001) {
pitch = atan(input_vector[0] / input_vector[2]);
} else {
pitch = M_PI / 2.0;
}
if (fabs(input_vector[0]) > 0.000001) {
yaw = atan(input_vector[1] / input_vector[0]);
} else {
yaw = M_PI / 2.0;
}

Eigen::Vector3d eulerAngle(roll, pitch, yaw);
Eigen::AngleAxisd rollAngle(Eigen::AngleAxisd(eulerAngle(0), Eigen::Vector3d::UnitX()));
Eigen::AngleAxisd pitchAngle(Eigen::AngleAxisd(eulerAngle(1), Eigen::Vector3d::UnitY()));
Eigen::AngleAxisd yawAngle(Eigen::AngleAxisd(eulerAngle(2), Eigen::Vector3d::UnitZ()));
Eigen::Quaterniond quaternion;
quaternion = yawAngle * pitchAngle * rollAngle;
return quaternion;
}
相似回答