作为我正在处理的应用程序的一部分,我正在尝试确定用户在屏幕上绘制的多边形的物理区域。
我使用此处详述的方法计算多边形的面积:
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.
任意魔法数字正在向我发出一个非常强烈的信号,即我在某处错误地计算了某些东西,但我很难弄清楚它是什么。如果事情非常明显,请提前道歉。我已经谷歌搜索和戳了几天,我不觉得我在这方面取得了很大的进展。
答案 0 :(得分:0)
很难猜到,但我猜你调试了calculatePointsArea
?我怀疑你是在点而不是像素上操作。使用[UIScreen scale]
为iPad Pro的Retina屏幕获取比例因子。
除此之外,我调试算法的典型方法是使用大量临时变量,并将它们打印出来。然后我提供非常简单的测试数据,并确保算法的所有步骤都能产生预期的结果。因此,请设置(1,1)--(10,1)--(10,10)--(1,10)
矩形,并确保您的大小为81
。