获取point.x表示轴承接近0的位置

时间:2011-11-16 14:44:26

标签: iphone geolocation augmented-reality bearing

我正在开发自己的增强现实引擎。

在这个tutorial中,我发现如何使用其轴承,iPhone屏幕尺寸和相机视野在屏幕上显示一个点:

+ (CGPoint) calculatePositionFor:(float)deltaOrient screenSize:(CGSize)screenSize fov:(float)fov
{
    CGPoint point;

    CGFloat x = (screenSize.width / 2.0f) + (deltaOrient * (screenSize.width / (fov / 2.0f)));
    CGFloat y = screenSize.height / 2.0f;

    point = CGPointMake(x, y);

    return point;
}

其参数为:

deltaOrient:是位置负载设备标题。 screenSize: iPhone的屏幕尺寸。 fov:相机的视野。

它工作正常,直到我想在北方附近显示位置。当设备标题从1度变为359度时,它不起作用。

我得到这个日志:

2011-11-16 15:10:16.067 AREngineDemo[310:707] Beta: 7.005, Heading: 2.504323, X: 234.424377
2011-11-16 15:10:16.104 AREngineDemo[310:707] Beta: 7.005, Heading: 1.504323, X: 250.961853
2011-11-16 15:10:16.117 AREngineDemo[310:707] Beta: 7.005, Heading: 0.504323, X: 267.499329
2011-11-16 15:10:16.149 AREngineDemo[310:707] Beta: 7.005, Heading: 0.504323, X: 267.499329
2011-11-16 15:10:16.172 AREngineDemo[310:707] Beta: 7.005, Heading: 359.504333, X: -5669.451660
2011-11-16 15:10:16.195 AREngineDemo[310:707] Beta: 7.005, Heading: 358.504333, X: -5652.914551
2011-11-16 15:10:16.217 AREngineDemo[310:707] Beta: 7.005, Heading: 358.504333, X: -5652.914551
2011-11-16 15:10:16.244 AREngineDemo[310:707] Beta: 7.005, Heading: 358.504333, X: -5652.914551

X coodinate从247转到-5669。这是一个错误。

我想知道如何解决它,我不知道怎么做。

有任何线索吗?

1 个答案:

答案 0 :(得分:0)

看起来deltaOrient的计算很幼稚。当它从0变为359时,它可能等于359而不是-1。这显然是一个问题。

我想不出一个好的和简单的问题解决方案,但你至少可以通过做这样的黑客来测试:

if(deltaOrient > 180) deltaOrient -= 360;
else if(deltaOrient < -180) deltaOrient += 360;