2012-03-08 50 views
0

我有由四個點,A,B,C和d,其中僅其位置是已知的形狀。目標是將這些點變換爲具有相對於彼此的特定角度和偏移量。最佳擬合方到四邊形

例如:A(-1,-1) B(2,-1) C(1,1) D(-2,1),應將其轉換爲AB,BC,CD和AD之間的偏移量爲2的完美正方形(所有角度爲90°)。結果應爲逆時針輕微旋轉的正方形。

什麼是最有效的方法來做到這一點? 我用這一個簡單的塊模擬程序。

+0

您沒有提供足夠的信息來給出一個明確的回答你的問題。例如,如果要將B移動到(1,-1),將D移動到(-1,1),則會有一個正方形(儘管不會旋轉離開座標軸)。你是否也許正在尋找一個方形來最小化你必須將你的4點平移到正方形的距離? – 2012-03-08 12:00:08

+0

我建議改變這個「最適合四邊形的方形」,這樣其他人會發現在搜索引擎中更容易。 – 2012-03-09 10:31:50

回答

1

正如馬克暗示,我們可以使用約束優化找到側2平方米,爲原來的角落的距離的平方最小。

我們需要儘量減少f = (a-A)^2 + (b-B)^2 + (c-C)^2 + (d-D)^2(其中方實際上是向量參數的點產品,本身)受到一些限制。

Lagrange multipliers的方法,我選擇了追隨距離限制:

g1 = (a-b)^2 - 4 
g2 = (c-b)^2 - 4 
g3 = (d-c)^2 - 4 

及以下角度約束:

g4 = (b-a).(c-b) 
g5 = (c-b).(d-c) 

快速餐巾紙草圖應該說服你,這些限制就足夠了。

然後,我們希望儘量減少˚F受G的全部爲零。

拉格朗日函數是:

L = F +薩姆(i = 1至5,李GI)

其中li s爲拉格朗日乘子。

漸變是非線性的,所以我們必須採取粗麻布並使用multivariate Newton's method迭代到解決方案。

這是我得到了解決(紅色)給出的(黑色)的數據:

Best fit square

這花了5次迭代,該步驟的L2標準之後是6.5106e-9。

+0

+1:我不想寫這麼好的答案,你是SO社區的功勞。 – 2012-03-09 10:31:17

+0

@HighPerformanceMark:謝謝! – 2012-03-09 10:34:03

+0

正是我需要的。接受這個答案。 – RPFeltz 2012-03-12 09:00:14