Я хотел бы создать вид дополненной реальности, который будет указывать на объект в определенном направлении. Однако заголовок CoreLocation работает неправильно, когда вы смотрите вверх камерой (скажем, на верх 20-этажного здания, когда вы находитесь на первом этаже).
Он дает противоположное направление (возможно, направление, указываемое верхней частью телефона).
Я пробовал несколько способов заставить его работать в том направлении, в котором указывает камера, например:
1, +180 градусов, когда ориентация устройства> 45 градусов (недостаточно точно, внезапно направление уходит на 10-20 градусов)
2, попытка вычислить с помощью CMMotionManager с формулой из приведенного ниже руководства. http://www.loveelectronics.co.uk/Tutorials/13/tilt-compensated-compass-arduino-tutorial.
3, попытался смоделировать логику из Android с помощью ios deviceMotion.mintageField и deviceMotion.gravity.
4, используйте матрицу вращения (какой-то другой пост в переполнении стека, но не точный)
double heading = M_PI + atan2(self.altitudeData.rotationMatrix.m22, self.altitudeData.rotationMatrix.m12);
heading = heading*180/M_PI;
Я уже не понимаю, что еще я мог бы попытаться исправить. Я знаю, что есть некоторые приложения (некоторые приложения, которые могут видеть солнце и звезды), которые делают это правильно.