3

Я пытаюсь написать приложение дополненной реальности. Я использую координаты компаса, гироскопа и GPS для создания наложений. Все работает отлично, за исключением случаев, когда пользователь покидает портретный режим. Должна быть просто простая проблема с триггером, которую я не могу понять.iPhone тригонометрия для ориентации

Чтобы определить, находится ли координата в поле зрения, я использую значение азимута и наклона центральной точки iPhone, которое рассчитывается в начале программы. Азимут определяется как движение влево и вправо, когда телефон направлен вверх, а направление движения вверх и вниз, когда телефон направлен вверх. Затем я обновляю это значение с помощью данных гироскопа и компаса по мере его обновления. Поэтому, если я правильно обновляю наклон и азимут центральной точки, все должно работать.

Проблема в том, что когда iPhone повернут, его определение азимута и наклона остается неизменным по отношению к телефону. Таким образом, наклон по-прежнему определяется как до верхней части телефона, хотя телефон боком.

То, что я пытался что-то делал так:

self.centerPoint.azimuth = (degToRad(angleX)*cosZ) + (degToRad(angleY)*sinZ); 
self.centerPoint.inclination = (degToRad(angleY)*cosZ) + (degToRad(angleX)*sinZ); 

где degToRad (х) преобразует из градусов в радианы, cosZ и sinZ является соз и грех г-угла от гироскопа, соответственно, и angleX и angleY ​​- углы x и y из гироскопа. X-угол от гироскопа измеряет угол вверх, Y-угол измеряет влево-вправо, а Z-угол измеряет вращение телефона от портретного до пейзажного.

Кажется, что не работает. Когда я поворачиваю телефон в сторону, наклон резко увеличивается. Кто-нибудь может помочь?

Я должен добавить, что обычно, когда учитываю только портретную ориентацию, я использовал: azimuth = degToRad (angleX) и наклон = degToRad (angleY). Это работает для портретной ориентации. Я должен просто умножить это на некоторый фактор, чтобы учесть разный угол.

+0

Веб-сайт Apple Stack Exchange? – Shoe 2010-11-30 20:35:18

+0

Нет, это вопрос программирования, а не вопрос программного обеспечения Apple. – 2010-11-30 23:01:52

ответ

0

Прошло много времени с тех пор, как я решил эту проблему, но если бы это был просто вопрос перехода от портрета к пейзажу, разве вы не могли бы просто поменять значения азимута и наклона по мере необходимости?

В конце концов, они оба только под углом вычисляются одинаково, и только ярлык действительно делает их разными. Возможно, вам стоит просто пометить их angle1 и angle2, а затем использовать их в других расчетах на основе ориентации телефона.


Update:

В еще раз, глядя на это, я думаю, ваша проблема в том, что ваш используете неправильный датчик. Данные гироскопа возвращают радианы/сек и являются мерой скорости вращения, которую вы не хотите.

Вместо этого, думаю, вам нужно использовать измерение отношения, предоставляемое CMAttitude. Класс CMAttitude предоставляет данные для рулона, высоты тона и рыскания, что позволит вам вычислить физическую ориентацию устройства. Метод multiplyByInverseOfAttitude: выглядит так, что это обеспечит изменение ориентации устройства между любыми двумя образцами.

 Смежные вопросы

  • Нет связанных вопросов^_^