2016-04-01 51 views
2

作爲我正在處理的應用程序的一部分,我試圖確定用戶在屏幕上繪製的多邊形的物理區域。如何計算iOS中多邊形的物理面積?

我計算多邊形的面積,使用方法點這裏詳述:

http://www.mathopenref.com/coordpolygonarea.html

但是我停留在如何從該地區獲得指向物理區域一點點,像平方英寸。我相信我正在測試的設備(iPad Pro,9.7「)的DPI是264.以英寸爲單位獲得面積的方程式與點面積/(dpi * dpi)一樣簡單嗎?這似乎不會產生正確的結果以大比分不只是扔幾個幻數到混合

的代碼我使用的計算點區域如下:

- (double)calculatePointsArea { 
    double localPointsArea = 0; 
    for (int x = 0; x < points.count; x++) { 
     if (x + 1 < points.count) { 
      localPointsArea += (points[x].imagePoint.x * points[x + 1].imagePoint.y) - (points[x].imagePoint.y * points[x + 1].imagePoint.x); 
     } 
     else { 
      localPointsArea += (points[x].imagePoint.x * points[0].imagePoint.y) - (points[x].imagePoint.y * points[0].imagePoint.x); 
     } 
    } 
    localPointsArea = localPointsArea/2; 
    return fabs(localPointsArea); 
} 

我使用與播放的代碼面積計算如下:

pointsArea = [self calculatePointsArea]; 
long dpi = [TSTDPIManager deviceDPI]; //this is a class to manage the dpi values for various devices. Right now it is set to return 264 for my device, which I believe is correct. 

double physicalAreaUsingPoints = ((pointsArea)/(dpi * dpi)); 
physicalAreaUsingPoints = physicalAreaUsingPoints * (7.2); 7.2 is completely arbitrary, but seems to yield the correct result on my device and the simulator. 

隨機幻數是發送給我一個非常強烈的信號,說我在某個地方誤判了事情,但我很難搞清楚它是什麼。如果事情非常明顯,請提前道歉。我一直在Google上搜索並捅了幾天,我不覺得我在這方面取得了很多進展。

回答

0

這很難猜出,但我假設你調試了calculatePointsArea?我懷疑你正在使用點而不是像素。使用[UIScreen scale]可獲得iPad Pro視網膜屏幕的比例因子。

除此之外,我調試算法的典型方法是使用大量的臨時變量,並將它們打印出來。然後,我提供非常簡單的測試數據,並確保算法的所有步驟都能產生預期結果。因此,請製作(1,1)--(10,1)--(10,10)--(1,10)矩形,並確保您的尺寸爲81

+1

我已驗證了帶有幾個測試集的calculatePointsArea。我插入你的建議,它確實返回81作爲尺寸。在你的陳述中,你正確地使用了點而不是像素,並且我相信我的問題正在試圖從點到物理尺寸。 我已經玩過使用的規模,但仍然不會得到預期的結果。你是否建議正確的公式是(pointsArea * scale)/(dpi^2)? – bojangles

+0

爲自己繪製一個3x3的矩形,並嘗試按2縮放。想象一下,您在其上操作的是點,並且您想獲取像素。 'scale'從點到像素縮放。 **示例**:3px3p點矩形(9p^2)縮放的「x 2」將是6x6(36p^2),而不是3x6(p^2) 您應該能夠從中計算出公式。 –

+1

再次感謝。我很感激幫助。我不確定我是如何忽視這一點的。我目前使用的公式(pointsArea * scale^2)/(dpi^2),這似乎產生更一致的結果。我得到的結果似乎一直保持在75-77%之間。這似乎與縱橫比一致,並且乘以1.75-1.77似乎產生始終準確的結果。這對你有意義嗎? – bojangles

相關問題