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 从欧拉角到轴旋转