我知道一條線(不對稱物體的頂部和底部)中的兩個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軸旋轉,所以問題是。那麼什麼是最好的解決方案?
一個問題是,一個單一的載體是沒有足夠的信息來確定三個角度。矢量仍然有任意的旋轉。 –
嗨@VaughnCato意味着我必須得3分?任何不錯的參考? – Rudi
您不一定需要三點,但您需要一些附加約束,例如總旋轉應該最小化,或三個角度之一爲零。儘管有第三點肯定是可能的。 –