2012-05-25 67 views
1

我正在研究一個iOS應用程序,我需要能夠看到CGPath在屏幕邊界內有多少,以確保用戶仍然可以觸摸到足夠的空間。問題是,當形狀位於角落時,當路徑位於角落時,我通常會使用的所有方法(以及我認爲可以嘗試的所有方法)都會失敗。CGPath相交的尋找區域CGRect

這裏有一個圖:enter image description here

我如何可以計算出該形狀的多少在屏幕上?

+0

你到底在找什麼?你想測量重疊區域(以平方點爲單位)嗎?或者你想要一個只包含重疊的路徑或掩碼?或者是其他東西? –

+0

CGPath是完全一般的,還是保證是一個多邊形,如圖所示? – Tommy

+0

@robmayoff如果可能,我想以平方點來測量面積。 – daveMac

回答

3

明顯的答案是通過像素繪畫經驗地做,或通過多邊形裁剪分析。

因此,要憑經驗繼續創建一個CGBitmapContext視口的大小,將其清除爲已知顏色(例如(0,0,0)),以另一種已知顏色繪製多邊形,如say(1, 1,1),然後遍歷位圖上下文中的所有像素,並將您可以找到的總數加起來。這可能相當昂貴,但如果有幫助的話,您可以使用較低分辨率的上下文獲得更近似的結果。

要進行分析,您需要運行一個多邊形裁剪算法,例如那些described here,以從原始圖像派生出一個新的多邊形,該多邊形就是實際在屏幕上的那個部分。然後你可以使用任何常規公式得到該區域。

實際上,剪切凸多邊形要比凹形多邊形容易得多,因此如果多邊形的形狀是固定的,那麼可以考慮使用三角網算法,如ear clippingdecomposition to monotone edges,然後執行剪裁和麪積計算在那些而不是原來的。

0

你可以使用這種方法得到的近似:

  • 設REG與形狀的邊框屏幕路口
  • 到Reg選擇N個隨機點,檢查它們是否包含在形狀
  • 形狀的面積可以通過*(包含在形狀點的數目)(reg的面積)來估計/ N

可以選擇基於再大小的參數N g得到一個好的和快速的近似值