我正在研究一個iOS應用程序,我需要能夠看到CGPath在屏幕邊界內有多少,以確保用戶仍然可以觸摸到足夠的空間。問題是,當形狀位於角落時,當路徑位於角落時,我通常會使用的所有方法(以及我認爲可以嘗試的所有方法)都會失敗。CGPath相交的尋找區域CGRect
這裏有一個圖:
我如何可以計算出該形狀的多少在屏幕上?
我正在研究一個iOS應用程序,我需要能夠看到CGPath在屏幕邊界內有多少,以確保用戶仍然可以觸摸到足夠的空間。問題是,當形狀位於角落時,當路徑位於角落時,我通常會使用的所有方法(以及我認爲可以嘗試的所有方法)都會失敗。CGPath相交的尋找區域CGRect
這裏有一個圖:
我如何可以計算出該形狀的多少在屏幕上?
明顯的答案是通過像素繪畫經驗地做,或通過多邊形裁剪分析。
因此,要憑經驗繼續創建一個CGBitmapContext
視口的大小,將其清除爲已知顏色(例如(0,0,0)),以另一種已知顏色繪製多邊形,如say(1, 1,1),然後遍歷位圖上下文中的所有像素,並將您可以找到的總數加起來。這可能相當昂貴,但如果有幫助的話,您可以使用較低分辨率的上下文獲得更近似的結果。
要進行分析,您需要運行一個多邊形裁剪算法,例如那些described here,以從原始圖像派生出一個新的多邊形,該多邊形就是實際在屏幕上的那個部分。然後你可以使用任何常規公式得到該區域。
實際上,剪切凸多邊形要比凹形多邊形容易得多,因此如果多邊形的形狀是固定的,那麼可以考慮使用三角網算法,如ear clipping或decomposition to monotone edges,然後執行剪裁和麪積計算在那些而不是原來的。
你可以使用這種方法得到的近似:
可以選擇基於再大小的參數N g得到一個好的和快速的近似值
你到底在找什麼?你想測量重疊區域(以平方點爲單位)嗎?或者你想要一個只包含重疊的路徑或掩碼?或者是其他東西? –
CGPath是完全一般的,還是保證是一個多邊形,如圖所示? – Tommy
@robmayoff如果可能,我想以平方點來測量面積。 – daveMac