作为我正在处理的应用程序的一部分,我试图确定用户在屏幕上绘制的多边形的物理区域。

我正在使用此处详述的方法以点为单位计算多边形的面积:

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

但是,我对如何从点的面积到实际的面积(如平方英寸)有些困惑。我相信我正在(iPad Pro,9.7“)上测试的设备的DPI为264。以英寸为单位的面积的方程式真的像pointsArea /(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作为大小。

关于ios - 如何计算iOS中多边形的物理面积?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36348035/

10-11 04:34