c_cpp 从3D矢量的欧拉角度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 从3D矢量的欧拉角度相关的知识,希望对你有一定的参考价值。

// Vector alignment rotation matrix computation from:
//      https://math.stackexchange.com/a/476311/311746
void eulerAnglesFromVector(const cv::Vec3f &_vec, cv::Vec3f *rot,
                           const bool normalize = false) {
    cv::Vec3f vec = _vec;
    if (normalize) {
        double l2 = cv::norm(vec);
        vec /= l2;
    }

    const cv::Vec3f refVec(0, 0, 1);

    cv::Vec3f v = refVec.cross(vec);  // cross product

    double s = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);

    double c = refVec.dot(vec);

    cv::Matx33f vx(0, -v[2], v[1], v[2], 0, -v[0], -v[1], v[0], 0);

    cv::Matx33f R;
    cv::add(cv::Mat::eye(3, 3, CV_32F), vx, R);
    cv::Matx33f tmp = (vx * vx) * (1/(1+c));
    cv::add(R, tmp, R);

    cv::Rodrigues(R, *rot);
}

以上是关于c_cpp 从3D矢量的欧拉角度的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D在特定轴上的矢量/方向之间的角度

unity3d把 x的欧拉角赋给y啥作用

欧拉公式和三大变换

欧拉公式和三大变换

给定 3D 旋转矩阵和 3D 方向向量求角度差

c_cpp 从欧拉角到轴旋转