如何在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.

这个任意的神奇数字向我发出了一个非常强烈的信号,表明我在某个地方计算错误了,但我很难弄清楚它是什么。如果它是非常明显的,请提前道歉。我已经在谷歌上搜索和戳了几天了,我觉得我在这方面没有取得很大进展。

很难猜测,但我假设您调试了calculatePointsArea?我怀疑你是在点而不是像素上操作。使用[UIScreen scale]获取iPad Pro的Retina屏幕的比例因子。

除此之外,我调试算法的典型方法是使用大量临时变量,并将它们打印到各处。然后我提供了非常简单的测试数据,并确保算法的所有步骤都能产生预期的结果。所以把(1,1)--(10,1)--(10,10)--(1,10)做成矩形,并确保81的大小。

最新更新