2D情況下
答案的這一部分只討論剛體運動在平面,所以它不完全匹配的問題。
假設你已經確定你的觀點,這似乎根據your comment工作。現在您可以計算這些點之間的距離並對它們進行排序。兩個檢測點之間的最短距離應與原始三角形的最短邊相對應,依此類推。有了這些信息,你可以標記您的點作爲一個,乙和Ç。
接下來,您移動(平移)的所有點,這樣一個點位於原點之後。這是假設你原來的三角形在原點有一個角落。讓我們假設A位於原點,無論是在原始三角形還是在移動的點集中。此向量的否定版本表示您的三角形的翻譯。
現在輪換。假定此時,對於原來的三角形,乙位於正X軸,即,具有Ŷ = 0和X> 0。現在可以採取點的(移動)位置B,並使用其座標的atan2
,您可以確定軸AB和x軸之間的角度。所以這是你的三角形的角度輪轉。
您可以將這兩個組合成一個仿射變換。如果原始三角形不與甲在原點和乙位於X軸的正的部分,然後就可以使用類似的技術來確定的原始三角形如何涉及一個具有所描述的特性。
3D情況下
對於空間的剛性運動,我沒有準備好使用的解決方案。只有一個想法。假設您的相機位於原點,並且您分析的圖像被嵌入在 z = 1。然後將圖像中的點( X,ÿ)對應於一個點( X,ÿ,1)在該嵌入位置,並穿過該點的射線是由該座標倍數給出即(λx,λy,λ)。因此,從圖像中的點 A, B和和 C的位置開始,可以基於每個點的單個變量計算相應的空間點。 a到 c。
現在您的任務是選擇這三個變量,以便空間中各點之間的距離與三角形的邊長相匹配。這導致三個變量的系統有三個變量:
(a - b)^2 + (Ay*a - By*b)^2 + (Ax*a - Bx*b)^2 == AB^2
(a - c)^2 + (Ay*a - Cy*c)^2 + (Ax*a - Cx*c)^2 == AC^2
(b - c)^2 + (By*b - Cy*c)^2 + (Bx*b - Cx*c)^2 == BC^2
不幸的是,這些方程不是線性的。你所有的變量都有正方形。簡單地將它們送入計算機代數系統尚未爲我提供明確的解決方案。我想可能有數字方法來找到使用一些迭代過程的近似值,但是您必須對此進行一些研究。
一旦你有了3D座標,通過比較來計算這些變換應該是簡單的。這完全取決於你想要描述旋轉的格式。
來源
2012-10-17 09:27:39
MvG
準確地說你的問題是什麼?你在問代碼嗎? – jlengrand
對不起,jonsca編輯我的文字。我的問題是在這個缺失的文字:「但現在我卡住了。任何建議如何繼續?? :( 在此先感謝, escore。」我不需要代碼,但也許一些指示/命令,我應該谷歌要知道如何繼續從這一點上。謝謝! –
請不要全部編輯我的文本!!看看這是如何使問題? –