ios - 如何计算 iOS 中多边形的物理面积?

标签 ios objective-c

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

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

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.

任意魔数(Magic Number)向我发送了一个非常强烈的信号,表明我在某处计算错误,但我很难弄清楚它是什么。如果它非常明显,请提前道歉。几天来我一直在谷歌搜索和戳这个,但我觉得我在这方面没有取得很大进展。

最佳答案

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

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

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

相关文章:

objective-c - 对数组求和 - Objective-C

ios - 获取对容器 View View 的引用

iOS StoreKit 交易标识符与收据不匹配

ios - 带有下拉菜单和键盘选项的警报 Controller ? swift 3、Xcode 8、IOS

ios - 如何将 bool 转换为 NSData

iphone - NSOperation 和 NSOperationQueue 如何使用以及在哪里使用 >

objective-c - 应用被拒绝,因为缺少引用的框架

ios - 出现此错误时如何退出facebook sdk登录?

html - 如何在iOS中对html格式的字符串应用粗体?

ios - 下一个 NSDateFormatter 问题