2012-01-04 60 views
0

我试图做一个基于位置的应用程序,我一直试图调试它3天,仍然无法弄清楚什么是错的......在我的视图控制器中,我正在通过一些位置点(纬度和经度)所代表的方法:基于位置的应用程序调试

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation   fromLocation:(CLLocation *)oldLocation{ 
    currentPoint.lat=newLocation.coordinate.latitude*M_PI/180; 
    currentPoint.longit=newLocation.coordinate.longitude*M_PI/180; 
} 

其中当前点是从Pointxy我已创建的类的对象,则只不过是具有两个属性lat和longit两个浮筒的对象更多。

然后我创建了另一个叫做Shape的类,它有一个NSMutableArray(ptArray)和一个叫做area的属性,它是一个long double。

我然后存储一串在ptArray尖尖对象,然后预成型件在下面形状的方法使用它们:

-(void)CalculateArea{ 
for (int i=0; i<[self NumberofPoints]-1; i++) { 
    Pointxy *pointi=[ptArray objectAtIndex:i]; 
    Pointxy *pointiplus1=[ptArray objectAtIndex:i+1]; 
    area-=6371.0*6371.0/2.0*(pointiplus1.longit-pointi.longit)*(2+sinf(pointiplus1.lat)+sinf(pointi.lat)); 
} 
Pointxy *pointzero=[ptArray objectAtIndex:0]; 
Pointxy *pointlast=[ptArray objectAtIndex:[ptArray count]-1]; 

area-=6371.0*6371.0/2.0*(pointzero.longit-pointlast.longit)*(2+sinf(pointzero.lat)+sinf(pointlast.lat)); 
area=area*1000000.0; 
    } 

我遇到的问题是,我然后尝试使用此在的UILabel显示区域代码:

NSString *AreaString=[[NSString alloc]initWithFormat:@"%Lf",MyShape.area]; 
    [AreaLabel setText:AreaString]; 

MyShape的地方是一个Shape对象,AreaLabel是的UILabel,我总是得到0.0000显示,我应该不是任何人都可以看到,为什么?我想这可能是一个精确的问题,我的变量是吗? 非常感谢你

+0

坐标以度为单位,无需将其转换为弧度。您是否尝试过使用NSLog打印坐标?你有没有使用已知的良好数据测试你的CalculateArea函数? – progrmr 2012-01-04 21:14:52

+0

我没有测试过,但我的来源是来自美国国家航空航天局的一篇论文:http://trs-new.jpl.nasa.gov/dspace/bitstream/2014/40409/1/07-03.pdf所以应该没有错误它根本就没有。无论如何,即使有同样的错误,它怎么会总是返回零?我将它转换为弧度以在sinf()函数中使用它...是的,我实际上有一个Label,它实时显示存储在数组中的坐标,谢谢。 – Mppl 2012-01-04 22:26:24

+0

@ user611295:美国国家航空航天局的论文可能没有任何错误,但是它是你需要检查和测试的算法的实现。另外,在Objective-C中,即使区域算法代码是正确的,答案仍有很多方法可以达到零。如果你正在使用的一些对象没有被alloc + init -ed,它们将是零,导致没有操作。示例:如果MyShape为零,则MyShape.area将返回零。如果ptArray为零或为空,您将得到零。等如progrmr建议,你需要添加日志记录,并进行单元测试。 – Anna 2012-01-05 03:05:40

回答

0

我刚刚发现了我的错误。我打电话给[ptArray addObject:currentPoint];其中currentPoint是一个pointxy实例。

事情是之后,我是分配一个新的值,以currentPoint.latlongit但由于addObject方法通过引用传递对象时我改变了值的数组对象过于被改变的值,然后我被加入currentPoint另一但是因为它是通过引用的方式传递的,所以我现在在我的阵列中得到了一组相等的点,并且这些点内的图中的面积确实为零!

相关问题