2011-11-25 125 views
3

我正在嘗試平滑多邊形的邊緣。這是一個允許用戶放大和縮小的地圖應用程序。在高變焦時,我不需要所有的細節,所以我平滑多邊形以減少點數。我只是遍歷所有點,並刪除距離最後一個X距離內的任何點。其中X在所得屏幕上適當地爲1個像素。邊緣平滑,同時保留角落等功能

這似乎工作很好,除少數情況下。例如,如果用戶放大,我放大矢量,同時異步加載細節。在加載額外的細節,用戶會看到像什麼是下圖中:

Enlarged vector image showing the problem

方形矢量多邊形有他們的邊角稍有不慎四捨五入。

我正在尋找的是一種平滑的或調整大小的算法,它將減少繪製多邊形的點數,同時保留一些特徵,如角點。

+0

爲什麼這些多邊形中有超過4個寬間隔點? – erickson

+0

這些多邊形是美國的縣,並不都是簡單的正方形。我只是選擇了一個可以看到問題的區域。然而,定義縣(由人口普查局提供)的數據具有多條直線。 希望平滑算法可以去除這些無用的點。 – bramp

回答

3

也許你可以使用類似Douglas-Peucker算法。

它可以用於通過刪除不會改變整體形狀的點「太多」(容差值控制「太多」的含義)來簡化多義線。

我認爲這會消除多線中「直線」部分的點,同時保留尖銳特徵(如角)完好無損。

希望這會有所幫助。

+0

謝謝,看起來不錯的開始。 – bramp

1

您可以檢查該點任一側的兩條線所形成的角度,並且只有在該角度低於指定閾值時才能移除該點。

+0

我曾考慮過這個問題,但我希望得到一個更正式的算法,而不是滾動自己的算法。 – bramp

+0

@bramp我明白了。我應該刪除這個嗎? –

+0

Mr.Wizard,我不知道StackOverflow禮節是什麼,但我不介意它是否保留或被刪除。也許有人會根據你的建議採用正式的算法來啓發我們。 – bramp