看起来这应该是一件容易的事,但我只是没有任何运气。使用Core Motion确定手机的海拔高度和方位角
我想要做的就是使用核心运动来跟踪手机相机的指向位置(对于某种增强现实应用程序)。用户可以将手机指向参考点(就像拍摄照片一样),然后按下按钮将手机的位置与对象“对齐”。现在,当用户将手机的相机指向其他物体时,我需要确定手机的高度(-90º到+90º)和方位角(0º到360º)。
由CMAttitude给出的欧拉角度看起来并不是我所需要的。我尝试缓存用户点击“对齐”时获得的CMAttitude。然后当用户移动手机时,我得到一个新的CMAttitude并使用multiplyByInverseOfAttitude来确定与参考态度的差异。
- (void)checkForMotion {
CMMotionManager *motionMgr = appDelegate.motionMgr;
CMDeviceMotion *deviceMotion = motionMgr.deviceMotion;
CMAttitude *attitude = deviceMotion.attitude;
if (referenceAttitude != nil)
{
[attitude multiplyByInverseOfAttitude: referenceAttitude];
double deltaAlt = attitude.pitch;
double deltaAzm = attitude.roll;
// Do something with deltaAlt and deltaAz
}
else
{
NSLog(@"Getting new referenceAttitude");
self.referenceAttitude = attitude;
}
}
但是,这只是不产生正确的结果。如果手机垂直(长轴向上),那么deltaAlt可以正常工作。只要手机指向地平线(alt = 0),那么deltaAzm也是正确的。但是,如果手机如果指向(例如)45º仰望天空,那么当我将手机移动到方位角时,高度分量也会发生变化。这两个以我无法理解的方式交织在一起。
有一些简单的数学,我需要把这些分开吗?再次,我会认为这将是增强现实应用程序的必要需求,但我一直无法找到任何这样做的例子。
你有没有找到解决问题的办法呢? – 2011-04-24 06:15:08