Я пытаюсь написать приложение дополненной реальности. Я использую компас, гироскоп и координаты GPS для создания наложений. Все работает отлично, за исключением того, когда пользователь выходит из портретного режима. Должна быть простая проблема с триггером, которую я не могу понять.
Чтобы определить, находится ли координата в поле зрения, я использую значение азимута и наклона центральной точки iPhone, которые вычисляются при запуске программы. Азимут определяется как движение влево и вправо, когда телефон направлен вверх, а наклон — движение вверх и вниз, когда телефон направлен вверх. Затем я обновляю это значение данными гироскопа и компаса по мере их обновления. Поэтому, если я правильно обновлю наклон и азимут центральной точки, все должно работать.
Проблема в том, что когда iPhone поворачивается, его определение азимута и наклона остается неизменным по отношению к телефону. Таким образом, наклон по-прежнему определяется как верхняя часть телефона, даже если телефон находится сбоку.
Я пробовал делать что-то вроде этого:
self.centerPoint.azimuth = (degToRad(angleX)*cosZ) + (degToRad(angleY)*sinZ);
self.centerPoint.inclination = (degToRad(angleY)*cosZ) + (degToRad(angleX)*sinZ);
где degToRad(x) преобразует градусы в радианы, cosZ и sinZ — это cos и sin угла z от гироскопа соответственно, а angleX и angleY — это углы x и y от гироскопа. Угол X от гироскопа измеряет угол вверх-вниз, угол Y измеряет влево-вправо, а угол Z измеряет поворот телефона от портретной ориентации к альбомной.
Кажется, не работает. Когда я поворачиваю телефон в сторону, наклон резко возрастает. Есть триггеры, которые могут помочь?
Я должен добавить, что обычно, рассматривая только портретную ориентацию, я использовал: азимут = degToRad (уголX) и наклон = degToRad (уголY). Это работает для портретной ориентации. Мне просто нужно умножить это на какой-то коэффициент, чтобы учесть другой угол.