我知道一条线上的两个 3D 点(不对称物体的顶部和底部),并且想找到欧拉角(沿 x、y 和 z 轴的旋转)。
示例:需要对以下 OpenGL 代码进行逆向工程,以下仅是展示场景的示例。
//Translation
glTranslated(p1.x, p1.y, p1.z);
//Rotation
glRotatef(rot.x, 1.0f, 0.0f, 0.0f);
glRotatef(rot.y, 0.0f, 1.0f, 0.0f);
glRotatef(rot.z, 0.0f, 0.0f, 1.0f);
// Draw the object ALONG Y-AXIS
p2 = DrawMyObject(); //p2 is top of my object
现在在某些情况下,我只得到 p1 和 p2,我需要知道欧拉角(沿 x、y 和 z 轴的旋转)。如何?
这是我尝试过的,答案应该是 (Rx, Ry, Rz): (4, -3, -11),
cv::Point3d p1, p2;
p1.x = 0.0525498;
p1.y = 0.0798909;
p1.z = -1.20806;
p2.x = 0.0586557;
p2.y = 0.111226;
p2.z = -1.20587;
double dx, dy, dz;
double angle;
dx = p2.x - p1.x;
dy = p2.y - p1.y;
dz = p2.z - p1.z;
angle = std::atan2(dy, dz); angle = RAD2DEG(angle);
std::cout<<"\n atan2(dy, dz): "<<int(90 - angle);
angle = std::atan2(dx, dz); angle = RAD2DEG(angle);
std::cout<<"\n atan2(dz, dx): "<<angle;
angle = std::atan2(dy, dx); angle = RAD2DEG(angle);
std::cout<<"\n atan2(dy, dx): "<<int(angle -90);
std::cout<<std::endl;
我没有得到完全正确的答案,尤其是沿 Y 的旋转根本不正确。我认为 p1 和 p2 在沿 y 轴旋转时都位于 y 轴上,所以问题是。那么什么是最好的解决方案?