2012-12-07 56 views
7

我正在努力計算一組點的最小包圍矩形(任意對齊)。有人可以向我解釋旋轉卡鉗嗎?

我能夠使用格雷厄姆算法計算凸包。

我卡在哪裏是下一步。我想過使用旋轉卡尺方法,但我似乎無法找到算法的充分解釋。

+0

看看[這個解釋](http://cgm.cs.mcgill.ca/~orm/maer.html)。 – mbeckish

+1

你看過[杜桑的原創論文](http://cgm.cs.mcgill.ca/~godfried/publications/calipers.pdf)嗎?第1頁和第2頁非常清楚地解釋了算法(IMO)。請注意,頁碼是相反的... –

回答

8

如果你有凸包,那麼一個簡單的基本算法。您只需穿過凸包的每個邊緣並旋轉您的點,以便邊沿沿着主軸,比如說X軸。然後找到這些點的軸對齊邊界框。選擇邊界框最小的那個。

通過獲取每個維度的最小值和最大值,可以找到軸對齊的邊界框。

如果您按相反的數量旋轉邊界框,現在它將包圍原始點。

爲了使效率更高,請注意,只有可能影響邊界框的點位於凸包上。

爲了使其效果非常好,請注意,在任何一次觸摸邊界框的凸包周圍只有四個點(這不完全正確,但現在忽略)。如果旋轉點剛好足以使下一個邊與邊界框對齊,那麼其中三個點是相同的,其中一個點將用凸包圍的下一個點替換。這可以讓你創建一個算法,該算法在凸包上的點數是線性的。

現在有兩個邊平行或垂直的特殊情況。這會導致在任何時候都有四個以上的點觸摸邊界框,但實際上並不重要。如果您可以選擇下一個要使用的兩個平行邊線中的哪一個,則可以任意選擇一個邊線。

+0

此方法的唯一問題是它是O(n^2),當凸包中有許多頂點時可能不適合。 – mbeckish

+0

@mbeckish:true - 我已經通過一些優化擴展了我的答案。也許把它看作一個簡單的優化算法會讓它更容易理解。 –

+0

這是不正確的,在任何時候只有四個凸點周圍的接觸邊界框。假設共凸點不出現在凸包中,邊界框最多可觸及8個點。考慮凸包'(2,0),(3,0),(4,1),(4,2),(3,3),(2,3),(1,2),(1, 1)'用一個軸對齊的邊界框(或一個傾斜45度)接觸所有點。 –

相關問題