2012-01-01 33 views
2

我已經寫在XNA一個簡單的AR程序,現在我試圖找到我的2個標記之間的相對轉變。試圖找到兩個位置之間的相對變換 - XNA

我已經找到了我的標誌相對於我的相機,並提取了平移和旋轉矩陣的標記。

我想要做的是找出從標記1到標記2的相對平移。例如,如果標記1和標記2位於同一個Z平面上,則Z平移分量將爲0mm。

圖像下面正在爲在同一平面上2個位置的應用:

enter image description here

我假定由第一標記的逆只需將第二標記的矩陣乘以我可以得到譯文。但是,我得到完全錯誤的結果。

我正在運行的代碼如下:

posit.EstimatePose(點,出矩陣,出反式);

  float yaw, pitch, roll; 

      matrix.ExtractYawPitchRoll(out yaw, out pitch, out roll); 

      Matrix rotation = 
       Matrix.CreateFromYawPitchRoll(-yaw, -pitch, roll); 

      Matrix translation = 
       Matrix.CreateTranslation(new Vector3(trans.X, trans.Y, -trans.Z)); 

      Matrix complete = rotation * translation; 
      List<Matrix> all = new List<Matrix>(); 
      all.Add(rotation); 
      all.Add(translation); 
      all.Add(complete); 
      matrixes.Add(all); 

     } 

     Matrix res = Matrix.Invert(matrixes[0][2]) * matrixes[1][2]; 
     Vector3 scaleR; 
     Vector3 translationR; 
     Quaternion rotationR; 
     res.Decompose(out scaleR, out rotationR, out translationR); 

其結果是:

TranslationR:{X:-103.4285 Y:-104.1754 Z:104.9243}

我已覆蓋的三維軸到圖像如上所示使用XNA所以我假定相對於相機的旋轉和平移已正確計算出來。

好像我做的事一起來計算平移的方式是錯誤的。我絕對不會指望Z等於104毫米。我期待的線沿線的東西:

{X:0 Y:150 Z:0}類似於此之前

回答

0

我已經做了一些,但是它是使用在2D環境中的3x3矩陣(用X,Y翻譯,旋轉,傾斜)。問題4x4是否是矩陣?

是的,你說得對,找到矩陣變換對象A以矩陣M1到對象B與矩陣M2可以計算M1' * M2(其中M1' 是逆)。

您可能正在運行到的問題是,一個矩陣是由旋轉,平移,縮放以及其它的變換(例如,歪斜/透視)的。將矩陣分解爲其組成部分通常會產生非確定性答案。它就像二次方程一樣,有多個解決方案。

另一個問題可能是矩陣運算是不可交換的,你只是周圍執行他們走錯了路。如果您執行M1'* M2和M2 * M1',您將得到不同的結果。

請試試看(切換矩陣順序)。另外,我會查找您使用的矩陣分解函數 - 旋轉的什麼值&縮放是你在輸出?你的對象是旋轉還是縮放?如果不是那麼你應該得到零。請注意,可能有多個旋轉+平移解決方案獲得相同的最終結果,分解函數不知道您在尋找哪個。


只提取翻譯組件,你可以使用的方法形式this page

vt = (M14, M24, M34)T 

當您嘗試您能得到什麼?

0

我所試圖做的是找出相對平移獲得 從標記標記2 1.

Vector3 relativeTranslation = Marker2Matrix.Translation - marker1Matrix.Translation; 

我的回答似乎過於簡單,所以也許我不抓你的問題完全可以實現,但它會創建一個向量,將其添加到Marker1的位置(翻譯)後,會使您獲得Marker 2的位置信息。

相關問題