【发布时间】:2016-07-20 18:29:46
【问题描述】:
作为我正在开发的应用程序的一部分,我试图确定用户在屏幕上绘制的多边形的物理区域。
我正在使用此处详述的方法以点为单位计算多边形的面积:
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.
任意幻数向我发送了一个非常强烈的信号,表明我在某处计算错误,但我很难弄清楚它是什么。如果事情非常明显,请提前道歉。我已经在谷歌上搜索和戳了几天,我觉得我在这方面没有取得很大进展。
【问题讨论】:
标签: ios objective-c