我正在使用kinect和ofxopeni。我有一個真實世界座標點雲,但我需要旋轉這些點來抵消相機的傾斜。地面飛機應該給我所需要的所有信息,但我無法計算出如何計算旋轉軸和旋轉角度。旋轉3d點雲以偏移給定的vNormal和floor點的平面角度
我最初的想法是......
ofVec3f target_normal(0,1,0);
ofVec3f vNormal; //set this from Xn3DPlane floorPlane (not shown here)
ofVec3f ptPoint; //as above
float rot_angle = target_normal.angle(vNormal);
for(int i = 0; i < numPoints; i++){
cloudPoints[i].rotate(rot_angle, vNormal, ptPoint); //align my points to normal is (0 1 0)
}
這似乎是迄今爲止過於簡單化。我一直在釣魚通過各種文章,可以看到它最有可能涉及到一個四分之一或旋轉矩陣,但我不知道從哪裏開始。我非常感謝任何關於相關文章的指針,或者獲得旋轉軸和旋轉角度的最佳技術是什麼?我在想象它可以使用onQuarterion或openni函數很容易地完成,但我無法解決如何實現。
最好
西蒙
感謝這使得旋轉矩陣使更多的意義!僅供參考,我最終使用了一些易於使用的ofVec3f函數。即得到法向量和目標向量的叉積作爲旋轉軸。獲取目標和法線之間的角度,然後在樞軸點處圍繞軸旋轉所有點。下次我將使用這種方法。 –