Получение point.x для местоположения с азимутом около 0 - PullRequest
0 голосов
/ 16 ноября 2011

Я разрабатываю свой собственный движок дополненной реальности.

В этом уроке Я нашел, как отобразить точку на экране, используя ее азимут, размер экрана 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 голосов
/ 16 ноября 2011

Похоже, расчет deltaOrient наивен.Когда он идет к 359 от 0, он, вероятно, равен 359 вместо -1.Очевидно, это проблема.

Я не могу придумать хорошее и простое решение проблемы, но вы могли бы по крайней мере проверить, сделав хак, как это:

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