2011-11-16 52 views
0

我正在開發自己的增強現實引擎。獲取軸承位置接近0的位置的point.x

在這種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。這是一個錯誤。

我想知道如何解決它,我不知道如何。

任何線索?

回答

0

看起來像deltaOrient的計算是天真的。當它從0開始到359時,它可能等於359而不是-1。這顯然是一個問題。

我想不出一個好的和簡單的解決問題的,但你至少可以測試通過做這樣一個黑客:

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